攻防世界 CGfsb

博客详细分析了攻防世界CGfsb挑战中的格式化字符串漏洞,通过IDA分析揭示了程序流程。指出当未初始化的变量pwnme值为8时,可以利用printf函数的漏洞,通过构造特定payload修改pwnme的值,达到成功获取flag的目的。
摘要由CSDN通过智能技术生成

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,

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值