pwn — ret2syscall

ret2syscall

再来check一下保护,发现开了NX


这次我先看一下应该填充的字符串长度为多少,爆出来发现是112


然后在Ida里看main


发现这是个no system又no shellcode 的题,然后又开了NX,不能用直接调用shell,也不能自己往栈里填一段代码获得shell,那就只能考虑用系统调用了(貌似是这么一个格式execve(‘/bin/sh’,NULL,NULL))

分别把参数存进相应的寄存器里面:

Eax:存系统调用号的(然后查到execve的系统调用号是0xb)

Ebx:存函数的第一个参数(这里是’/bin/sh’)

Ecx、edx:分别存剩下两个NULL

所以我们就要找这些寄存器的地址,这里就会用到gadget这个小工具

ROPgadget --binary rop(文件名) --only ‘pop|ret’ | grep ‘eax’(查找语句里有pop、ret、eax的)


然后发现有几个地址可以用,那就随便选第二个啦,地址:0x080bb196

接下来继续找ebx的


然后找到三个寄存器(ebx、ecx、edx),地址为:0x0806eb90

接着找,int 0x80,这是一个系统调用的中断号(有这个才能用系统调用)



地址为:0x08049421

然后我们再看看有没有/bin/sh这种东西


然后找到了它的地址:0x080be408

最后就开始考虑脚本了


运行exp,就发现OK了啊


你可能感兴趣的:(pwn — ret2syscall)