pwn0基础第一弹

admin 2021年10月11日22:25:24pwn0基础第一弹已关闭评论58 views字数 857阅读2分51秒阅读模式

题目

下载二进制文件,使用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–>+—————–+

我感觉我已经写的非常详细了,避免了枯燥的概念,希望可以帮到大家。如有错误,欢迎指正。

相关推荐: web_ctf 题型总结

ctf 常见套路总结01、   工具集02、   常用套路总结web源码泄露003、  php弱类型004、   绕 WAF附一张图01、 工具集    基础工具  &n…

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年10月11日22:25:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   pwn0基础第一弹https://cn-sec.com/archives/578001.html