首页
社区
课程
招聘
[原创]360网盾 广告拦截模块崩溃分析
发表于: 2012-12-10 18:41 8915

[原创]360网盾 广告拦截模块崩溃分析

2012-12-10 18:41
8915

360网盾 广告拦截模块崩溃分析
声明:此Bug不是本人发现的,所做的工作是对Bug成因进行分析,分析的过程中自己学到了很多东西,
在此感谢提供此Bug的坛友:xuecniao,是你让我有了这次锻炼的机会。
分析过程是逆向分析的,希望能和大家多多交流。其中有错误之处欢迎指正。
1.分析环境:
Windwos XP SP3_CN(虚拟机)
360安全卫士8.7.2002(最新版)
备用木马库版本:2012.11.3.1

工具:
IDA 5.5
Windbg
OD

2.分析过程
样本代码如下:
xp3系统,ie8,360安全卫士-7.6.0.1130

<A href="file:///c:\windows\system32\BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB">按一下</A> 
65448f26 8b4c2404        mov     ecx,dword ptr [esp+4]
65448f2a 66833900        cmp     word ptr [ecx],0         ds:0023:00000000=????
65448f2e 8d4102          lea     eax,[ecx+2]
65448f31 740a            je      Adfilter!OnTrayMsg+0x2119b (65448f3d)

0:008> r
eax=00000000 ebx=00000000 ecx=00000000 edx=000000c0 esi=0211e354 edi=02b24c14
eip=65448f2a esp=0211e170 ebp=0211e1ac iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
Adfilter!OnTrayMsg+0x21188:
65448f2a 66833900        cmp     word ptr [ecx],0         ds:0023:00000000=????
		0:008> !lmi Adfilter
		Loaded Module Info: [adfilter] 
				 Module: Adfilter
		   Base Address: 65400000
			 Image Name: C:\Program Files\360\360safe\safemon\Adfilter.dll
		   Machine Type: 332 (I386)
			 Time Stamp: 4f558bc0 Tue Mar 06 12:00:00 2012
				   Size: ab000
			   CheckSum: b1275
		Characteristics: 210e  
		Debug Data Dirs: Type  Size     VA  Pointer
					 CODEVIEW    45,     0,   a8000  [Debug data not mapped] - Can't validate symbols, if present.
			 Image Type: FILE     - Image read successfully from debugger.
						 C:\Program Files\360\360safe\safemon\Adfilter.dll
			Symbol Type: EXPORT   - PDB not found
			Load Report: export symbols
	.text:65448F26 ; =============== S U B R O U T I N E =======================================
	.text:65448F26
	.text:65448F26 ; Attributes: library function
	.text:65448F26
	.text:65448F26 ; size_t __cdecl wcslen(const wchar_t *Str)
	.text:65448F26 _wcslen         proc near               ; CODE XREF: sub_654012C5+61p
	.text:65448F26                                         ; sub_65402AB1+D4p ...
	.text:65448F26
	.text:65448F26 Str             = dword ptr  4
	.text:65448F26
	.text:65448F26                 mov     ecx, [esp+Str]
	.text:65448F2A                 cmp     word ptr [ecx], 0
	.text:65448F2E                 lea     eax, [ecx+2]
	.text:65448F31                 jz      short loc_65448F3D
	.text:65448F33
	.text:65448F33 loc_65448F33:                           ; CODE XREF: _wcslen+15j
	.text:65448F33                 mov     dx, [eax]
	.text:65448F36                 inc     eax
	.text:65448F37                 inc     eax
	.text:65448F38                 test    dx, dx
	.text:65448F3B                 jnz     short loc_65448F33
	.text:65448F3D
	.text:65448F3D loc_65448F3D:                           ; CODE XREF: _wcslen+Bj
	.text:65448F3D                 sub     eax, ecx
	.text:65448F3F                 sar     eax, 1
	.text:65448F41                 dec     eax
	.text:65448F42                 retn
	.text:65448F42 _wcslen         endp
	#include <Windows.h>

	int _tmain(int argc, _TCHAR* argv[])
	{
		WCHAR* p = NULL;

		wcslen(p);

		return 0;
	}
