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

本次实验分为三个模块:

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

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

(三)注入Shellcode并执行;

实验准备阶段:

1.将老师提供的pwn1文件通过共享文件夹传到kali上以便以后使用。

2.将pwn1文件复制到主目录下,并进行备份。

有关知识内容

1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码

NOP汇编指令的机器码是“90”

JNE汇编指令的机器码是“75”

JE 汇编指令的机器码是“74”

JMP汇编指令的机器码是“eb”

CMP汇编指令的机器码是“39”

扫描二维码关注公众号,回复: 5554679 查看本文章

2.掌握反汇编与十六进制编程器

反汇编指令:objdump -dobjfile,关于其他用法可参考Linux下C程序的反汇编

关于管道,输入、输出重定向参考linux下输入输出重定向和管道符

十六进制编程器:用来以16进制视图进行文本编辑的编辑工具软件,其实我们只需要用各系统都兼容的vim编辑器就可以实现十六进制编辑的功能。具体步骤如下:

  • 输入命令vi 20165330zyx查看可执行文件内容,发现大部分是我们没法理解的乱码;

  • 按esc后在底行输入:%!xxd将显示模式切换为16进制模式;

  • 进行相关操作后,输入:%!xxd -r转换16进制为原格式。

3.能正确修改机器指令改变程序执行流程

详见任务一

4.能正确构造payload进行bof攻击

详见任务二

任务一 (直接修改程序机器指令,改变程序执行流程)

当你拿到这个文件以后,放在你的虚拟机里面,你会发现他可能不是可执行文件(没有高亮):
(图一)
image.png
解决办法:chmod +x pwn1即可,执行之后文件变成高亮:
(图二)
image.png
第一个任务实际上就是:在main函数对子函数foo调用的时候,修改call指令跳转的地址,使其跳转到子函数shellcode处进行执行,从而达到获取shell的目的。

首先:objdump -d pwn1,反汇编pwn1文件。
image.png

反汇编结束后你发现:main函数里面有一步call 804891 ,机器码指令为e8 d7 ff ff ff(call的机器码就是e8,后面是地址)。

进一步分析:08048491是,0804847d是我们的跳转目标。

0x08048491 - 0x0804847d = 0x00000014 //计算地址差
0xffffffd7 - 0x00000014 = 0xffffffc3 //计算要篡改的目标地址
(小端机器)

接着使用命令vi pwn1修改文件。

进入之后是乱码,使用:%!xxd转换为16进制显示。
image.png

使用/d7命令寻找e8d7ffffff机器指令所在地。

找到以后按i进入插入模式,修改d7为c3。
image.png
然后使用:%!xxd -r换回乱码的样子(不换回去会出问题),再用:wq保存即可。

这时如果再次objdump -d pwn1你能看到pwn1文件已经改了:
image.png
执行./pwn1文件可以成功获取shell:
image.png
至此第一个实验成功。

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

猜你喜欢

转载自www.cnblogs.com/yequan1/p/10544796.html