2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

一、实验内容

1、掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分)

2、掌握反汇编与十六进制编程器 (0.5分)

3、能正确修改机器指令改变程序执行流程(0.5分)

4、能正确构造payload进行bof攻击(0.5分)

二、实践目标

1、本次实践的对象是一个名为pwn1的linux可执行文件,如图:

2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解
2、该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串;
3、该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。

我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。

三、实验内容及步骤

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

通过修改main函数中的call指令跳转的地址,使其本来该跳转到foo函数时,跳转到getshell函数,从而运行getshell函数。

任务一:

1、输入指令objdump -d pwn1反汇编文件 pwn1,结果如图所示:

2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

分析结果中的main、foo、getShell函数,call 8048491 <foo>是汇编指令,将调用位于地址8048491处的foo函数;

其对应机器指令为e8 d7 ff ff ff,e8即跳转之意;

call指令调用函数对应的机器指令为:“e8”+“该函数相对于EIP值的偏移量”,让main函数调用getShell,修改“d7ffffff”为,

“getShell地址 - EIP(80484ba)”对应的补码就行(804847d - 80484ba),得到结果为c3 ff ff ff。

2、输入指令vi pwn1,文件以ASCII码的形式出现;

3、输入:%!xxd调用命令行,将文件转换为16进制,如图所示:

2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

4、输入/d7,查找要修改的内容:

2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

5、输入i转换为插入模式,d7修改为c3:

2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

6、输入:%!xxd -r,将文件转换为ASCII码形式,输入:wq保存并退出;

7、再次反汇编查看,

2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

8、再次运行修改后的pwn1文件,得到shell提示符:

2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

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

知识要求:堆栈结构,返回地址

学习目标:理解攻击缓冲区的结果,掌握返回地址的获取

实验步骤:

1、确认返回地址,输入指令objdump -d pwn1反汇编文件 pwn1,查看getshell()的内存地址

2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

2、gdb调试pwn1,输入r运行程序,这里遇到点问题:

2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

gdb报告信息:Detaching after fork from child process 4487(该问题尚未解决)。

任务三:注入Shellcode并执行

shellcode是一段机器指令,通常这段机器指令的目的是为获取一个交互式的shell,所以这段机器指令被称为shellcode。

实验步骤:

1、输入apt-get install execstack安装execstack,设置堆栈可执行:

execstack -s pwn3 //设置堆栈可执行
execstack -q pwn3 //查询文件的堆栈是否可执行;
2、more /proc/sys/kernel/randomize_va_space //查看随机化是否关闭
'echo "0" > /proc/sys/kernel/randomize_va_space //关闭随机化;
安装过程:

2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

3、构造要注入的payload;

4、在一个窗口运行(cat input_shellcode;cat);

5、在gdb里面attach 2396调试;

6、在ret指令的地址处设置断点,

2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

7、在另一个终端按下回车,这样程序就会执行之后在断点处停下来;

8、继续运行程序;

9、查看0xffffd34c地址后面16字节的内容:

2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

10、修改注入代码的覆盖地址,再次运行(cat input_shellcode;cat),则攻击成功!

四、实验过程中遇到的问题

1、安装execstack包时:

2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

解决方法是更新安装源即可。

2、任务一需要输入:wq保存退出时遇到如下问题:

2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

查阅资料后得知解决方法为输入:wq!即可。

五、实验感想

本次实验是网络对抗第一次实验,实验包含三个任务,虽然跟着步骤做并不难,但是内容较多,需要掌握的新的知识点较多。同时实验过程中我也遇到了许多复杂的问题,

但在查阅资料后也一一解决了。总的来说本次实验我完成任务的同时也收获了许多知识,为后续的学习打下良好的基础。

上一篇:CodeForces 675D Tree Construction


下一篇:20155208徐子涵 《网络对抗》Exp1 PC平台逆向破解