题目
下载二进制文件,使用checksec命令查看保护开启情况
- 可以看到,二进制文件是32位文件
- 开启了NX保护
使用IDA查看代码
- 找到main函数,在左侧可以直接双击,然后按F5可以查看C语言的代码
- 主函数调用了welcome函数,双击welcome可以进入welcome函数
- 发现危险函数.gets,这里没有判断长度,可能造成栈溢出。可以看到定义了字符数组s,距离ebp为0×14偏移。
- 为了大家更好的理解栈,我这里简单的举个栗子。当调用一个函数的时候,需要给这个函数传入参数,参数的
值需要放到一个内存地址来保存。否则这个函数执行起来的时候,参数没有办法拿到。 - 再形象一点,就是老板说:去,把这堆砖搬了。
- 可以把这句话理解为一个CPU指令,调用了搬砖这个过程(函数),条件是这堆(参数)。此时作为我们搬砖人
开始执行搬砖这个过程(函数),我们搬之前,先在心里记住了要搬砖的位置(参数入栈),然后执行搬砖这个动作
使用砖块位置(栈上参数)作为执行对象。搬完砖之后,跑回老板这里(返回地址),告诉老板,我搬砖完成了。 - 溢出就是,我告诉你的砖块位置很长,长到把老板的位置(返回地址)给盖住了,当我们搬砖完毕后,发现直接
到了老板的保险箱旁边,而且保险箱还没有上锁! - 我个人理解的栈溢出就是这么个概念,大家见笑了。下面我们分析代码:
脚本
- 我是故意不用文本的,有心的同学可以自己动手操作一番。
- getFlag_Address 是怎么来的呢?看下面的图,IDA帮我们分析出来了
- 该字符串距离 ebp 的长度为 0×14,那么相应的栈结构为
+—————–+
| retaddr |
+—————–+
| saved ebp |
ebp—>+—————–+
| |
| |
| |
| |
| |
| |
s,ebp-0×14–>+—————–+
我感觉我已经写的非常详细了,避免了枯燥的概念,希望可以帮到大家。如有错误,欢迎指正。
ctf 常见套路总结01、 工具集02、 常用套路总结web源码泄露003、 php弱类型004、 绕 WAF附一张图01、 工具集 基础工具 &n…
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论