pwn0基础第一弹

  • pwn0基础第一弹已关闭评论
  • 5 views
  • A+
所属分类:CTF专场

题目

pwn0基础第一弹

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

pwn0基础第一弹

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

    使用IDA查看代码

    pwn0基础第一弹

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

    脚本

    pwn0基础第一弹

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

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

pwn0基础第一弹

相关推荐: web_ctf 题型总结

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