zoukankan      html  css  js  c++  java
  • 20145332 《网络攻防》 逆向与Bof实验

    20145332 《网络攻防》逆向与Bof实验

    实践目标

     本次实践的对象是一个名为pwn1的linux可执行文件。
     该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。
     该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。这次实验的目标就是想办法运行这个代码片段。
     我们将学习两种方法:
         ①利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
         ②手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
    

    基础知识

     该实践需要熟悉Linux基本操作,能看懂常用指令,如管道(|),输入、输出重定向(>)等。理解Bof的原理。能看得懂汇编、机器指令、EIP、指令地址。会使用gdb,vi。
    

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

     首先对pwn1进行反汇编,指令为objdump -d pwn1 | more
    


    先看第12行,"call 8048491 "是汇编指令,是说这条指令将调用位于地址8048491处的foo函数;其对应机器指令为“e8 d7ffffff”,e8即跳转之意。本来正常流程,此时此刻EIP的值应该是下条指令的地址,即80484ba,但一解释e8这条指令呢,CPU就会转而执行 “EIP + d7ffffff”这个位置的指令。“d7ffffff”是补码,表示-41,41=0x29,80484ba +d7ffffff= 80484ba-0x29正好是8048491这个值,main函数调用foo,对应机器指令为“ e8 d7ffffff”,那我们想让它调用getShell,只要修改“d7ffffff”为,"getShell-80484ba"对应的补码就行。用Windows计算器,直接 47d-4ba就能得到补码,是c3ffffff。下面就修改可执行文件,将其中的call指令的目标地址由d7ffffff变为c3ffffff。
    在修改前先将pwn1复制一份,命名为pwn20145332,指令为:cp pwn1 pwn20145332。使用vi编译,在输入完vi后出现的是乱码,需要将其转化为十六进制,使用的指令为%!xxd,然后使用指令/e8d7,找到需要修改的地方,将d7修改为c3,。(这部分没有截图,只截取了修改后的结果)

    修改后使用指令%!xxd -r将其转化为原来的形式,然后保存退出。运行pwn20145332,指令为./pwn20145332,运行下改后的代码,会得到shell提示符#,结果如下:

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



    在实验前,将pwn复制一份,命名为20145332
    实验指令为:more input,xxd input,(cat input; cat) | ./20145332,结果如下:

  • 相关阅读:
    macbook 无声音解决方案
    webapck dev server代理请求 json截断问题
    百度卫星地图开启
    服务器 nginx配置 防止其他域名绑定自己的服务器
    记一次nginx php配置的心路历程
    遇到npm报错read ECONNRESET怎么办
    运行svn tortoiseSvn cleanup 命令失败的解决办法
    svn add 命令 递归目录下所有文件
    m4出现Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."
    Ubuntu下安装GCC,mpc、mpfr、gmp
  • 原文地址:https://www.cnblogs.com/lx20145332/p/6480628.html
Copyright © 2011-2022 走看看