pwn0基础第一弹

admin 2022年1月5日23:11:19CTF专场评论9 views829字阅读2分45秒阅读模式

>

>

pwn0基础第一弹

admin

题目

下载二进制文件,使用checksec命令查看保护开启情况

  • 可以看到,二进制文件是32位文件
  • 开启了NX保护

    使用IDA查看代码

  • 找到main函数,在左侧可以直接双击,然后按F5可以查看C语言的代码
  • 主函数调用了welcome函数,双击welcome可以进入welcome函数
  • 发现危险函数.gets,这里没有判断长度,可能造成栈溢出。可以看到定义了字符数组s,距离ebp为0x14偏移。
  • 为了大家更好的理解栈,我这里简单的举个栗子。当调用一个函数的时候,需要给这个函数传入参数,参数的
    值需要放到一个内存地址来保存。否则这个函数执行起来的时候,参数没有办法拿到。
  • 再形象一点,就是老板说:去,把这堆砖搬了。
  • 可以把这句话理解为一个CPU指令,调用了搬砖这个过程(函数),条件是这堆(参数)。此时作为我们搬砖人
    开始执行搬砖这个过程(函数),我们搬之前,先在心里记住了要搬砖的位置(参数入栈),然后执行搬砖这个动作
    使用砖块位置(栈上参数)作为执行对象。搬完砖之后,跑回老板这里(返回地址),告诉老板,我搬砖完成了。
  • 溢出就是,我告诉你的砖块位置很长,长到把老板的位置(返回地址)给盖住了,当我们搬砖完毕后,发现直接
    到了老板的保险箱旁边,而且保险箱还没有上锁!
  • 我个人理解的栈溢出就是这么个概念,大家见笑了。下面我们分析代码:

    脚本

  • 我是故意不用文本的,有心的同学可以自己动手操作一番。
  • getFlag_Address 是怎么来的呢?看下面的图,IDA帮我们分析出来了
  • 该字符串距离 ebp 的长度为 0x14,那么相应的栈结构为
    +-----------------+
    | retaddr |
    +-----------------+
    | saved ebp |
    ebp--->+-----------------+
    | |
    | |
    | |
    | |
    | |
    | |
    s,ebp-0x14-->+-----------------+

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


特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月5日23:11:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  pwn0基础第一弹 http://cn-sec.com/archives/720046.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: