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实际是一段代码, ...
随机推荐
- easyui的datagrid为何无法显示json数据
因为easyui的datagrid要求数据JSON必须是如下格式:{"total":0,"rows":[]}其中total表示总的数据行数,rows是当前页的数 ...
- www.jqhtml.com 前端框架特效
www.jqhtml.com * 请选择课程 初级班 (PS.HTML.CSS.静态网站项目实战) 中级班 JavaScript基础.JavaScript DOM.jQuery.JS进阶.HTML5和 ...
- MEF 插件式开发之 小试牛刀
MEF 简介 Managed Extensibility Framework 即 MEF 是用于创建轻量.可扩展应用程序的库. 它让应用程序开发人员得以发现和使用扩展且无需配置. 它还让扩展开发人员得 ...
- Spring基于纯注解方式的使用
经过上篇xml与注解混合方式,对注解有了简单额了解,上篇的配置方式极大地简化了xml中配置,但仍有部分配置在xml中进行,接下来我们就通过注解的方式将xml中的配置用注解的方式实现,并最终去掉xml配 ...
- canvas-2lineCap.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue项目导入外部css样式和js文件
<template> <div id="app" > </div> </template> <script src=" ...
- JS校验身份证号的合法性
前端表单中有身份证号的校验,下边是用JS来校验身份证号的合法性. 中国居民身份证号码编码规则 第一.二位表示省(自治区.直辖市.特别行政区). 第三.四位表示市(地级市.自治州.盟及国家直辖市所属市辖 ...
- java源文件与类
一个源文件可以包含多个类, 编译的时候,每一个类生成一个字符码文件, 源文件名可以和类名不一致,但字符码文件与类名一致, 如果类是public(公共类),源文件名必须与类名一致 命名规则:源文件的路径 ...
- html中用href 实现点击链接弹出文件下载对话框
浏览器支持能够打开的格式,他都会默认直接在线打开(比如word或图片),不支持的格式,他就会弹出下载提示.最好是做成.rar格式.xlsx的文件.浏览器自带下载功能. <body> < ...
- http请求之get和post的区别
前言:大家现在度娘一下,查得最多的区别,可能就是: “Get把参数写在URL中,Post通过请求体来传参的” “GET没有POST安全,因为Get参数直接显示在URL上” “Get请求在URL中传送的 ...