20181313毕然《网络对抗技术》——Exp1 PC平台逆向破解

《网络对抗技术》——Exp1 PC平台逆向破解

一、实践目标

本次实践的对象是一个名为pwn20181313的linux可执行文件。

该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。该程序同时包含另一个代码片段getShell,会返回一个可用Shell。正常情况下这段代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。

我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。

四个实践内容如下:

  • 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
  • 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
  • 注入一个自己制作的shellcode并运行这段shellcode。
  • 结合nc模拟远程攻击。

这几种思路,基本代表现实情况中的攻击目标

  • 运行原本不可访问的代码片段;
  • 强行修改程序执行流;
  • 注入运行任意代码。

二、基础知识

  • 熟悉Linux基本操作——能看懂常用指令,如管道(|)、输入、输入重定向(>)等
  • 理解BOF的原理——能看懂汇编、机器指令、EIP、指令地址
  • 会使用gdb、vi
  • 指令、参数
    1、掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码
  • NOP 机器码为0x90——空指令。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。
  • JNE 机器码为0x75——条件转移指令,如果不相等则跳转。
  • JE 机器码为0x74——条件转移指令,如果相等则跳转。
  • JMP 机器码为0xE9、EB、FF、EA ——无条件转移指令。段内直接短转Jmp short(机器码:EB);段内直接近转移Jmp near(机器码:E9);段内间接转移 Jmp word(机器码:FF);段间直接(远)转移Jmp far(机器码:EA)
  • CMP 机器码为0x38-0x3D——比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

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

  • 反汇编指令:
objdump -d xxx | more   //反汇编指令查看机器代码

-d 表示反汇编,xxx 为可执行文件,| 为管道符,more为分页指令

  • 十六进制编程器
    用来以16进制视图进行文本编辑的编辑工具软件。十六进制编辑器可以用来检查和修复各种文件、恢复删除文件、硬盘损坏造成的数据丢失等。
vim <filename>: 以ASCII码形式显示可执行文件的内容
:%!xxd: 将显示模式切换为16进制模式
:%!xxd: 将16进制切换回ASCII码模式

三、实验内容


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


  • 知识要求:Call指令,EIP寄存器,指令跳转的偏移计算,补码,反汇编指令objdump,十六进制编辑工具

  • 学习目标:理解可执行文件与机器指令

  • 进阶:掌握ELF文件格式,掌握动态技术

1、对目标文件进行反汇编

cp pwn20181313 pwn20181313.bak    //备份
objdump -d pwn20181313 | more     //反汇编

在这里插入图片描述
在这里插入图片描述

  • "call 8048491 "是汇编指令,EIP寄存器的值为0x80484ba
    • 这条指令将调用位于地址8048491处的foo函数;
    • 其对应机器指令为“e8 d7 ff ff ff”,e8即跳转之意
    • 本来正常流程,此时此刻EIP的值应该是下条指令的地址,即80484ba,但如一解释e8这条指令呢,CPU就会转而执行 “EIP + d7ffffff”这个位置的指令。“d7ffffff”是补码,表示-41,41=0x29,80484ba +d7ffffff= 80484ba-0x29正好是8048491这个值。
    • call指令对应的机器指令的后四字节与EIP存储的地址相加即为调用函数地址。
  • main函数调用foo,对应机器指令为“ e8 d7 ff ff ff”,
    • 那我们想让它调用getShell,只要修改“d7 ff ff ff”为,"getShell-80484ba"对应的补码就行。
    • 用计算器,直接 47d-4ba就能得到补码,是c3 ff ff ff(小端存储)。
      在这里插入图片描述

2、修改可执行文件,将call指令的目标地址由d7 ff ff ff变为c3 ff ff ff。

vi pwn20181313 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值