zoukankan      html  css  js  c++  java
  • 20145204《网络对抗》逆向及bof基础实践

    20145204《网络对抗》逆向及bof基础实践

    实践目的说明

    • 实践的对象是一个名为pwn1的linux可执行文件。

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

    • 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。

    • 实践一是直接修改程序机器指令,改变程序执行流程。

    • 实践二的目标是利用foo函数中的Bof漏洞,触发getshell代码运行。

    • 实践三的目标是构造shellcode,实现缓冲区溢出攻击。

    实践一

    知识要求:
    
    1.反汇编指令:objdump;
    2.十六进制编辑工具(wxhexeditor);
    3.vi下显示模式转化为16进制指令:%!xxd;
    4.Call指令执行后,EIP寄存器,指令跳转的偏移计算方法:EIP(after)=EIP(befor)+x(未知数)。
    
    

    按照老师给出的步骤call指令的目标地址由d7ffffff变为c3ffffff。

    以下是实验结果:

    实践二

    如下图所示:

    我们需要构造数据填充缓冲区直到覆盖ebp和返回地址的数据。

    1、刚开始构造的时候,字符串长度不够,看图中ebp覆盖了两个字节的数据36(6的ascii码),eip没有变化。如下图

    2、增加长度,使得eip值改变为:0x373737(7的ascii)码。

    3、确定返回地址被覆盖的位置。eip的值为36353433,即为3456这四个数字的位置。

    4、在确定内存地址的格式后,构造输入字符串。得到最终结果如下:

    实践三

    知识要求:
    
    shellcode:指溢出后执行的能开启系统shell的代码。但是在缓冲区溢出攻击时,也可以将整个触发缓冲区溢出攻击过程的代码统称为shellcode,因此可以将shellcode分为以下4个部分:
    
    1、核心shellcode代码,包含了攻击者要执行的所有代码。
    
    2、触发shellcode的溢出地址。
    
    3、填充物,填充未使用的缓冲区,一般使用nop指令填充——0x90表示。
    
    4、结束符号0,对于符号串shellcode需要用0结尾,避免溢出时字符串异常。
    
    5、linux下有两种构造shellcode的方法:retaddr+nop+shellcode;nop+shellcode+retaddr。
    
    
    

    实践过程:

    按照要求设置基本环境后开始(其中shellcode直接用的老师代码):

    尝试第一种构造shellcode方法:retaddr+nop+shellcode

    1、在一个终端中构造shellcode,并在终端中注入这段攻击(其中“x4x3x2x1”处是即将要填的shellcode起始地址),如下图所示:

    2、打开另一个终端,查看./pwn进程的ID号,并进行gdb调试,如下图所示,可以看到ret地址是0x080484ae(ret后就会跳到即将要覆盖的返回地址的位置处):

    3、开始在0x080484ae处设置断点,并不断向前查看地址知道找到shellcode起始地址,最终找到shellcode起始地址为0xffffd2e0(0xffffd2dc+4)。

    4、将构造的shellcode中“x4x3x2x1”改为“0xffffd2e0”,结果不成功。

    尝试第二种构造方法:anything+retaddr+nops+shellcode。

    1、如下图“x4x3x2x1”处是即将要覆盖的shellcode返回地址为:0xffffd300。

    2、构造shellcode:perl -e 'print "A" x 32;print "x00xd3xffxffx90x90x90x90x90x90x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80x90xe0xd2xffxffx00"' > input_shellcode

    最终成功。如下图:

    参考资料

  • 相关阅读:
    天梯赛5-12 愿天下有情人都是失散多年的兄妹 【dfs】
    poj2718 Smallest Difference【贪心】
    HDU problem 5635 LCP Array【思维】
    codeforces 782C Andryusha and Colored Balloons【构造】
    HDU 4278 Faulty Odometer【进制转换】
    codeforces B. The Meeting Place Cannot Be Changed【二分】
    POJ 3264 Balanced Lineup 【线段树】
    HDU 1850
    CodeForces-714C
    HDU Problem 1247 Hat's Words 【字典树】
  • 原文地址:https://www.cnblogs.com/yayaer/p/6476742.html
Copyright © 2011-2022 走看看