中易网

什么是mpeg2漏洞?

答案:2  悬赏:40  
解决时间 2021-04-28 12:17
  • 提问者网友:你在我心中是最美
  • 2021-04-27 22:03

如题。

最佳答案
  • 二级知识专家网友:疯山鬼
  • 2021-04-27 22:19
是视频漏洞来的
全部回答
  • 1楼网友:冷态度
  • 2021-04-27 23:52
该漏洞表现在在MSVidCtl.dll(xpsp2:6.5.2600.2180,vista:6.5.6000.16386)中,MSVidCtl.dll为系统标准组件。产生漏洞的原因是不正确读取持久化的字节数组(VT_UI1|VT_ARRAY),攻击者可以通过构造特殊的文件触发该漏洞,最终导致以当前进程权限执行任意代码。   以下是存在漏洞代码的分析:以6.5.2600.2180版本的MSVidCtl.dll为例:   .text:59F0D5E3    push    edi .text:59F0D5E4    mov    edi, [ebp+arg_3C] .text:59F0D5E7    mov    eax, [edi] .text:59F0D5E9    push    ebx .text:59F0D5EA    push    2 .text:59F0D5EC    lea    ecx, [ebp+vt] .text:59F0D5EF    push    ecx .text:59F0D5F0    push    edi .text:59F0D5F1    call    dword ptr [eax+0Ch] .text:59F0D5F4        cmp    eax, 1 .text:59F0D5F7    jnz    short loc_59F0D5FE .text:59F0D5F9    mov    eax, 80004005h   在0x59F0D5F1处,读取了2字节,以确定被读取的VARIANT的类型(VARTYPE)。   .text:59F0D67F    cmp    eax, 2011h .text:59F0D684    jnz    loc_59F0D70E .text:59F0D68A    mov    eax, [edi] .text:59F0D68C    push    ebx .text:59F0D68D    push    8 .text:59F0D68F    lea    ecx, [ebp+cElmts] .text:59F0D692    push    ecx .text:59F0D693    push    edi .text:59F0D694    call    dword ptr [eax+0Ch] .text:59F0D697    cmp    eax, ebx .text:59F0D699    jl    loc_59F0D760 .text:59F0D69F    cmp    eax, 1   接着,从0x59F0D68A处开始进入VARTYPE为2011h,即VT_UI1|VT_ARRAY的处理流程:在0x59F0D694处读取了8个字节,但只使用低32位来确定该字节数组的大小。   .text:59F0D6AE    mov    eax, [ebp+cElmts] .text:59F0D6B1    mov    [ebp-20h], eax .text:59F0D6B4    lea    eax, [ebp-20h] .text:59F0D6B7    push    eax    ; rgsabound .text:59F0D6B8    push    1    ; cDims .text:59F0D6BA    push    11h    ; vt .text:59F0D6BC    mov    [ebp+rgsabound.lLbound], ebx .text:59F0D6BF    call    ds:SafeArrayCreate .text:59F0D6C5    mov    ebx, eax .text:59F0D6C7    test    ebx, ebx .text:59F0D6C9    jnz    short loc_59F0D6D5   接着,在0x59F0D6B1处构造SAFEARRAYBOUND结构(将之前读取的个数存入该结构),并调用SafeArrayCreate创建出SAFEARRAY结构。     .text:59F0D6D5    lea    eax, [ebp+pvData] .text:59F0D6D8    push    eax    ; ppvData .text:59F0D6D9    push    ebx    ; psa .text:59F0D6DA    call    ds:SafeArrayAccessData .text:59F0D6E0    test    eax, eax .text:59F0D6E2    jl    short loc_59F0D760 .text:59F0D6E4    mov    eax, [edi] .text:59F0D6E6    push    0 .text:59F0D6E8     push    [ebp+cElmts] .text:59F0D6EB    lea    ecx, [ebp+ pvData] .text:59F0D6EE    push    ecx .text:59F0D6EF    push    edi .text:59F0D6F0    call    dword ptr [eax+0Ch] .text:59F0D6F3      push    ebx    ; psa .text:59F0D6F4    mov    [ebp+var_18], eax .text:59F0D6F7    call    ds:SafeArrayUnaccessData .text:59F0D6FD    mov    eax, [ebp+var_18] .text:59F0D700    test    eax, eax .text:59F0D702    jl    short loc_59F0D760 .text:59F0D704    cmp    eax, 1 .text:59F0D707    jz    short loc_59F0D6A4 .text:59F0D709    mov    [esi+8], ebx .text:59F0D70C    xor    ebx, ebx   接下来,使用SafeArrayAccessData获得SAFEARRAY的数据区域,并将该指针保存到局部变量pvData(ebp+8)中。   在0x59F0D6EB处,代码错误地将pvData的地址作为IStream::Read (0x59F0D6F0)的参数,而不是pvData的值,而该值指向的内存才是真正用于存放从流中读取数据的缓冲区。   这样就导致了以下情况:试图将任意长度的数据放入原本4字节长度的内存中,导致了缓冲区溢出。   攻击者可随意覆盖SEH或者RET,将EIP设置成任意数值。结合JS堆喷射,“挂马”利用成功率将相当高,风险很大。   注:在6.5.6000.16386版本的MSVidCtl.dll中,也存在类似代码:   .text:37D46DFF    push    ebx .text:37D46E00    push    8 .text:37D46E02    lea    ecx, [ebp-20h]; 数组大小 .text:37D46E05        push    ecx .text:37D46E06    push    edi .text:37D46E07    call    dword ptr [eax+0Ch]  …  … .text:37D46E42    lea    eax, [ebp+0Ch] .text:37D46E45    push    eax    ; ppvData .text:37D46E46    push    ebx    ; psa .text:37D46E47    call    ds:SafeArrayAccessData .text:37D46E4D    test    eax, eax .text:37D46E4F    jl    loc_37D46ED5 .text:37D46E55    mov    eax, [edi] .text:37D46E57    push    0 .text:37D46E59    push    dword ptr [ebp-20h]; 数组大小 .text:37D46E5C    lea    ecx, [ebp+0Ch] .text:37D46E5F    push    ecx ; 读取缓冲区指向参数 .text:37D46E60    push    edi .text:37D46E61    call    dword ptr [eax+0Ch] .text:37D46E64    push    ebx    ; psa  

但是在VISTA+IE7环境下,该漏洞并不会触发,因为导致漏洞的代码不会被调用到。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息