1.题目
2.IDA分析
3.流程分析
流程很简单, 输入名字和信息,然后打印刚刚输入的信息出来,如果未初始化的pwnme的值为8,则成功cat flag。这里printf直接把&s打印出来,明显存在格式化字符串漏洞。
解释一下格式化字符串,一般printf的参数是:格式化字符串 + 参数1 + 参数2 ...。如果后面的参数数量对应不上格式化字符串中需要的参数,会自动从栈顶获取对应的参数。如下图:
输入“AAAAAAA%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” 之后,程序直接printf(&s),因为后面没有对应%x的参数,所以直接从栈顶开始获取参数,到第十个%x获取到41414141,这个刚刚好是我们输入的信息的开头的AAAA(我们输入的s也是被保存在栈中,也可以直接计算出s距离栈顶是10个单元。s是在ebp-74h,