zoukankan      html  css  js  c++  java
  • 20145335郝昊《网络对抗》逆向及Bof基础实践

    20145335郝昊《网络对抗》逆向及Bof基础实践

    1.实践说明

    • 本次实践是对一个名为pwn1的可执行Linux文件进行操作。程序的执行流程是:主函数main调用foo函数,foo将函数其功能简单回显任何用户输入的字符串。

    • 程序包含另一个代码片段,getshell,会返回一个可用shell

    • 使用两种方法进行修改文件pwn1的代码:

       - 利用`foo`函数的`Bof`漏洞构造一个攻击输入字符串,覆盖返回地址,出发`getShell`函数。
      
       - 手工修改可执行文件,改变程序执行流程,直接跳转到`getShell`函数。
      

    2.实践过程

    • 直接修改程序机器指令

      • 第一:首先确定文件pwn1是可以执行的。

      • 第二:用vi打开pwn1文件,会发现是乱码,使用命令%!xxd将乱码格式修改为16进制进行表示。

      • 第三:使用命令/e8 d7查找到要修改的内容,使用i为键入模式,将d7修改为c3

      • 第四:使用命令%!xxd -r还原为原格式,并使用命令:wq保存退出vi

      • 实践结果会得到:

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

      • 法现该可执行文件正常运行是调用如下函数foo,这个函数有Buffer overflow 漏洞。

         	080484af <main>:
         	80484af:   55                      push   %ebp
         	80484b0:   89 e5                   mov    %esp,%ebp
         	80484b2:   83 e4 f0                and    $0xfffffff0,%esp
         	80484b5:   e8 d7 ff ff ff          call   8048491 <foo>
        

        上面的call调用foo,同时在堆栈上压上返回地址:80484ba

      • 确认输入字符串哪几个字符会覆盖到返回地址

        为了确定使用多少个字节才会使缓冲区溢出,这里使用暴力破解法,及一个一个字符添加直到出现Segmentation fault字样。

      • 使用GDB调试

      • 确认用什么值来覆盖返回地址

        getShell的内存地址是0804847d。

        接下来要确认下字节序(这里是低字节放在高位的大端法),简单说是输入20145335201453352014533520145335x7dx84x04x08。(前面32字节可以任意输入)

      - 构造书输入字符串
      
         然后将input的输入,通过管道符“|”,作为的输入。
      

  • 相关阅读:
    unexpected inconsistency;run fsck manually esxi断电后虚拟机启动故障
    centos 安装mysql 5.7
    centos 7 卸载mysql
    centos7 在线安装mysql5.6,客户端远程连接mysql
    ubuntu 14.04配置ip和dns
    centos7 上搭建mqtt服务
    windows eclipse IDE打开当前类所在文件路径
    git 在非空文件夹clone新项目
    eclipse中java build path下 allow output folders for source folders 无法勾选,该如何解决 eclipse中java build path下 allow output folders for source folders 无法勾选,
    Eclipse Kepler中配置JadClipse
  • 原文地址:https://www.cnblogs.com/20145335hh/p/6485259.html
Copyright © 2011-2022 走看看