20145321《网络对抗技术》逆向与Bof基础
2017-03-05 22:29
232 查看
20145321《网络对抗技术》逆向与Bof基础
实践目标
本次实践的对象是一个名为pwn1的linux可执行文件。该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。
该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。
学习以下两种方法,运行正常情况下不会被运行的代码:
手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
实践过程
直接修改程序机器指令,改变程序执行流程
1.对原文件进行备份:cp pwn1 20145321pwn1
2.用objdump -d 20145321pwn1 | more进行反汇编。
3."call 8048491 "是汇编指令,是说这条指令将调用位于地址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"对应的补码就行。用Windows计算器,直接 47d-4ba就能得到补码,是c3ffffff。
4.
vi 20145321pwn1打开文件,在vi中用
:%!xxd将模式切换为16进制模式。
5.查找要修改的内容:/e8 d7。
6.将参与返回地址计算的
d7改为
c3 。
7.转换16进制为原格式
:!xxd -r。
8.保存后退出
:wq。
9.反汇编查看修改是否成功,运行验证。
通过构造输入参数,造成BOF攻击,改变程序执行流
1.用gdb进行调试,直到出现溢出错误,查看溢出后覆盖%eip的值。2.构造输入的字符串,使覆盖%eip的值为getShell函数的地址。
3.运行验证。
相关文章推荐
- 20145337《网络对抗技术》逆向及BOF基础
- 20145234黄斐《网络对抗技术》实验一,逆向及Bof基础实践
- 20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础
- 20145314郑凯杰《网络对抗技术》实验1 逆向及Bof基础实践
- 20145219《网络对抗技术》PC平台逆向破解之逆向与Bof基础
- 20145335郝昊《网络对抗》逆向及Bof基础实践
- 20145206邹京儒《网络对抗》逆向及Bof基础实践
- 20145306 逆向与Bof基础
- 20145212罗天晨 逆向及Bof基础实践
- 20145210姚思羽《网络对抗技术》逆向及Bof基础实践
- 20145334赵文豪《网络对抗》-逆向及Bof基础实践
- 20145304 网络对抗技术 逆向与Bof基础
- 逆向及BOF基础实践
- 20145328 《网络对抗技术》逆向及Bof基础实践
- 20145302张薇 《网络对抗技术》逆向及BOF基础实践
- 逆向及Bof基础实践
- 20145308 《网络对抗》 逆向及BOF基础实践 学习总结
- 20145320《网络对抗》逆向及Bof基础实践
- 20145217《信网络对抗》逆向与BOF基础实践
- 20145214《网络攻防》逆向及Bof基础实践