首页
社区
课程
招聘
5
[原创]來個CVE-2010-3951詳細版
发表于: 2013-8-12 03:17 4452

[原创]來個CVE-2010-3951詳細版

2013-8-12 03:17
4452

   這是一個很過時的漏洞,也比較經典,作為入門是一個不錯的例子。。

         根据最近崩溃点,回溯逐步跟踪,可以定位到存在问题的组件的组件为PD1SERV.DLL。
   同时可以看到其中一种漏洞函数的调用关系如下:sub_32993742 ----> sub_32986A4F ----> sub_32986015 ----> sub_329863F1(漏洞函数)
   下面从对PD1SERV.DLL解析文件结构进行分析(IDA Base Address = 0x32900000
        sub_32993742 ----> sub_32986A4F

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.text:32986A7F  call    [edx+VTABLE_PTR.Seek]       ; 定位文件当前读取的位置
.text:32986AD2  call    dword ptr [eax+0Ch]     ; 从当前位置起读取0x28 byte数据
   
.text:32986B43  mov     eax, [edi+1Ch]      ; 28 byte中最后一个dword为循环次数
.text:32986B46  mov     ecx, eax
.text:32986B48  dec     eax
.text:32986B49  test    ecx, ecx
.text:32986B4B  mov     [ebp+var_1C], eax
.text:32986B4E  jz      loc_32986C81
   
.text:32986B64  call    dword ptr [ecx+0Ch]     ; 读取接下来的20个字节
.text:32986BAE  call    dword ptr [eax+14h]     ; 文件操作指针返回到开始读取的位置
.text:32986BE9  call    dword ptr [ecx+14h]     ; 定位到下个开始读取的位置,20 bytes中最后一个dword为偏移
.text:32986C5C  call    sub_32986015                ; 调用sub_32986015进入下一步结构解析
   
.text:32986C73  mov     eax, [ebp+var_1C]       ; 循环次数不为0则重复20 bytes的操作
.text:32986C76  dec     [ebp+var_1C]
.text:32986C79  test    eax, eax
.text:32986C7B  jnz     loc_32986B54
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
   
   
.text:3298605B  call        dword ptr [edx+14h]         ; 定位文件当前读取的位置
.text:3298609E  call        dword ptr [eax+0Ch]         ; 读取接下来的8个字节
.text:32986112  mov     eax, [eax+18h]              ; 8 bytes中,后一个dword为循环次数
.text:32986115  mov     ecx, eax
.text:32986117  dec     eax
.text:32986118  test        ecx, ecx
.text:3298611A  mov     [ebp+pInterface], eax
.text:3298611D  jz      loc_3298624F
 
   ; 下面读取的8个bytes,后一个dword为下一次文件操作的偏移,前一个dword含义未知,看下面红色文字说明
.text:32986133  call        dword ptr [ecx+0Ch]     ; 读取接下来的8个字节
.text:32986178  lea     ebx, [eax+ecx]          ; 计算下一个操作的位置
.text:329861BC  call        dword ptr [ecx+14h]     ; 把文件指针移到下一个操作的位置
 
   ; 该函数判断该读取8个bytes中前一个dword是否空,如果为空的话,就调用漏洞函数进行下一步解析,否则的话就调用sub_32985476进行下一步解析,要触发漏洞,该值一定要为空
.text:329861EE  cmp     [ebp+var_38], ebx       ;
.text:329861F1  jz      loc_329862B8
   .。。。。。。。。。。。。
.text:32986215  call        sub_32985476                ; 不为空时调用该函数做下一步解析
   。。。。。。。。。。。。
.text:329862BC  call        ProblemFunction         ; 为空时调用漏洞函数做下一步解析
   
.text:32986243  mov     eax, [ebp+pInterface]       ; 循环次数不为0则重复8 bytes的操作
.text:32986246  dec     [ebp+pInterface]
.text:32986249  test        eax, eax
.text:3298624B  jnz     short loc_32986295

[注意]看雪招聘,专注安全领域的专业人才平台!

上传的附件:
收藏
免费 5
支持
分享
赞赏记录
参与人
雪币
留言
时间
心游尘世外
为你点赞~
2024-5-31 06:00
QinBeast
为你点赞~
2024-5-31 05:52
飘零丶
为你点赞~
2024-4-3 00:48
shinratensei
为你点赞~
2024-2-22 00:37
PLEBFE
为你点赞~
2023-3-7 00:29
最新回复 (2)
雪    币: 45
活跃值: (55)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
好资料,学习!
2013-8-12 09:12
0
雪    币: 219
活跃值: (878)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
3
不客气,拿走
2013-8-12 12:58
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册