20155328 《网络攻防》 实验一:PC平台逆向破解(5)M
20155328 《网络攻防》 实验一:PC平台逆向破解(5)M
实践目标
实践对象:linux可执行文件pwn1.
正常执行时,main调用foo函数,foo函数会简单回显任何用户输入的字符串。
实践运行代码片段getShell,学习如何注入运行任何Shellcode。
实践内容:
1.手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
2.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
3.注入一个自己制作的shellcode并运行这段shellcode。
这几种思路基本上代表了现实情况中的攻击目标:
运行原本不可访问的代码片段
强行修改程序执行流
注入运行任意代码
一些汇编指令
NOP:空指令,执行后不产生任何结果,但会占用一个指令的时间。机器码:90.
JNE:条件转移指令,当ZF=0,转至标号处执行。机器码:75.
JE:条件转移指令,当ZF=1,转至标号处执行。机器码:74.
JMP:无条件跳转指令,可跳转到内存中任何程序段。机器码:EA.
CMP:比较指令,两数相减以比较大小,而并不保存比较结果。机器码:39.
实验一:直接修改程序机器指令,改变程序执行流程
下载并解压pwn1,使用命令objdump -d对其进行反汇编:

可看到三个框中的地址。main中使用call调用到foo,我们的目标就是要将调用的函数换成getShell,计算foo和getShell的地址差值可得,要将红色框中的d7修改为c3.
使用vi编辑pwn1文件,用:%! xxd将文件转换为16进制查看。用/d7ff搜索,找到了需要修改的地方。

修改后使用:%! xxd -r把文件转回二进制,用:wq保存并退出。可以查看main中调用函数部分已经由调用foo变成了调用getShell.

接下来运行下新的文件5328pwn1,可以看到已经变成了getShell中的功能。

实验二:通过构造输入参数造成BOF攻击,改变程序执行流
要先确认是哪几个字节覆盖了返回地址,于是在调试中运行,输入如下:

用info r查看各寄存器的值,可以看到eip的值被“1234”部分覆盖了:

由此,只要把这四个字符替换为getShell的地址即可。反汇编可看到getShell的内存地址是0804847d。

实验三:注入Shellcode并执行
输入apt-get install execstack下载软件包。

输入以下命令修改设置。(下图是我自己手抖在5328和pwn3之间打了个空格...)

输入命令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) | ./5328pwn3.
打开一个新终端,找到进程号4120.

在此终端下使用gdb对5328pwn3进行调试,通过设置断点,来查看注入buf的内存地址。


修改地址后再次攻击,就成功了。

