(pwn)基本ROP的几个例子(二)


四、ret2syscall

点击下载文件rop


检查保护


(pwn)基本ROP的几个例子(二)_第1张图片

开启了NX保护

IDA查看代码


(pwn)基本ROP的几个例子(二)_第2张图片

v4相对ebp偏移与上题算法一样,也是十进制下的108,所以需要覆盖的返回地址相对v4偏移112

这次我们不能直接填充代码,但我们能将系统调用的参数放到对应的寄存器中,执行int 0x80就可以执行放入的调用了

系统调用evecve(“/bin/sh”,NULL,NULL)来获取shell

调用时参数

eax=功能号 evecve为11  所以为0xb

ebx应指向/bin/sh地址

ecx,edx为0


当控制这些寄存器的值时,要使用到gadgets


(pwn)基本ROP的几个例子(二)_第3张图片

由上图可得到,0x080bb196控制eax,0x0806eb90控制ebx,ecx,edx


再寻找int 0x80的地址


(pwn)基本ROP的几个例子(二)_第4张图片
int 0x80地址为0x08049421

还需要得到/bin/sh地址


/bin/sh地址为0x080be408


payload

(pwn)基本ROP的几个例子(二)_第5张图片

运行

(pwn)基本ROP的几个例子(二)_第6张图片


总结

         NX保护开启时,无法直接植入自己代码来获取shell时需要用到ropgadgets,利用系统调用获取shell。

参考

          系统调用对应号码

          execve相关

          int 0x80详解

          四种寄存器存放内容


该文的例子来自CTF Wiki

你可能感兴趣的:((pwn)基本ROP的几个例子(二))