看板娘加载中
259 字
1 分钟
ctfshow Format String Vulnerability pwn91

shot 1 shot 2 shot 3

已知 getshell 的方式是将 daniu 的值改为 6。继续跟进后发现 daniubss 段。

shot 4

地址是 0x804B038

shot 5

ctfshow 函数中存在格式化字符串漏洞,这里主要考察格式化字符串漏洞的内存读取和任意写。

看到程序将标准输入的内容直接丢给 printf 函数,就应该想到格式化字符串漏洞的存在。

shot 6

先分析这次泄露的结果,算出偏移。静态分析其实也可以得出偏移,但这里直接动调更快。

shot 7

第七个位置是目标值,所以对应格式化字符串的偏移是 7,写成 %7$p 就可以命中。

接下来利用格式化字符串漏洞的任意写。先把 p32(daniu_addr) 放在 s 的开头,然后利用 b"%2c%7\\$n"daniu 写成 6。这里 p324 字节,再加上 2char,总长度正好是 6,而 %n 写入的正是当前已经输出的数据长度。

exp:

shot 8 shot 9

ctfshow{986d0644-98ba-47f7-bcc5-b18251b21818}

ctfshow Format String Vulnerability pwn91
https://alf-ovo.cn/posts/ctfshow-format-string-vulnerability-pwn91/
作者
AlF
发布于
2026-06-04
许可协议
CC BY-NC-SA 4.0