• 20145336张子扬 《网络对抗》逆向及bof基础


    20145336张子扬 《网络对抗》逆向及bof基础

    学习知识点

    缓冲区溢出

    缓冲区溢出

    一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。

    缓冲区溢出原理

    通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。

    实践内容

    实践背景

    本次实践的对象是一个名为pwn1的linux可执行文件。该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。

    实践一

    • 首先我们需要了解这个文件,所以我们对pwn1进行反汇编操作
    • 上图主要有三列内容,首先第一列是指代码段在内存中的地址,第二列指的是及其指令,第三列是指汇编指令。我们主要阅读第三列来了解这段代码是有何作用。第一张图主函数右下角的"call 8048491 ",这是一条汇编指令,是说这条指令将调用位于地址8048491处的foo函数,我们此次实验的主要目的就是将这里调用的foo函数的地址用缓冲区溢出的方法将地址改为get shell函数的地址从而进行攻击。
    • 然后我们用vim文本编辑器打开文件,之后将会显示一大堆乱码,这是显示的ASCII码。想要查看内容输入“:%!xxd”,将显示模式显示为16进制模式。
    • 查看需要修改内容的地方,这里我们需要更改e8d7的位置,然后输入“/e8 d7”,查找要修改的内容,注意中间有空格,不然会出错。将d7改为c3。
    • 用“:%!xxd -r”将16进制转换为原格式,再用“:wq”存盘退出vim。
    • 最后一步验证一下这个代码。用反汇编再看看这个及其指令是否发生变化。下面两张图很清楚的显示了call返回地址的变化。
    • 运行一下,查看结果。

    实践二

    • 首先和实践一相同,反汇编了解程序的基本功能。
    • 然后我们需要确定那几位缓冲区溢出的字符会覆盖返回地址。之后使用gdb调试来测试程序,我选择使用1111122222333334444455555666667777788888来进行测试。
    • 观察寄存器eip的值,后面显示0x38373737,这里显示的ASCII码转换为数字就是7778,很容易就能找到这几位字符所在的位置。
    • 然后构造输入字符传,我们需要生成包括一个字符串的文件来让系统输入x7dx84x04x08这样的16进制值,如下图。
    • 这样我们使用管道符“|”作为pwn1的输入。下面是实验结果。
  • 相关阅读:
    矩阵的运算和分块
    组合数
    二项式定理
    Python 生成 PSK (PSK认证时,PMK就是PSK)
    ruby opposite of any?
    大大的问号之Ruby
    41 KMP子串查找算法
    字符串变量存储位置
    java中wait和notify
    java 动态代理
  • 原文地址:https://www.cnblogs.com/20145336yang/p/6507519.html
Copyright © 2020-2023  润新知