20145203盖泽双 《网络对抗技术》实践1—— MAL_逆向与Bof基础
20145203盖泽双 《网络对抗技术》 MAL_逆向与Bof基础
实践目标
(1)我们要通过修改程序代码,使得程序运行其自身中本不该运行的代码片段。
(2)在这里,我们有一个名为20145203pwn1的linux可执行文件,该代码的执行流程为:main调用foo函数,foo函数会简单回显任何用户输入的字符串。我们要想办法运行该程序中包含的另一个代码片段——getShell,并返回一个可用Shell。
实现思路
(1)强行修改程序执行流:手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
(2)运行原本不可访问的代码片段:利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
(3)注入运行任意代码:注入一个自己制作的shellcode并运行这段shellcode。
基础知识
(1)缓冲区溢出:简单的说就是计算机对接收的输入数据没有进行有效的检测(理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符),向缓冲区内填充数据时超过了缓冲区本身的容量,而导致数据溢出到被分配空间之外的内存空间,使得溢出的数据覆盖了其他内存空间的数据。
(2)objdump -d test: 对test文件反汇编
(3)more:用于分页显示文本文件,还支持直接跳转行等功能。
(4)e8:机器指令e8为跳转之意。
(5)Perl:Perl是一门解释型语言,不需要预编译,可以在命令行上直接使用。使用输出重定向“>”将perl生成的字符串存储到文件input中。
(6)bp : 16位寄存器;ebp:32位寄存器;rbp: 64位寄存器。
(7)寄存器ebp:指向当前的栈帧的底部(高地址);寄存器esp:指向当前的栈帧的顶部(低址地)。
(8)寄存器eip:保存程序下一步所要执行指令的地址。
实验步骤
方法一:直接修改程序机器指令,改变程序执行流程
(1)将文件进行备份。
cp pwn1 20145203pwn1

(2)验证可执行文件功能。
./20145203pwn1

(3)将可执行文件进行反汇编。
objdump -d 20145203pwn1 | more

(4)由图3、图4、图5可观察到,main函数第五行的汇编指令"call 8048491 ",指这条指令将调用位于地址8048491处的foo函数,其对应机器指令为“e8 d7ffffff”。getshell的地址为804847d。


“e8 d7ffffff”的作用: e8即跳转之意。即此时此刻EIP=80484ba的值应该是下条指令的地址,但因为有 “e8 d7ffffff”这条指令,CPU就会转而执行 “EIP + d7ffffff”这个地址的指令。“d7ffffff”是补码,表示-41,41=0x29,80484ba +d7ffffff= 80484ba-0x29正好是8048491这个值。
因此,main函数调用foo,对应机器指令为“ e8 d7ffffff”,那我们想让它调用getShell,只要修改“d7ffffff”为,"getShell-80484ba"对应的补码就行。计算47d-4ba就能得到补码为c3ffffff。
(5)修改可执行文件。
①用vi编辑器进行修改。
vi 20145203pwn1
②将当前模式切换到16进制模式。

③找到要修改的指令。

④进行修改。

⑤修改后保存退出,反汇编查看修改结果。

⑥执行修改后的文件,得到shell提示符“#”。

方法2 :通过构造输入参数,造成BOF攻击,改变程序执行流
(1)对可执行文件进行gdb调试。
gdb 20145203pwn2

(gdb) r

(2)查看文件的执行信息。
(gdb) info r

(3)由图12我们可以观察到eip寄存器中的值为0x35353535,即5555的ASCII码。而eip寄存器的功能是保存程序下一步所要执行指令的地址,此处我们可以看出本来应返回到foo函数的返回地址已被"5555"覆盖。所以我们只需要将溢出的5555改为getshell的地址804847d,使getshell的地址刚好溢出到eip寄存器中就可以了。下面我们应该思考将修改哪几个5,以及怎样修改。
(4)将文件重新进行调试,确定溢出数据的具体信息。

(5)因为不知道这台机器采用的字节序是大端还是小端,所以无法确定输入数据应为\x08\x04\x84\x7d还是\x7d\x84\x04\x08。 所以我们在输入字符串的地方0x804849d处设置断点,查其eip 0x804849d 0x804849d ,再对比之前 eip 0x34333231 0x34333231 (4321对应ASCII码为34333231)所以得出正确应输入 11111111222222223333333344444444\x7d\x84\x04\x08

(6)我们无法通过键盘输入\x7d\x84\x04\x08这样的16进制值(foo函数的输入是字符串形式,不是数值),所以要先生成包括这样字符串的一个文件。如下图:

