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实际是一段代码, ...
随机推荐
- EXTJS4 Grid Filter 插件的使用 与后台数据解析------Extjs 查询筛选功能的实现
先汗一个,一个小功能又踢腾了一天.本来这个带Demo的,但是上面介绍的不是很详细.用的时候问题不大,主要问题在文件导入方面.以为这个插件的使用和其他的不一样. 1.首先是需要引入文件的位置:如图 需要 ...
- 数据库的DevOps实践
---------------------------------------------------------------------------------------------------- ...
- SqlServer存储过程,学习
存储过程:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数) ...
- 【Servlet】1、Servlet监听器及相关接口
Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前.发生后可以做一些必要的处理. 接口: 目前Servlet2.4和JSP2.0总共有8个监听器接口和6个Event类,其中Ht ...
- 教你怎么调用Gitlab API
1.生成Personal Access Tokens 选择右上角用户信息setting—>Access Tokens 2.常用Gitlab API #获取所有的项目信息 #private_tok ...
- blfs(systemv版本)学习笔记-编译安装配置dhcpcd
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! dhcpcd项目地址:http://www.linuxfromscratch.org/blfs/view/8.3/basicne ...
- layui 数据表格+分页+搜索+checkbox+缓存选中项数据
在做数据表格的时候遇到了很多坑, 今天整理一下方便以后使用. 主要功能是使用数据表格, 做分页,做搜索, 还有checkbox, 支持全选. 当选中一些数据的时候, 数据切换页面数据在切换回来后, ...
- php获取数据库中数据
<?php header("Content-type:text/html;charset=utf-8");//字符编码设置 $servername = "local ...
- [VUE ERROR] Invalid prop: type check failed for prop "list". Expected Array, got Undefined
错误原因: 子组件 props -> list 要求接收的数据类型是 Array, 然而实际接收到的是 Undefined. 子组件代码: props: { list: { type: Arra ...
- UDP学习总结
1.UDP的优势是什么?有哪些典型的应用是使用UDP的?为什么? 2.