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]
...
总结
该漏洞是在执行内存复制操作时由于整型溢出带动堆溢出造成的,成功利用该漏洞可以导致本地权限提升。

◆◆0
MS16-124:微软内核整型溢出漏洞
分页阅读: 1 2
发表评论