\x0a表示回车,如果没有的话,在程序运行时就需要手工按一下回车键。
(7)执行修改过的文件,将input的输入,通过管道符"|",作为pwn1的输入。

20145203盖泽双 《网络对抗技术》实践1—— MAL_逆向与Bof基础的更多相关文章
- 20145314郑凯杰《网络对抗技术》实验1 逆向及Bof基础实践
20145314郑凯杰<网络对抗技术>实验1 逆向及Bof基础实践 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数 ...
- 20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础
20155201 李卓雯 <网络对抗技术>实验一 逆向及Bof基础 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,f ...
- 2017-2018-2 20155229《网络对抗技术》Exp1:逆向及Bof基础实践
逆向及Bof基础实践 实践基础知识 管道命令: 能够将一个命令的执行结果经过筛选,只保留需要的信息. cut:选取指定列. 按指定字符分隔:只显示第n 列的数据 cut -d '分隔符' -f n 选 ...
- # 2017-2018-2 20155231《网络对抗技术》实验九: Web安全基础实践
2017-2018-2 20155231<网络对抗技术>实验九: Web安全基础实践 实验要求: 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验内容: ( ...
- 2017-2018-2 20155228 《网络对抗技术》 实验九:Web安全基础
2017-2018-2 20155228 <网络对抗技术> 实验九:Web安全基础 1. 实践内容 1.1 标理解常用网络攻击技术的基本原理 1.2 在Webgoat实验环境下实践相关实验 ...
- 20145325张梓靖 《网络对抗技术》 PC平台逆向破解
20145325张梓靖 <网络对抗技术> PC平台逆向破解 学习任务 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并 ...
- 20145336张子扬 《网络对抗技术》 PC平台逆向破解
#20145336张子扬 <网络对抗技术> PC平台逆向破解 ##Shellcode注入 **基础知识** Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对 ...
- 20145311王亦徐《网络对抗技术》MAL_逆向与Bof基础
20145311王亦徐<网络对抗技术>MAL_逆向与Bof基础 实践目标 运行一个可执行文件,通过逆向或者Bof技术执行原本不应该执行的代码片段采用的两种方法: 1.利用foo函数的Bof ...
- 20145333 《网络对抗技术》 PC平台逆向破解
20145333 <网络对抗技术> PC平台逆向破解 20145333 <网络对抗技术> PC平台逆向破解 Shellcode注入 基础知识 Shellcode实际是一段代码, ...
随机推荐
- 一个比较好用的省内存的ORM
http://www.52chloe.com 记录一下,完了,就这样
- T-SQL:批GO使用实例(十四)
批是由客户端应用程序作为一个单元发送给SQL Server 执行的一条或多条语句 如果批中出现错误就整个批都不会交给SQL SERVER 执行 PRINT '第一批';GO -- Invalid b ...
- 菜鸟入门【ASP.NET Core】6:配置的热更新、配置的框架设计
配置的热更新 什么是热更新:这个词听着有点熟悉,但到底是什么呢? 一般来说:创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOpti ...
- Graphviz的安装 - windows环境下
1. 官网下载 http://www.graphviz.org/ 往下拉,选择这一个 点进去,选择msi文件下载 下载完成之后,直接双击运行即可 安装完成之后要配置环境变量 2. 配置环境变量 将gr ...
- vue.js及项目实战[笔记]— 04 axios
一. axios 1. 基本使用 axios.method('url',[,...data],options) .then(function(res){ }) .catch(function(err) ...
- Vagrant安装配置
转载自:https://my.oschina.net/u/3424381/blog/888205 Vagrant安装配置 实际上Vagrant只是一个让你可以方便设置你想要的虚拟机的便携式工具,它底层 ...
- Python 再谈变量作用域与变量引用
再谈变量作用域与变量引用 by:授客 QQ:1033553122 module3.py #!/usr/bin/env python # -*- coding:utf-8 -*- __author_ ...
- 安卓开发_浅谈主配置文件(AndroidManifest.xml)
AndroidManifest.xml本质:是整个应用的主配置清单文件包含:该应用的包名,版本号,组件,权限等信息作用:记录该应用的相关的配置信息 一.常用标签(1).全局篇(包名,版本信息)(2). ...
- Vue父组件接收不到子组件$emit事件的原因分析
通常有两种情况: 事件名称不全是小写.事件名称要求全小写. 不是父子关系.这里的父子关系是严格的父子关系,祖孙关系也不行.只能一层一层触发,这在写树形组件时,很容易掉坑里.
- Expo大作战(三十七)--expo sdk api之 GLView,GestureHandler,Font,Fingerprint,DeviceMotion,Brightness
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...