20145319 《网络对抗》逆向与Bof基础
20145319 逆向与Bof实验
1 实验内容
- 本次实验以可执行文件pwn1为例,将对pwn1进行反汇编的基础上进行功能上的解读,并进行缓冲区溢出攻击
- 可执行文件pwn1的正常流程是主函数调用foo函数完成字符串的录入和对录入字符串的重复输出,我们首先通过修改文件pwn1使其跳过foo函数转而执行getshell函数
- 利用其对于缓冲区溢出漏洞进行攻击,通过调整输入字符串来覆盖原有返回地址,使程序执行我们想要其执行的函数getshell
2 实验步骤
- 首先对于目标文件进行反汇编处理,输入命令
objdump -d mypwn | more可以看到结果如下 
- 忽略掉其中与功能无关的部分,将整个反汇编代码浏览一遍,我们可以发现这个代码主要分成三部分,主函数,以及两个
子函数foo和子函数getShell - 首先从主函数的汇编代码来看,这个函数的功能十分简单,其中
call 8048491就是调用函数foo,之后程序结束 
- 之后我们来看看
函数foo的汇编代码部分,该函数实现了字符串的录入功能,其中汇编代码sub $0x38,%esp就是为字符串所预留出的寄存器空间,但是在不对缓冲区进行保护的情况下,我们就可以通过录入过长的字符串,而覆盖掉本在堆栈中的返回地址,从而达到我们想要实现的目的,实现缓冲区溢出攻击 
- 之后开始修改可执行文件中的机器码,让其可以按照我们想要的结果来运行,首先我们可以将主函数中
call指令中的地址修改为getShell代码段地址,来看看getShell函数功能,用vim编辑器十六进制打开,并找到我们想修改的部分(详见所附操作指令) 
- 之后我们开始尝试进行缓冲区溢出攻击,来使程序达成同样的效果
- 输入一串长字符串,直到程序反馈寄存器错误


- 由反馈的结果来看eip中的地址已经变成了0x39393939即被四个9所覆盖,我们就需要调节我们所录入的字符串,并且观察到底是字符串中的哪几位覆盖住了返回地址即可

- 由上一步我们可以基本可以确定覆盖住返回地址的四位字符正是字符串中的3456四位
- 之后我们需要将字符串中的3456四位修改成getshell的内存地址0804847d,由上几步我们大致可以确定在计算机内部的字节顺序,注意修改字节顺序后我们只需将其新的字符串键入即可

- 因为键盘上无法直接键入
\x7d等十六进制数,因此我们先将其重定向至文件input中,之后通过管道将input文件中的内容作为输入来运行程序 
3 shellcode注入
- 我们可以通过写c语言程序或者直接写汇编程序两种方式来获得我们的shellcode,这里我们采用第二种方式
- 首先编写shellcode的汇编代码

- 之后通过反汇编得到其机器码组成,将其中的机器码摘出来就是我们需要使用的部分了

- 首先做好准备工作,为了防止此类攻击,如今的计算机操作系统已经增加了许多保护措施,例如保护堆栈,使堆栈不可执行,又例如每一次生成代码的堆栈地址随机,来使得我们无法通过多次尝试来搜寻准确的返回地址,所以我们在准备阶段我们将这些保护功能都关闭(如果
execstack显示command not found可以尝试apt-get install prelink) 
- 构造注入字符串一般有两种策略,一是
retaddr+nop+shellcode二是nop+shellcode+retaddr我们先把retaddr用数字5319来代替 
- 之后我们将文件执行挂在后台,打开另一个终端查看当前进程的进程号对其进行跟踪

- 使用断点调试,观察注入的shellcode的地址所在

- 观察可以看出shellcode的地址应该就是0xffffd330之后的一段区间,所以将返回地址修改成这段区间中的数值即可,修改后写入即可看到最后注入成功