实验后的问题回答
- 实验收获与感想
这次实验分别用三种方法循序渐进地对可执行文件进行了攻击,修改了程序的执行轨迹。实验过程犯了一些错误,比如用apt-get install execstack下载软件包的时候提示无法定位软件包,问了几个人说没碰到这问题...心里一惊赶紧去百度找各种方案,最后发现是软件源配置的问题,就去增添配置了一个中科大的kali软件源,更新了下就好了。还有一些比较蠢的错误就按下不提了。
总之第一次实验学到的东西还是挺多的,做完的时候也蛮有成就感(?)。虽然只是个入门级的小实验吧。希望自己可以以后好好加油,不当废柴。
- 什么是漏洞?漏洞有什么危害?
编写程序时的疏忽或者是编程语言的局限性,都会带来漏洞。漏洞很可能会被恶意利用,来挂马、传播恶意软件等。
20155328 《网络攻防》 实验一:PC平台逆向破解(5)M的更多相关文章
- 20155308《网络攻防》 Exp1 PC平台逆向破解(5)M
20155308<网络攻防> Exp1 PC平台逆向破解(5)M 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是 ...
- 20155306 白皎 《网络攻防》Exp1 PC平台逆向破解——逆向与Bof基础
20155306 白皎 <网络攻防>Exp1 PC平台逆向破解--逆向与Bof基础 实践相关说明 1.1 实践目标 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. ...
- 20155226 《网络攻防》 Exp1 PC平台逆向破解(5)M
20155226 <网络攻防> Exp1 PC平台逆向破解(5)M 实践目标 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串 该程序同时包含另一个代 ...
- 20155321 《网络攻防》 Exp1 PC平台逆向破解(5)M
20155321 <网络攻防> Exp1 PC平台逆向破解(5)M 实践目标 本次实践的对象是linux的可执行文件 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何 ...
- 20155330 《网络攻防》Exp1 PC平台逆向破解(5)M
20155330 <网络攻防>Exp1 PC平台逆向破解(5)M 实践目标 运行pwn1可执行文件中的getshell函数,学习如何注入运行任何Shellcode 本次实践的对象是一个名为 ...
- 20155213 《网络攻防》 Exp1 PC平台逆向破解
20155213 <网络攻防> Exp1 PC平台逆向破解(5)M 实践内容 通过对实践对象--pwn20155213的linux可执行文件的修改或输入,完成以下三块: 手工修改可执行文件 ...
- 20155220 吴思其 《网络攻防》 Exp1 PC平台逆向破解(5)M
20155220 <网络攻防> Exp1 PC平台逆向破解(5)M 实践内容 通过对实践对象--20155220pwn1的linux可执行文件的修改或输入,完成以下三块: 手工修改可执行文 ...
- 20155309南皓芯 网络对抗《网络攻防》 Exp1 PC平台逆向破解(5)M
实践目标 本次实践的对象是linux的可执行文件 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可 ...
- 20155323刘威良 网络对抗《网络攻防》 Exp1 PC平台逆向破解(5)M
实践目标 本次实践的对象是linux的可执行文件 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可 ...
- 2017-2018-2 20155225《网络对抗技术》实验一 PC平台逆向破解
2017-2018-2 20155225<网络对抗技术>实验一 PC平台逆向破解 1.直接修改程序机器指令,改变程序执行流程 理清思路: 我们的目标文件是一个linux可执行文件,格式为E ...
随机推荐
- Flutter dart:convert
引用 mport 'dart:convert'; JSON 解码(JSON String->Object) // NOTE: Be sure to use double quotes (&quo ...
- Expo大作战(十二)--expo中的自定义样式Custom font,以及expo中的路由Route&Navigation
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- Java 如何启用 ARM 虚拟机诊断
现象描述 如何通过 Java 语言实现在创建 ARM 虚拟机时开启诊断,并配置相关指标. 实现思路 调研最高版本的 JAVA SDK(1.1.0)源码发现,SDK 层面并未提供任启动诊断和配置诊断 ...
- Oracle 单实例 Relink Binary Options 说明
一.引入问题 帮朋友在CentOS上安装一个10g的Oracle,结果朋友的CentOS版本是6.2的版本,最新的一个版本,不过Linux上基本都差不多,所以按照以前的步骤,迅速的操作起来,结果遇到N ...
- 一起学习Boost标准库--Boost.StringAlgorithms库
概述 在未使用Boost库时,使用STL的std::string处理一些字符串时,总是不顺手,特别是当用了C#/Python等语言后trim/split总要封装一个方法来处理.如果没有形成自己的com ...
- spring mvc 接收 put参数
web.xml中: <!-- 用户put提交参数 --> <filter> <filter-name>HttpMethodFilter</filter-nam ...
- iOS资源大全中文版
我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-ios 就是 vsouza 发起维护的 iOS 资源列表,内容包括:框架.组件.测试.App ...
- Java的数组堆溢出问题
在写测试方法的时候,生成了一个数组,之后报了堆溢出错误,这样的报错一般来说只要有一些JVM的基础都知道要用-Xmx.-Xms来开更大的堆,接下来看看我碰到的一个堆溢出的问题 在测试代码中开了一个500 ...
- spark的shuffle和原理分析
概述 Shuffle就是对数据进行重组,由于分布式计算的特性和要求,在实现细节上更加繁琐和复杂. 在MapReduce框架,Shuffle是连接Map和Reduce之间的桥梁,Map阶段 ...
- 小程序报错数据传输长度为 xxx 已经超过最大长度 xxx
这个错误通常在通过base64给images赋值时发生,setData()微信设置的一次最大传输长度为1M,所有如果编码后的base64字符串长度超过了1M就会报这个错误. 如何解决? 我们可以采取曲 ...