您的位置:首页 > 其它

20155312张竞予 Exp1 PC平台逆向破解(5)M

2018-03-11 23:11 274 查看

Exp1 PC平台逆向破解(5)M

目录

实验内容

手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。

利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。

注入一个自己制作的shellcode并运行这段shellcode。

实验步骤及结果

问题及解决方案

参考资料

实验内容

实验知识概要

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

通过反汇编指令
objdump -d 20155312zjy
查看可执行文件20155312zjy的反汇编代码和对应的机器码,如下图所示:



我们不难发现:

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

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

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

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

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

想要了解其他指令的机器码,可以参考汇编指令和机器码的对应表

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

反汇编指令是“objdump -d objfile” ,其中
-d
参数是

从objfile中反汇编那些特定指令机器码的section,和它类似的还有
-D
参数,但它反汇编所有section。

如果我们想要以全屏幕的方式按页显示反汇编的内容,可以利用“管道”,即在反汇编指令后添加
| more
,这样我们就可以利用more的一些快捷键,如:Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)

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

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

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

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

返回目录

实验步骤及结果

一、手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数

用反汇编指令
objdump -d 20155312zjy
指令查看可执行文件20155312zjy(pwn1的副本)的反汇编结果;

锁定需要改的目标代码
80484b5:   e8 d7 ff ff ff          call   8048491 <foo>


对比getShell函数的地址
0804847d
和foo函数的地址
08048491
,可以发现两地址之差为十六进制“14”;

分析call汇编指令的机器码,可以锁定e8这个字节为代码部分,代表call这个指令,后面的“d7 ff ff ff”这四个字节为数值部分,代表指令跳转时需要与“eip”寄存器相加的偏移量;

由于数值存储方式为小端方式,所以锁定需要改的字节为“d7”,将它与地址差“14”做减法运算后的值为“c3”;

用vim编辑器打开20155312zjy文件
vi 20155312


将该文件转换为十六进制显示
:%!xxd


/e8d7
查找需要修改的内容;

修改d7为c3;

转换16进制为原格式:
:%!xxd -r


保存并退出;

反汇编看一下,发现call指令正确调用getShell;

运行zjy20155312,截图如下:



返回目录

二、利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数

实验步骤如下:

分析代码,发现foo函数存在Buffer overflow漏洞

返回目录

三、注入一个自己制作的shellcode并运行这段shellcode

返回目录

问题及解决方案

问题1:
./pwn1
执行pwn1会出现[ bash: ./pwn1:没有那个文件或目录]的提示,但是ls命令又能看到存在pwn1文件。

解决:参考教程64位Kali无法顺利执行pwn1问题的解决方案,总结过程如下:

①修改更新源sources.list

添加下列更新源到
/etc/apt/sources.list
文件

```

#阿里云kali源

deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib

deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib

deb http://mirrors.aliyun.com/kali-security kali-rolling/updates main contrib non-free

deb-src http://mirrors.aliyun.com/kali-security kali-rolling/updates main contrib non-free

#中科大kali源

deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib

deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib

deb http://mirrors.ustc.edu.cn/kali-security kali-current/updates main contrib non-free

deb-src http://mirrors.ustc.edu.cn/kali-security kali-current/updates main contrib non-free

```

对软件进行一次整体更新

apt-get clean
apt-get update
apt-get upgrade

②安装32位运行库

apt-get install lib32ncurses5


运行后会等待一会会出现如下提示界面,这时按一下回车就好了:



问题2:在解决问题1时,运行
apt-get upgrade
时提示“有未能满足的依赖关系”

解决:按照系统提示,运行
apt --fix-broken install
即可,如下图所示,待执行完毕进行后续操作即可。



返回目录

参考资料

64位Kali无法顺利执行pwn1问题的解决方案

汇编指令和机器码的对应表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: