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 ...
随机推荐
- HDFS 2.7.4中hdfs-site.xml参数未配置引发的一些异常
生产上部署了HDFS 2.7.4,最近遇到了一些异常,记录下来备忘: 一.dfs.datanode.directoryscan.throttle.limit.ms.per.sec DataNode运行 ...
- JavaScript数组转字符串,字符串转数组
//--------------------数组转字符串--------------------------- //需要将数组元素用某个字符连接成字符串 var a1, b1,c1; a1 = [&q ...
- Android系统常用的adb命令
自己工作中经常要用一些Android的adb命令,把常用的adb命令记录一下,留作备忘. adb devices 查看当前连接的设备 adb install 安装 adb install拖动apk到命 ...
- 常用内置方法之:__str__,__repr__
class Test(object): def __init__(self): pass def __str__(self): return "test" test = Test( ...
- wordpress使用七牛云加速
一.准备工作. wordpress搭建的网站 七牛云账号 二.简要步骤 1.wordpress安装七牛云插件. WordPress七牛镜像存储插件已经被WordPress官方收录,可以直接在wordp ...
- 使用python快速搭建本地网站
如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS,Nodejs等.那么, Python 可能帮助你.使用Python可以完成一个简 ...
- 通过递增快照备份 Azure 非托管 VM 磁盘
概述 Azure 存储提供创建 Blob 快照的功能. 快照将捕获该时间点的 Blob 状态. 本文介绍有关如何使用快照维护虚拟机磁盘备份的方案. 如果选择不使用 Azure 备份和恢复服务,但想要为 ...
- How to add hyperlink in JLabel
You can do this using a JLabel, but an alternative would be to style a JButton. That way, you don't ...
- 阿里云朱照远: AI打开新视界 8K时代已来!
2018年4月11-12日,2018亚太CDN峰会在北京隆重召开,大会由亚太CDN领袖论坛.电视云论坛.短视频论坛.视频云论坛.新技术论坛.运营商论坛.国际云论坛等7大部分组成.在亚太CDN领袖峰会上 ...
- sql点滴45—mysql中group_concat用法
group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果.比较抽象,难以理解. 通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组, ...