20145214《网络攻防》逆向及Bof基础实践
20145214《网络攻防》逆向及Bof基础实践
实践说明
- 本次实践的对象是一个名为pwn1的linux可执行文件。
- 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。
- 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。
- 方法一手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
- 方法二利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
基础知识
- NOP指令即“空指令”,在执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令
- JNE是条件转移指令,如果不相等则跳转
- JE是条件转移指令,如果相等则跳转
- JMP是无条件转移指令,包含段内直接短转Jmp short、段内直接近转移Jmp near、段内间接转移Jmp word、段间直接转移Jmp far
- CMP是比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果
直接修改程序机器指令,改变程序执行流程
- 将目标文件反汇编后,我们知道要让程序执行getShell,要通过将call指令的目标地址由
d7ffffff变为c3ffffff vi进入文件可看到如下“乱码”

输入
:%!xxd切换为16进制显示模式,找到需要修改的内容,进行修改如下

- 输入
:%!xxd -r转换为原格式,输入:wq保存并退出 运行下改后的代码,会得到shell提示符


之后可用
exit退出
通过构造输入参数,造成BOF攻击,改变程序执行流
1、反汇编,了解程序的基本功能
- 用
objdump -d 20145214pwn | more语句来实现反汇编,管道|的作用是将前半段的输出作为后半段的输入,从而输出出来。 - 通过反汇编,我们发现foo函数有Buffer overflow漏洞
2、确认输入字符串哪几个字符会覆盖到返回地址
构造数据填充缓冲区直到覆盖ebp和返回地址的数据。第一次构造时字符串长度不够,看图中ebp覆盖了两个字节的数据35(5的ascii码),eip没有变化

第二次构造数据时增加长度,使得eip值改变为:0x363636(6的ascii)码

输入数据
111111222222333333444444555555123456确定返回地址被覆盖的位置

可以发现时“3456”覆盖了新的eip,所以我们要将getShell的内存地址替换这4个字符,以达到将程序定向到grtShell函数的目的
3、构造输入字符串
- getShell的内存地址,在未启用ALSR的主机上是固定不变的,通过反汇编时可以看到,即0804847d。确认需要输入的是
11111122222233333344444455555512\x7d\x84\x04\x08 - 构造字符串,
perl -e 'print "11111122222233333344444455555512\x7d\x84\x04\x08\x0a"' > input,使用输出重定向“>”将perl生成的字符串存储到文件input中,\x0a表示回车 可以使用16进制查看指令xxd查看input文件的内容是否如预期

将input的输入,通过管道符“|”,作为20145214pwn的输入。获取shell后输入
ls指令结果如下

20145214《网络攻防》逆向及Bof基础实践的更多相关文章
- 20155235 《网络攻防》 实验一 逆向及Bof基础实践说明
20155235 <网络攻防> 实验一 逆向及Bof基础实践说明 实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...
- 网络对抗实验一 逆向及Bof基础实践
网络对抗实验一 逆向及Bof基础实践 一.实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. ...
- 20145308 《网络对抗》 逆向及BOF基础实践 学习总结
20145308 <网络对抗> 逆向及BOF基础实践 学习总结 实践目的 通过两种方法,实现程序能够运行原本并不会被运行的代码 实践原理 利用foo函数的Bof漏洞,构造一个攻击输入字符串 ...
- 2017-2018-2 20155229《网络对抗技术》Exp1:逆向及Bof基础实践
逆向及Bof基础实践 实践基础知识 管道命令: 能够将一个命令的执行结果经过筛选,只保留需要的信息. cut:选取指定列. 按指定字符分隔:只显示第n 列的数据 cut -d '分隔符' -f n 选 ...
- 20145206邹京儒《网络对抗》逆向及Bof基础实践
20145206邹京儒<网络对抗>逆向及Bof基础实践 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:ma ...
- 20145216《网络对抗》逆向及BOF基础实践
20145216<网络对抗>逆向及BOF基础实践 1 逆向及Bof基础实践说明 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函 ...
- 20145327 《网络对抗》逆向及BOF基础实践
20145327 <网络对抗>逆向及BOF基础实践 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任 ...
- 20145204《网络对抗》逆向及bof基础实践
20145204<网络对抗>逆向及bof基础实践 实践目的说明 实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何 ...
- 20145208蔡野 《网络对抗》逆向及BOF基础实践
20145208蔡野 <网络对抗>逆向及BOF基础实践 逆向及Bof基础实践 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函 ...
随机推荐
- pH计
pH计 测量原理 pH计主要用于测量液体中的氢离子浓度.准确地说是测量氢离子活性,得出酸性.中性还是碱性的数值,在自来水.河水.饮料.食品.污水.医疗和化工等领域广泛地使用工业用液体分析仪. pH计原 ...
- delphi7 TRichView 安装
下载: 链接: https://pan.baidu.com/s/1gfMYeGF 密码: 45bn 打开目录:E:\Delphi7\TRichView.v.16.10.3 ScaleRichView. ...
- 三星S5-PV210内存初始化
一.S5PV210时钟系统 时钟:一定频率的电信号. 时钟系统:基于CMOS工艺的高性能处理器时钟系统,集成PLL可以从内部触发,比从外部触发更快且更准确,能有效地避免一些与信号完整性相关的问题. ...
- 2017-2018-2 《网络对抗技术》 20155322 Exp3 免杀原理与实践
#2017-2018-2 <网络对抗技术> 20155322 Exp3 免杀原理与实践 [-= 博客目录 =-] 1-实践目标 1.1-实践介绍 1.2-实践内容 1.3-实践要求 2-实 ...
- 创建表空间时ora-01119和ora-27040的处理
创建时出错: SQL> create tablespace gaotbs logging datafile '/u01/app/datafiles/gaodata1.dbf' ...
- 23-[模块]-subprocess模块
1.调用系统命令 我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的 ...
- 9 ORM-高阶补充(未完成)
https://www.cnblogs.com/alice-bj/p/9195846.html#_labelTop https://www.cnblogs.com/yuanchenqi/article ...
- AGC 030 B - Tree Burning
B - Tree Burning 链接 题意: 一个长度为L的环,有n个位置上有树,从0出发,每次选择一个方向(顺时针或者逆时针),一直走,直到走到一棵树的位置,烧掉这棵树,重复这个过程,直到没有树. ...
- 关于Myeclipse的MyEclipse:Java was started but returned exit code=-1 错误
我们在安装MyEclipse后有时会遇到这样一个问题,可以进入主界面软件也属于激活状态,但是过一会会报错, 并弹出MyEclipse:Java was started but returned exi ...
- C# 连接MongoDB,含用户验证
配置文件中链接地址:mongodb://test:123456@192.168.168.186:9999/temp 读取配置文件: /// <summary> /// 构造函数 /// & ...