首页
社区
课程
招聘
[原创]linux下的adobe漏洞分析
发表于: 2016-1-13 09:12 8933

[原创]linux下的adobe漏洞分析

2016-1-13 09:12
8933

CVE-2009-1492成因分析
linux下的cve漏洞分析,跟windows有什么区别呢?一样的!
1.溢出点

1.1函数原型:
extern char *strncat(char *dest,char *src,int n)
1.2参数说明:
src为源字符串,dest为目的字符串,n为指定的src中的前n个字符。
1.3漏洞成因:
dest值为-0x0000100C,所以只要dest字符串长度超过0x100c+4就会覆盖到函数的返回地址。虽然参数中有限定最多拼接字符串长度为0x1000,但是由于dest字符串已经有一定长度的字符串,所以再与src字符串拼接以后,dest字符串长度超过0x100c。
1.4调试过程:
在b*0x087b28ea下断点,可以观察其参数。(样本poc_rand.pdf)
第一次断下时,堆栈情况如下:(gdb使用peda插件)


第二次断下时,堆栈情况如下:

可以看到dest字符串已经为"/home/liu/.adobe/Acrobat/8.0/Dictionaries/",src字符串为”abcd....abcd”。
call    _strncat指令执行前ebp处的内存为:


call    _strncat指令执行后ebp处的内存为:

可以看到返回地址被覆盖为0x62616463.
Dest字符串为:

可以看到已经拼接完成。
在函数返回时下断点:b*0x087b2967



可以看到,此时返回地址已经被篡改。下一步就会跳转到0x62616463去运行。

2.Utf-8编码问题
在拼接之前,会对传入的字符串进行utf-8编码转换。
使用样本poc_rand_90.pdf,也是在b*0x087b28ea下断点,观察结果如下:

可以看到%u9090经过utf-8编码转换为0xe9 0x82 0x90。
具体实现,可以看下面这个函数。


3.堆喷射问题
使用韩哥给的样本,发现没有堆喷射。
gdb-peda$ find "\x2b\xc9\x83\xe9" 0x80022000 0x8122e000
Searching for '+\xc9\x83\xe9' in range: 0x80022000 - 0x8122e000
Found 2 results, display max 2 items:
[heap] : 0x81055460 --> 0xe983c92b
[heap] : 0x810f3a60 --> 0xe983c92b

后来我将样本做如下修改:

即在每个块头加上一个不同的索引。发现,堆喷射成功。
查找命令为find "\x2b\xc9\x83\xe9" heap(为shellcode的头四个字节)

可以看到黄色框,框出区域比较规律,相差0x10000.
4.下一步工作:
已经可以控制栈,堆也可以稳定喷射。
那么下一步工作,就是将返回地址改写为堆内shellcode的地址即可。
注意的问题就是要先将地址从utf-8转换为unicode。

5.控制eip跳转至shellcode(poc为poc_rand_8181e081.pdf)
返回地址,选定0x81c281c2。可以从该位置的nop指令滑入shellcode。

但是不能够直接用0x81c281c2,需要将其转换为unicode编码。转换格式如下:



在call _strncat指令后下断点,b*0x087b28ef,观察覆盖后的栈情况。可以看到返回地址已经被覆盖为了0x81c281c2,因此可以跳转至shellcode处运行。


具体的unicode与utf-8的编码转换如下:

6.在ubuntu9.04下测试(没有nx保护)
6.1测试前先关闭aslr,关闭方法:
Add a file /etc/sysctl.d/01-disable-aslr.conf containing:
kernel.randomize_va_space = 0
然后重启。
查看是否关闭:
cat /proc/sys/kernel/randomize_va_space
若为0则关闭成功。
6.2 dump出堆内存,查看堆喷射结果。(poc为poc_rand_b9c2b9c2.pdf)
下断点b*0x087b28ea
第二次断下后,先查看进程内存空间:

cat /proc/15879/maps
其中进程pid可以通过以下命令获得:
ps aux|grep acroread
获得heap的起始地址为:
b8002000-bffb7000 rw-p b8002000 00:00 0          [heap]
然后dump出堆内存:
dump binary memory heap.txt 0xb8002000 0xbffb7000
然后用010editor打开heap.txt
查找shellcode:

可以看到堆喷射结果。
6.3 utf-8编码,将返回地址覆盖,劫持控制流。
选定的堆地址为0xb9c2b9c2.
将其utf-8编码:

编码为¹
6.4 调试截图
在ret处下断点:b *0x087B2967

可以看到返回地址已经被覆盖。


可以看到单步调试,没有问题。没有nx保护。

Adobe下载地址.txt
poc_rand.pdf
poc_rand_90.pdf
poc_rand_8181e081.pdf
poc_rand_b9c2b9c2.pdf
分析报告.doc


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 3
支持
分享
最新回复 (14)
雪    币: 1552
活跃值: (1288)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
2
看雪排版很累,请大家看doc文档
2016-1-13 09:36
0
雪    币: 135
活跃值: (63)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
学习,感谢分享,lz去年的0322分析的不错,记得看过。
2016-1-13 11:48
0
雪    币: 243
活跃值: (247)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不错的文章。。
2016-1-13 15:24
0
雪    币: 3094
活跃值: (309)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
5
mark 感谢分享
2016-1-14 15:36
0
雪    币: 3171
活跃值: (76)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
7
linux这类的利用分析文章少见,研究的人也相对较少,楼主分析的很详细,谢谢
2016-1-18 14:21
0
雪    币: 43
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
赞那个Doc文档
2016-1-18 17:57
0
雪    币: 1552
活跃值: (1288)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
9
谢谢版主~
2016-1-24 16:01
0
雪    币: 292
活跃值: (810)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
最近正好从windows二进制分析转向linux二进制分析,10086个赞!但是有一个疑问,在关闭aslr的情况下,可以把shellcode拼接在返回地址后面,然后用jmp esp直接跳到shellcode执行吗?还是说必须使用heap spray

或者说,是不是Dest+src的长度实际上还是有限制,只是达到了覆盖返回地址的长度,后面不足够覆盖shellcode了,那这样的话,在关闭aslr的情况下把shellcode放在中间,再利用返回地址回跳到中间是不是也能利用呢?
构造成这样的payload: Dest+shellcode+src+fake ret
2016-1-25 10:21
0
雪    币: 1552
活跃值: (1288)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
11
有utf编码问题,你如果能够找到合适也行
2016-1-25 14:37
0
雪    币: 292
活跃值: (810)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
明白了,感谢!这个还得自己跟着调试一下,才能有更好的结果,谢谢大牛!
2016-1-25 15:19
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
13
如果你真要调试的话,下载这个版本。
安装命令: dpkg -i AdbeRdr9.1.0-1_i386linux_enu.deb
调试这个插件 /opt/Adobe/Reader8/Reader/intellinux/plug_ins/Spelling.api
它会调用/opt/Adobe/Reader9/Reader/intellinux/bin/acroread里面的问题函数,也就是楼主给出的溢出点函数。至于怎么通过poc快速定位溢出点,那就看你水平了:)
2016-2-22 16:00
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
写的挺好的,可以考虑将你的技术帖子,放到我们平台不?我们是合天网安实验室,很多大学生在我们平台学习,可以看下链接http://www.hetianlab.com/Experiment-Description.html。期待你的投稿
2016-2-23 15:40
0
雪    币: 2270
活跃值: (5537)
能力值: ( LV8,RANK:146 )
在线值:
发帖
回帖
粉丝
15
这个很稳
2018-1-23 19:49
0
游客
登录 | 注册 方可回帖
返回
//