Breakpoint 0 hit
eax=65461620 ebx=00175c90 ecx=00000001 edx=000000c0 esi=0211e260 edi=02b24bf8
eip=00d615e4 esp=0211e1b4 ebp=0211e1e0 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
IEFRAME!IEIsProtectedModeProcess+0x580b:
00d615e4 ff5018          call    dword ptr [eax+18h]  ds:0023:65461638=65405c64

 bp 65405cb9 "r eax;gc"

 .text:65405CA3                 mov     edi, [ebp+8]
.text:65405CA6                 mov     ecx, edi
.text:65405CA8                 call    sub_65405AA8
.text:65405CAD                 test    eax, eax
.text:65405CAF                 jz      short loc_65405C9C
.text:65405CB1                 mov     eax, [ebp+0Ch]
.text:65405CB4                 sub     eax, 0FAh
.text:65405CB9                 jz      loc_65405F75    ; eax=0x0,在这里跳转到错误处理流程
....
.text:65405F75 loc_65405F75:                           ; CODE XREF: .text:65405CB9j
.text:65405F75                 mov     eax, [ebp+8]
.text:65405F78                 push    dword ptr [eax+1Ch]
.text:65405F7B                 lea     edi, [eax+1Ch]
.text:65405F7E                 call    sub_654026F7
.text:65405F83                 push    dword ptr [edi]
.text:65405F85                 call    sub_65402612
.text:65405F8A                 mov     eax, [esi]
.text:65405F8C                 pop     ecx
.text:65405F8D                 pop     ecx
.text:65405F8E                 mov     eax, [eax+58h]
.text:65405F91                 push    ebx
.text:65405F92                 mov     [ebp+1Ch], eax
.text:65405F95                 mov     al, [ebp+0Bh]
.text:65405F98                 lea     ecx, [ebp-28h]
.text:65405F9B                 mov     [ebp-28h], al
.text:65405F9E                 call    ?_Tidy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEX_N@Z ; std::basic_string<ushort,std::char_traits<ushort>,std::allocator<ushort>>::_Tidy(bool)
.text:65405FA3                 mov     eax, [ebp+1Ch]
.text:65405FA6                 mov     [ebp-4], ebx
.text:65405FA9                 test    byte ptr [eax+1], 40h
.text:65405FAD                 mov     eax, [eax+8]    ; 正常情况兄下[eax+8]保存有字符串的指针
.text:65405FB0                 jz      short loc_65405FC4
.text:65405FB2                 mov     eax, [eax]
.text:65405FB4                 push    eax             ; Str
.text:65405FB5                 mov     [ebp+1Ch], eax
.text:65405FB8                 call    _wcslen         ; 这里调用出错函数
breakpoint 9 redefined
eax=ffffff6f
eax=ffffff6f
eax=ffffff6f
eax=ffffff6f
eax=ffffff6f
eax=ffffff6f
eax=ffffff6f
eax=ffffff6c
eax=ffffff6f
eax=00000000
Breakpoint 8 hit
eax=00000000 ebx=00000000 ecx=0211e1a0 edx=000000c0 esi=0211e354 edi=02b24d08
eip=65405f75 esp=0211e178 ebp=0211e1ac iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
Adfilter!IsInWhiteList+0x7ef:
65405f75 8b4508          mov     eax,dword ptr [ebp+8] ss:0023:0211e1b4=02b24d08
bp 65405C64 "r ‘poi(ebp+0x0c)’;'gc'"
bp 65405C64 ".echo begin ######### ;dd poi(ebp+0c);.echo end ##############;gc"

bp 65405CA8 ".echo begin ######### ;dd poi(ebp+0c);.echo end ##############;gc"
bp 65405CA8 ".echo begin ######### ;dd poi(ebp+0c);.echo end ##############;gc"
begin #########
000000fa  ???????? ???????? ???????? ????????
0000010a  ???????? ???????? ???????? ????????
0000011a  ???????? ???????? ???????? ????????
0000012a  ???????? ???????? ???????? ????????
0000013a  ???????? ???????? ???????? ????????
0000014a  ???????? ???????? ???????? ????????
0000015a  ???????? ???????? ???????? ????????
0000016a  ???????? ???????? ???????? ????????

