本文由wkeyi0x1原创
一般的栈溢出类型的题都是有system函数并且执行的命令是/bin/sh,我们只需要将溢出的字节数控制到返回地址并把返回地址替换成system函数的地址即可执行/bin/sh来获取一个shell
本文字数:1554字
图片数量:36张
阅读时间:4分钟
准备工具:IDA Pro、Python3、ROPgadget
0x01 预备工作
首先file一下,看到是 ELF 64位程序
然后再checksec一下,可以看到没有开启保护,看着样子是没有保护
0x02 运行程序
· 默认int类型数据最大值是2147483647,如果超出这个值的话就会变成负数
运行程序后是让我们输入int类型的参数,而且题目是easy_int,可以猜想是整数溢出,同时也可以使程序内部条件成立然后执行vuln函数
main函数
vuln函数,发现最后调用了system函数
输入比最大值大的数后发现成功转跳到下一步
0x03 IDA查看_system函数地址
_system函数地址0x00401090(图中红框标记错了,应是上面那个函数)
0x04 修改system函数的参数
进入vuln函数我们可以看到system函数的参数为"ok!"执行的命令并不是/bin/sh
查看溢出长度
接下来就是常规ROP,在read函数执行的时候溢出覆盖返回地址,写入system函数的参数,也就是"/bin/sh"地址
0x05 编写POC
编写payload
POC
领取专属 10元无门槛券
私享最新 技术干货