Stack2 攻防世界题目分析

本文详细分析了XCTF 4th-QCTF-2018中的一道栈溢出题目,探讨了开启Canary保护的32位程序的攻防策略。通过IDA查看,发现无法简单利用溢出修改返回地址,而是需要精确狙击栈帧中特定位置。在理解程序执行流程和栈布局后,利用system('sh')来获取shell。此外,文章还总结了从该题中学到的知识点和未来需要学习的技能。
摘要由CSDN通过智能技术生成

—XCTF 4th-QCTF-2018

前言,怎么说呢,这题目还是把我折磨的可以的,我一开始是没有看到后面的直接狙击的,只能说呢。

我的不经意间的粗心,破坏了你许多的温柔

1.气的我直接检查保护:

在这里插入图片描述
32位程序,开启了canary保护。

2.ida查看:

在这里插入图片描述
在这里插入图片描述
首先放的第一幅图片呢,是我一开始以为可以溢出的,也可以看见我旁边标注了一个maybeoverflow。

  • 但是是不可以的,因为首先由于这里的 i 最大上限100,可能有的人头铁就要说了,这里v7可以慢慢溢出去修改i,(和我一样)
    可是这里v13的存储位置是和i有关的,所以不可能让你能一直溢出,后面看到了canary,我又去找了找格式化漏洞,没有找到,最最最离谱的是:
    我居然想着去修改tls字段的canary数值和canary数值(有这个方法,但是这里用不了)

最后看到当我输入3的时候,那里有一个非常明显的定向狙击。

那就很简单了,去开心的写exp,确定 偏移量为74
在这里插入图片描述
那就v13[0x74]=???v13[0x75]=???

结果就是失败,为什么呢???
答案是这道题它后面会对栈帧做一定调整,也就是ebp上面一位高地址的地方并不是返回地址,我们这里可以结合着汇编代码看一下
在这里插入图片描述
在没有运行结束前,ebp下一位标的返回地址是0xffffd15c,但是我们看看ida里面的代码:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值