【pwn】ez_pz_hackover_2016 --pwngdb和pwntools的结合,动态调试
首先checksec

没开nx,说明堆栈可执行,初步考虑需要shellcode,然后拖进ida看主函数逻辑

看chall函数

printf("Yippie, lets crash: %p\n", s)这里泄露的s的地址,即栈上的地址
这里的输入的s数组是不存在栈溢出的,这里的关键代码是这一段
result = (void *)strcmp(s, "crashme");
if ( !result )
return vuln((char)s, 0x400u);
return result;
}
strcmp(s, "crashme")说明字符串只能是crashme,不然放回值不会是0,也就进不去下面那个if语句,但是strcmp只会比较到\x00结束,说明可以输入crashme\x00绕过判断,其实看到这里都还没发现可以getshell的漏洞,然后再点进去vuln函数看看

memcpy是内存拷贝函数:memcpy函数是C/C++语言中常用的内存拷贝函数,用于将一块内存中的数据复制到另一块内存中。其原型通常如下所示:
c复制代码
void *memcpy(void *dest, const void *src, size_t n);
其中:
dest 是目标内存区域的指针,即要将数据复制到的位置。
src 是源内存区域的指针,即要从哪里复制数据。
n 是要复制的字节数。
该函数的作用是将src指向的内存区域中的前n个字节的数据复制到dest指向的内存区域中。由于该函数返回void*类型,通常在使用时需要将其转换为目标类型的指针。
简而言之,就是将我们刚才输入的s数组的数据再拷贝到dest数组里面去,拷贝的字节数在第三个参数里面。
再来看dest数组的栈分布

看这个-0x32,存在栈溢出,欧克,开始疯狂写脚本,最后发现打不通,好好好,ida耍了我一把,dest距离ebp的偏移根本不是这样的,爆!没办法,只能gdb动态调试,这边动态需要gdb和pwntools结合起来,下面是动态调试脚本
ubuntu运行该脚本,弹出gdb界面时,输入c,gdb就会运行至断点处

按了c之后,程序断在了nop指令这里

输入stack 50,查看栈上数据,此时注意右边那张图泄露的s地址(栈地址)0xffbc0f2c
我们输入的数据经过拷贝函数,最终在绿色箭头处(注意此时是在vuln函数里面查看栈),可以发现我们数据是从0xffbc0ef2开始的72是r,63是c,距离ebp0xffbc0f08的偏移是0x16,根本和ida的不一样。
确认了正确偏移后,就可以写脚本了
exp:
【pwn】ez_pz_hackover_2016 --pwngdb和pwntools的结合,动态调试的更多相关文章
- [BUUCTF]PWN——ez_pz_hackover_2016
ez_pz_hackover_2016 题目附件 解题步骤: 例行检查,32位,开启了RELRO保护,二进制的保护机制看这里 由于没有开启nx保护,对于这题一开始想到的是利用写入shellcode来获 ...
- apk逆向 - smali动态调试
author: Dlive date: 2016/10/6 0x00 前言 之前有人问过smali的动态调试方法,其实网上已经有很多文章讲这些内容,但是为了方便大家学习,我还是写一下让大家少走点坑 ...
- 安卓动态调试七种武器之离别钩 – Hooking(下)
0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试 ...
- 安卓动态调试七种武器之离别钩 – Hooking(上)
安卓动态调试七种武器之离别钩 – Hooking(上) 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的 ...
- 安卓动态调试七种武器之孔雀翎 – Ida Pro
安卓动态调试七种武器之孔雀翎 – Ida Pro 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是 ...
- 安卓动态调试七种武器之长生剑 - Smali Instrumentation
安卓动态调试七种武器之长生剑 - Smali Instrumentation 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是 ...
- Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)
一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk 主要采用的是静态方式,步骤也很简单,首先使用 ...
- [转]Android逆向之动态调试总结
一.在SO中关键函数上下断点 刚学逆向调试时.大多都满足于在SO中某关键函数上下断点.然后通过操作应用程序,去触发这个断点,然后进行调试 详细的步骤可以参见非虫大大的<Android软件安全与逆 ...
- Android studio动态调试smali
前面介绍了使用IDA动态调试smali,这种方法设置简单,不用重打包,用起来方便,但是如果变量类型设置错误则会马上退出调试,这是让人不爽的地方,而使用Android studio则不会. 0x01 ...
- 【逆向怎么玩】 动态调试一款牛逼C++ IDE实录
声明 本篇只从逆向兴趣出发,研究其程序运行原理. CLion程序版权为jetBrains所有. 注册码授权为jetBrains及其付费用户所有. 不会释出任何完整的源代码. 涉及能直接推算出注册码的地 ...
随机推荐
- 【技术积累】Linux中的命令行【理论篇】【一】
7z命令 命令介绍 7z命令是Linux系统中的一个压缩和解压缩工具,它可以用来创建.压缩和解压缩7z格式的文件.7z是一种高压缩率的文件格式,通常比其他常见的压缩格式(如zip和gzip)具有更高的 ...
- 零基础入门——从零开始学习PHP反序列化笔记(二)
魔术方法 魔术方法介绍 __construct() 触发时机:实例化对象之前 构造函数,在实例化一个对象的时候,首先会去自动执行的一个方法; <?php class User { public ...
- CentOS7挂载NTFS格式的硬盘
前言 一些NTFS格式的移动硬盘或U盘插在服务器上可能不会自动挂载,本文为手动挂载的步骤. 步骤 安装相关程序: yum install -y ntfs-3g 使用一些命令查看需要挂载的分区 # 查看 ...
- Linux 过滤进程和端口号
IDEA覆盖率测速显示百分比 ctrl + alt + F6 取消勾选 ps - ef | grep java过滤Java进程 netstat -anop | grep 74933 过滤端口号 重命名 ...
- 不重启Docker能添加自签SSL证书镜像仓库吗?
应用背景 在企业应用Docker规划初期配置非安全镜像仓库时,有时会遗漏一些仓库没配置,但此时应用程序已经在Docker平台上部署起来了,体量越大就越不会让人去直接重启Docker. 那么,不重启Do ...
- pycharm+anaconda的关联
Pycharm+anaconda的关联 关联好处:Pycharm和anaconda关联后,pycharm可以直接调用anaconda中已安装好的模块,而anaconda里安装和卸载模块都比较方便. 关 ...
- 《代码整洁之道 Clean Code》学习笔记 Part 1
前段时间在看<架构整洁之道>,里面提到了:构建一个好的软件系统,应该从写整洁代码做起.毕竟,如果建筑使用的砖头质量不佳,再好的架构也无法造就高质量的建筑.趁热打铁,翻出<代码整洁之道 ...
- 1、MyBatis简介
1.1.MyBatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁 移到了Google Code. ...
- Selenium 学习笔记
Selenium 学习笔记 Selenium 框架是时下在 Web 领域中被使用得最为广泛的自动化测试工具集之一,它能帮助程序员们面向指定的 Web 前端应用快速地开发出自动化测试用例,且能实现跨各种 ...
- 如何通过API接口获取淘宝的商品评论
在淘宝网上购买产品时,人们通常会查看其他客户留下的评价和评论.这些评价和评论对于购买决策非常有帮助,因为它们提供了其他客户的观点和建议.通过使用淘宝API接口,可以轻松地获取淘宝上任何商品的评论. 以 ...