zoukankan      html  css  js  c++  java
  • 20145210姚思羽《网络对抗技术》逆向及Bof基础实践

    20145210姚思羽《网络对抗技术》逆向及Bof基础实践

    实践目标

    1.本次实践的对象是一个名为pwn1的linux可执行文件。

    2.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。

    3.该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。

    4.我们将学习两种方法

    (1)利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。

    (2)手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。

    5.现实情况中的攻击目标

    (1)运行原本不可访问的代码片段

    (2)强行修改程序执行流

    (3)以及注入运行任意代码

    基础知识

    掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码:

    (1)NOP:NOP指令为空指令,运行时CPU什么都不做,但是会占用一个指令的时间,通常用于延时或等待

    (2)JNE:条件转移指令,当不相等时跳转,机器码为75

    (3)JE:条件跳转指令,当相等时跳转,机器码为74

    (4)JMP:无条件跳转指令

    (5)CMP:比较指令,比较两个操作数的大小,用第一个操作数减去第二个操作数,但是不影响两个操作数的值,但会影响标志寄存器

    直接修改程序机器指令,改变程序执行流程

    知识点要求:

    (1)call指令,EIP寄存器,指令跳转的偏移计算:EIP(new)=EIP+x(在本次试验中,要让程序执行getShell函数,通过计算0804847d-80484ba结果的补码为c3ffffff,将call指令的目标地址由d7ffffff变为c3ffffff即可)

    (2)反汇编指令objdump

    (3)将文件转为十六进制的指令:%!xxd

    (4)补码:d7ffffff是-41的补码表示

    1.进入文件得到乱码,输入指令:%!xxd得到十六进制表示模式,在文件中找到e8d7,并进行修改:

    2.转换为原格式,保存退出

    3.反汇编查看call已调用getShall:

    4.运行修改后的代码,得到shell提示符#:

    通过构造输入参数,造成BOF攻击,改变程序执行流

    ·分析反汇编代码发现该文件正常会调用foo函数,但该函数有这个函数有Buffer overflow漏洞,只预留了一定字节的缓冲区,超出部分会造成溢出,getShell函数可实现shell,我们的目标是触发geyShell函数

    1.使用gdb调试,输入1111111122222222333333334444444455555555

    2.观察到寄存器eip的值为0x35353535,即5555,可以看出下一步要执行指令的地址为5555,即5555将本来要返回的foo函数的地址覆盖掉了

    3.将55555555换成12345678,查看具体是哪个字符将foo函数的地址覆盖了

    4.寄存器eip的值变为0x34333231,即1234,可以看出是1234覆盖了其新的eip,所以我们可用getshell的内存地址替换这4个字符即可触发getShell函数。

    5.getShell的内存地址是0804847d,替换后即11111111222222223333333344444444x7dx84x04x08

    6.我们无法通过键盘输入x7dx84x04x08这样的16进制值,所以先生成包括这样字符串的一个文件:

    perl -e 'print "11111111222222223333333344444444x7dx84x04x08x0a"' > input
    

    再使用16进制查看指令xxd查看input文件的内容:

    7.将input的输入,通过管道符“|”,作为pwn1的输入来跳转至getShell:

  • 相关阅读:
    入坑C++之vs 新建C++项目
    入坑C++
    Solidity属性和方法的访问权限
    Solidity构造函数和析构函数
    网络直播应成为价值出口(人民时评)
    CODEVS 1203 判断浮点数是否相等
    CODEVS 1203 判断浮点数是否相等
    如何快速高效简洁的打开软件 干净利索的windows快捷程序启动器
    如何快速高效简洁的打开软件 干净利索的windows快捷程序启动器
    2018年开源状况:代码贡献超310亿行,而漏洞超16000个
  • 原文地址:https://www.cnblogs.com/20145210ysy/p/6497973.html
Copyright © 2011-2022 走看看