bp 65405CA6 ".echo begin ######### ;dd poi(ebp+0c);.echo end ##############;gc"
bp 65405C7B ".echo begin ######### ;dd poi(ebp+0c);.echo end ##############;gc"
bp 65405C64 ".echo begin ######### ;dd poi(ebp+0c);.echo end ##############;gc"
begin #########
0211e260  00000003 000000fa 00d61078 00000000
0211e270  e3540001 00000211 00000000 00000000
0211e280  d4af0000 021100d5 0211e430 00000000
0211e290  0211e368 00d5d454 001758d0 000000fa
0211e2a0  0211e354 0211e430 00000000 0000400c
0211e2b0  0000400b 0000400b 00000000 0211e430
0211e2c0  00000000 0000400c 00000000 0211e40c
0211e2d0  00000000 0000400c 00000000 0211e3ec
end ##############
Breakpoint 8 hit
eax=00000000 ebx=00000000 ecx=0211e1a0 edx=000000c0 esi=0211e354 edi=02b24d08
eip=65405f75 esp=0211e178 ebp=0211e1ac iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
Adfilter!IsInWhiteList+0x7ef:
65405f75 8b4508          mov     eax,dword ptr [ebp+8] ss:0023:0211e1b4=02b24d08

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

上传的附件:
收藏
免费 6
支持
分享
最新回复 (19)
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
2
360回复是空指针引用的bug,不能利用!
我不会告诉你我有一种想死的冲动。
2012-12-10 18:43
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
IE 6    360 8.9   IE没有出现崩溃
2012-12-10 20:41
0
雪    币: 219
活跃值: (783)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
4
mark~~~```
2012-12-10 20:49
0
雪    币: 500
活跃值: (995)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
lz分析的很详细,让我等菜鸟受益,感谢
2012-12-11 09:20
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
6
360应该已经修补了此漏洞。。。。
这个bug之前被报道乌云上
2012-12-11 10:18
0
雪    币: 219
活跃值: (783)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
7
我在顶回去~~
2012-12-11 13:40
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
仙果老大分析的很详细,在此膜拜了。
360动作还是蛮快的。
2012-12-11 13:42
0
雪    币: 107
活跃值: (404)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
哈哈..回复很犀利..............
2012-12-11 13:51
0
雪    币: 155
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
回复得很准确。
最关键在于,只能本地页面触发,鸡肋中的鸡肋之王,分析这种东西,你确实应该有这冲动。
2012-12-11 18:16
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
11
看见那一大串B导致崩溃了,多数人可能心中会窃喜:说不定挖到个溢出,等分析完才发现被坑了,哈哈……
2012-12-11 20:25
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
12
相当的坑,大坑啊。。。
2012-12-11 21:45
0
雪    币: 260
活跃值: (249)
能力值: ( LV12,RANK:350 )
在线值:
发帖
回帖
粉丝
13
顶!虽然看不懂。
2012-12-12 00:54
0
雪    币: 16
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
感谢分享啊!
2012-12-12 09:33
0
雪    币: 589
活跃值: (119)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
15
确实走了很多弯路,按照机制来说大多是BeforeNavigate出问题吧
2012-12-14 11:52
0
雪    币: 45
活跃值: (55)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
16
看到那个“弯路”的时候看不太懂了,觉得单看别人的分析文章总是看不懂的,要跟着做才行。。
ps:要能导致360崩溃就有用了
2013-1-14 16:36
0
雪    币: 269
活跃值: (906)
能力值: ( LV12,RANK:345 )
在线值:
发帖
回帖
粉丝
17
赞一个,是不是只有堆栈上的缓冲区才能溢出才能被利用
2013-2-4 10:13
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
18
堆(heap)上的缓冲区溢出也是有可能被利用的
2013-2-18 11:06
0
雪    币: 269
活跃值: (906)
能力值: ( LV12,RANK:345 )
在线值:
发帖
回帖
粉丝
19
多谢,最近看了下《0Day》对于堆栈溢出利用有了大致了解,看这个比在家看电视、打游戏有意思多了
2013-2-18 11:51
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
20
电视、游戏是消遣,调试分析才是王道
2013-2-18 16:35
0
游客
登录 | 注册 方可回帖
返回
//