4 其他
- vim相关
%!xxd将文件显示变为十六进制模式%!xxd -r将十六机制模式转回原格式- 在命令行模式下输入
/即为查找,例如搜寻我们想要找到的e8 d7段,只需输入/e8 d7
- 在命令行模式下输入
- 将文件转成十六进制模式下修改后要转回原格式才进行保存
- 其他
Perl是一门解释型语言,不需要预编译,可以在命令行上直接使用
20145319 《网络对抗》逆向与Bof基础的更多相关文章
- 网络对抗实验一 逆向及Bof基础实践
网络对抗实验一 逆向及Bof基础实践 一.实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. ...
- 20145203盖泽双 《网络对抗技术》实践1—— MAL_逆向与Bof基础
20145203盖泽双 <网络对抗技术> MAL_逆向与Bof基础 实践目标 (1)我们要通过修改程序代码,使得程序运行其自身中本不该运行的代码片段. (2)在这里,我们有一个名为2014 ...
- 20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础
20155201 李卓雯 <网络对抗技术>实验一 逆向及Bof基础 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,f ...
- 20145308 《网络对抗》 逆向及BOF基础实践 学习总结
20145308 <网络对抗> 逆向及BOF基础实践 学习总结 实践目的 通过两种方法,实现程序能够运行原本并不会被运行的代码 实践原理 利用foo函数的Bof漏洞,构造一个攻击输入字符串 ...
- 20145236《网络对抗》Exp1 逆向及Bof基础
20145236<网络对抗>Exp 1逆向及Bof基础 一.实践目标 运行原本不可访问的代码片段 强行修改程序执行流 以及注入运行任意代码. 二.基础知识及实践准备 理解EIP寄存器及其功 ...
- 20155305乔磊《网络对抗》逆向及Bof基础
20155305乔磊<网络对抗>逆向及Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何 ...
- 20155311高梓云《网络对抗》逆向及Bof基础
20155311高梓云<网络对抗>逆向及Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任 ...
- 20155334 曹翔 《网络对抗》逆向及Bof基础
20155334 曹翔 <网络对抗>逆向及Bof基础 实践目标: 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回 ...
- 20145215卢肖明《网络对抗》逆向及Bof基础
20145215卢肖明<网络对抗>逆向及Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任 ...
- 20145206邹京儒《网络对抗》逆向及Bof基础实践
20145206邹京儒<网络对抗>逆向及Bof基础实践 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:ma ...
随机推荐
- 【MySQL】查询时强制区分大小写的方法
MySQL默认的查询也不区分大小写.但作为用户信息,一旦用户名重复,又会浪费很多资源.再者,李逵.李鬼的多起来,侦辨起来很困难.要做到这一点,要么在建表时,明确大小写敏感(字段明确大小写敏感) sql ...
- 策略模式原理及Java代码实例
一.策略模式的定义 —— 定义了一组算法,将每个算法包装起来,并且使它们之间可以互换 —— 策略模式使这些算法在客户端调用它们的时候能够相互不影响的变化,改变不同算法的实现方式不影响客户端的使用,即策 ...
- CentOS配置bond
Bonding的模式一共有7种: #defineBOND_MODE_ROUNDROBIN 0 (balance-rr模式)网卡的负载均衡模式 #defineBOND_MODE_ACTI ...
- 【SharePoint 2010】将Sharepoint Server 2010部署到WINDOWS 7
1.部署-安装环境: 在这里先说明一下:2007的版本中我们只能装在WINDOWS 2003 SERVER 上,这种限制在2010被彻底打破了.我们可以将它安装在VISTA/WINDOWS 7/SER ...
- 【Android】Could not find XXX.apk!的解决方法
昨天在Eclipse中导入一个Android工程后点击运行时出现了Could not find XXX.apk!的错误信息,具体错误提示如下: 到网上搜了好多方法,挨个尝试,最后都没解决但是,重启 ...
- mybatis按姓名或手机号搜索
1.AND ((USER_NAME LIKE '%'||#{searchKey}||'%') OR (MOBILE_PHONE LIKE '%'||#{searchKey}||'%'))2. < ...
- windows下resin的配置部署与调试
配置 从Resin官网(http://www.caucho.com)下载Resin解压后,启动Resin,运行resin根目录下的resin.exe文件,运行期间将出现下图所示的命令提示符窗口. 表示 ...
- Centos6.8下搭建SVN服务器
1.Centos6.8下搭建SVN服务器 Subversion是一个自由,开源的版本控制系统.Subversion将文件存放在中心版本库里.这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一 ...
- Android - XML序列化
1.xml文件的序列化:采用XmlSerializer来实现XML文件的序列化.相比传统方式,更高效安全 MainActivity.java package com.example.test_buil ...
- jQuery --- 利用a标签的download属性下载文件!
最近遇到一个项目,需要有点击下载文件的功能. 由于文件格式是多种的,对于 rar / zip / rtf / doc / xlsx / jpg等. 点击下载有的是直接跳转到后进行下载,但有的是打开进行 ...