Loading
0

MS16-124:微软内核整型溢出漏洞

PAGE:82C1725F       add     [ebp+var_38], 4
PAGE:82C17263       jmp     loc_82C16F89 ;  跳转到第二层循环
PAGE:82C173FF loc_82C173FF:   ; CODE XREF: CmpCheckValueList(x,x,x,x,x,x,x,x)+4D3j
PAGE:82C173FF       push    0
PAGE:82C17401       push    [ebp+arg_10]
PAGE:82C17404       mov     eax, esi
PAGE:82C17406       call    _HvMarkCellDirty@12 ; HvMarkCellDirty(x,x,x)
PAGE:82C1740B       test    al, al
PAGE:82C1740D       jz      loc_82C175B8
PAGE:82C17413       push    0
PAGE:82C17415       push    dword ptr [edi+28h]
PAGE:82C17418       mov     eax, esi
PAGE:82C1741A       call    _HvMarkCellDirty@12 ; HvMarkCellDirty(x,x,x)
PAGE:82C1741F       test    al, al
PAGE:82C17421       jz      loc_82C175B8
PAGE:82C17427       dec     dword ptr [edi+24h]
PAGE:82C1742A       dec     [ebp+arg_C] ; [ebp+arg_C]是作为调用的一个参数传进来的,值为0x80000001,这里减1
PAGE:82C1742D       mov     eax, [ebp+arg_C]
PAGE:82C17430       sub     eax, [ebp+var_20] ; [ebp+var_20]是从上面的第一层循环中得到的,值为1.0x80000000减一得到0x7fffffff
PAGE:82C17433       shl     eax, 2 ;  eax乘4,得到0xfffffffc
PAGE:82C17436       push    eax ;  构造的memcpy大小0xfffffffc入栈
PAGE:82C17437       mov     eax, [ebp+var_38]
PAGE:82C1743A       lea     ecx, [eax+4]
PAGE:82C1743D       push    ecx             ; void *
PAGE:82C1743E       push    eax             ; void *
PAGE:82C1743F       call    _memmove ;  调用函数触发堆溢出
PAGE:82C17444       mov     esi, [esi+28h]
...
下面是函数"_memmove"的代码片段:
.text:82A7C6AB       and     edx, 3
.text:82A7C6AE       cmp     ecx, 8          ; switch 8 cases
.text:82A7C6B1       jb      short loc_82A7C6DC ;
.text:82A7C6B3       rep movsd  ;  最后在这里因为复制内存大小过大堆溢出
.text:82A7C6B5       jmp     ds:off_82A7C7CC[edx*4]
...
总结
该漏洞是在执行内存复制操作时由于整型溢出带动堆溢出造成的,成功利用该漏洞可以导致本地权限提升。

分页阅读: 1 2
【声明】:8090安全小组门户(https://www.8090-sec.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们:邮箱hack@ddos.kim,我们会在最短的时间内进行处理。