259 字
1 分钟
ctfshow Format String Vulnerability pwn91
2026-06-04
ctfshow
/ Format String Vulnerability

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

地址是 0x804B038。

ctfshow 函数中存在格式化字符串漏洞,这里主要考察格式化字符串漏洞的内存读取和任意写。
看到程序将标准输入的内容直接丢给 printf 函数,就应该想到格式化字符串漏洞的存在。

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

第七个位置是目标值,所以对应格式化字符串的偏移是 7,写成 %7$p 就可以命中。
接下来利用格式化字符串漏洞的任意写。先把 p32(daniu_addr) 放在 s 的开头,然后利用 b"%2c%7\\$n" 把 daniu 写成 6。这里 p32 占 4 字节,再加上 2 个 char,总长度正好是 6,而 %n 写入的正是当前已经输出的数据长度。
exp:

ctfshow{986d0644-98ba-47f7-bcc5-b18251b21818}
ctfshow Format String Vulnerability pwn91
https://alf-ovo.cn/posts/ctfshow-format-string-vulnerability-pwn91/