当前位置:首页">"安全播报">"最新漏洞">"正文
Winamp LibSNDFile.DLL组件远程内存破坏漏洞
                                                                      浏览次数:

受影响系统:
Nullsoft Winamp 5.33
描述:
--------------------------------------------------------------------------------
BUGTRAQ ID: 23351

Winamp是一款流行的媒体播放器,支持多种文件格式。

Winamp在试图播放特制的.MAT文件时存在内存破坏漏洞,远程攻击者可能利用此漏洞控制处理了恶意.MAT文件的用户机器。

在以下代码段中:

----// SNIP SNIP //-------------------------------------------------
.text:1000CCED cmp [ebp+MY_DWORD], 40h ; (1)
.text:1000CCF1 jl short kont
.text:1000CCF3
.text:1000CCF3 loc_1000CCF3: ; CODE XREF: sub_1000CB3B+BAj
.text:1000CCF3 push 7Ah
.text:1000CCF5 jmp faked
.text:1000CCFA
.text:1000CCFA
.text:1000CCFA kont: ; CODE XREF: sub_1000CB3B+1B6j
.text:1000CCFA push [ebp+MY_DWORD]
.text:1000CCFD lea eax, [ebp+var_64]
.text:1000CD00 push eax
.text:1000CD01 push ebx ; int
.text:1000CD02 push esi ; DistanceToMoveHigh
.text:1000CD03 call sub_10025A28
.text:1000CD08 mov eax, [ebp+MY_DWORD]
.text:1000CD0B mov byte ptr [ebp+eax+var_64], 0 ; (2)
----// SNIP SNIP //-------------------------------------------------

MY_DWORD值是受控的,储存在.mat文件开始起的0x39偏移处。从上面代码可见块(1)非常重要,因为如果MY_DWORD大于或等于0x40的话就不会出现内存覆盖。 在块(2)计算内存地址的方式得出以下基本的数学假设:
1) x < 0x40
2) y = ebp + x - 0x64

其中:
x - 输入参数(MY_DWORD)
y - 最终覆盖地址

然后经过一些简单的计算,就可以得出*y*的范围(最终覆盖地址),因为*x*是受0x40限制的。

这里可以得到:

** y < ebp - 0x64 + 0x40 **

也就是假设EBP = 0x010CFB7C的话,就可以得到:

** y < 0x10CFB58 **

简而言之从MY_DWORD值所计算出的最终地址一定小于0x10CFB58,这就使得攻击仅限于低于0x10CFB58的内存。如果仅考虑同目标进程一同加载的模块的话,就会得到一些符合上述条件的:

----// SNIP SNIP //-------------------------------------------------
Executable modules
Base Size Entry Name File version Path
00400000 00125000 0045FD3E winamp 5,3,3,1100 winamp.exe
00C70000 00012000 00C7D8B5 png png.w5s
00C90000 00056000 00C9229F MSVCR71 7.10.3052.4 MSVCR71.dll
00D00000 0005E000 00D1ADD2 in_APE 3.99 in_APE.dll
00E00000 0004F000 00E0E54E in_cdda in_cdda.dll
00E50000 0001B000 00E5F124 in_midi in_midi.dll
00E70000 0001B000 00E80FFC read_fil read_file.dll
00E90000 0002B000 00EA77EF in_mod in_mod.dll
00EC0000 00008000 00EC3B89 in_mp4 in_mp4.dll
00ED0000 00028000 00EE7CF2 libmp4v2 libmp4v2.dll
00F00000 0003D000 00F3B640 in_mpc in_mpc.dll
00F40000 0003E000 00F5ED76 in_vorbi in_vorbis.dll
00F80000 00007000 00F814FC in_wave in_wave.dll
00F90000 0003D000 00FBAA8F libsndfi libsndfile.dll
----// SNIP SNIP //-------------------------------------------------

以下情况可导致EIP重新定向:

(DATA部分可写)

----// SNIP SNIP //-------------------------------------------------
...
.data:00472F14 ; sub_456A06+Bo ...
.data:00472F18 ; __int32 off_472F18
.data:00472F18 off_472F18 dd offset sub_456566 ; DATA XREF: sub_40340C+58r
.data:00472F18 ; sub_4543E8+59r ...
.data:00472F1C ; __int32 off_472F1C
.data:00472F1C off_472F1C dd offset sub_4565D5 ; DATA XREF: sub_406220+49r
.data:00472F1C ; sub_406587+BEr ...
.data:00472F20 ; __int32 off_472F20
.data:00472F20 off_472F20 dd offset sub_45668E ; DATA XREF: sub_4097F4+B1r

本新闻共2页,当前在第1页  1  2  



                                                                                          【关闭