码迷,mamicode.com
首页 > 其他好文 > 详细

2017-2018-2 『网络对抗技术』Exp1:PC平台逆向破解

时间:2018-03-19 00:27:18      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:alt   超出   mail   获取   输出重定向   foo   系统   shell   方法   

1 逆向及Bof基础实践说明

1.1 实践目标

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

该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。

该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。

三个实践内容如下:

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

利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。

注入一个自己制作的shellcode并运行这段shellcode。

这几种思路,基本代表现实情况中的攻击目标: 运行原本不可访问的代码片段 强行修改程序执行流 以及注入运行任意代码。

1.2 基础知识

该实践需要同学们

熟悉Linux基本操作
能看懂常用指令,如管道(|),输入、输出重定向(>)等。
理解Bof的原理。
能看得懂汇编、机器指令、EIP、指令地址。
会使用gdb,vi。
当然,如果还不懂,通过这个过程能对以上概念有了更进一步的理解就更好了。

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

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

下载目标文件pwn1,反汇编。下面只保留了最核心的几行代码。 技术分享图片

先看第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。

1.

cp pwn1 pwn2
vi pwn2
  1. 输入如下,将显示模式切换为16进制模式 :%!xxd

  2. 查找要修改的内容 /e8d7

  3. 找到后前后的内容和反汇编的对比下,确认是地方是正确的

  4. 修改d7为c3 技术分享图片

  5. 转换16进制为原格式 :%!xxd -r

  6. 存盘退出vi :wq

  7. 再反汇编看一下,call指令是否正确调用getShell 技术分享图片

  8. 遇到找不到文件的问题,解决后运行下改后的代码,会得到shell提示符 技术分享图片

技术分享图片

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

知识要求:堆栈结构,返回地址 学习目标:理解攻击缓冲区的结果,掌握返回地址的获取 进阶:掌握ELF文件格式,掌握动态技术

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

root@KaliYL:~# objdump -d pwn1 | more

8048477: 90 nop 8048478: e9 73 ff ff ff jmp 80483f0 <register_tm_clones>

== 注意这个函数getShell,我们的目标是触发这个函数 ==

0804847d

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

08048491

== 这里读入字符串,但系统只预留了__字节的缓冲区,超出部分会造成溢出,我们的目标是覆盖返回地址 ==

804849d: e8 8e fe ff ff call 8048330 gets@plt 80484a2: 8d 45 e4 lea -0x1c(%ebp),%eax 80484a5: 89 04 24 mov %eax,(%esp) 80484a8: e8 93 fe ff ff call 8048340 puts@plt 80484ad: c9 leave
80484ae: c3 ret

080484af

: 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

2017-2018-2 『网络对抗技术』Exp1:PC平台逆向破解

标签:alt   超出   mail   获取   输出重定向   foo   系统   shell   方法   

原文地址:https://www.cnblogs.com/nxy970408/p/8598250.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!