题目描述:菜鸡面对着pringf发愁,他不知道prinf除了输出还有什么作用
0x01
checksec
IDA
运行效果
0x02
分析程序,需要在pwnme的值等于8的时候才能得到flag,但是pwnme的值是不可控的
观察pwnme上面的代码,用到了printf(&s),可以使用格式化字符串漏洞改pwnme的值
格式化字符串漏洞
1 | printf(s); |
通过格式化字符串的漏洞把值写入pwnme中
在massage处输入,下面的printf函数会帮我们把内容输出
AAAA-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x
41414141就是我们输入的四个A的十六进制,偏移量是10
pwnme需要等于8,可以使用四个a凑字数
0x03
exp构造
1 | from pwn import * |