CVE-2018-8174双杀漏洞分析复现及防御

来源:岁月联盟 编辑:猪蛋儿 时间:2020-01-29
0037a1dc  88006c6c 00000000 003b2f48 77737560
我们看一下 vbscript!VAR::Clear 的一些逻辑;
//(到这里winbdg重启了一次,地址有所变化)
.text:6E4F17F0                 mov     edi, edi
.text:6E4F17F2                 push    esi                 
.text:6E4F17F3                 mov     esi, ecx             //进来 Clear 函数 ecx保存的就是类型地址,那么我们构造的地址就在[ecx+8]的地方
.text:6E4F17F5                 movzx   ecx, word ptr [esi]  //  ds:0023:002dbf0c=004d
.text:6E4F17F8                 movzx   eax, cx
.text:6E4F17FB                 push    edi
.text:6E4F17FC                 xor     edi, edi
.text:6E4F17FE                 sub     eax, 49h        //减去0x49h
.text:6E4F1801                 jz      loc_6E508B62
.text:6E4F1807                 sub     eax, 3         //减去0x03
.text:6E4F180A                 jz      loc_6E4F4A63
.text:6E4F1810                 dec     eax            //自减 0x01
.text:6E4F1811                 jz      loc_6E50089C   //所以 esi==0x4d 的话这里要跳转
.text:6E4F1817                 dec     eax   
...
跳转后
.text:6E50089C                 mov     eax, [esi+8]  ds:0023:002dbf14=0310a914  //0310a914 是刻意构造的那片内存
.text:6E50089F                 test    eax, eax
.text:6E5008A1                 jz      loc_6E4F1843
.text:6E5008A7                 mov     ecx, [eax]  ds:0023:0310a914=01fb1023  //01fb1023 中保存的是连续4个 NtContinue 函数地址
.text:6E5008A9                 push    eax
.text:6E5008AA                 call    dword ptr [ecx+8]                     //[ecx+8]当然也是 NtContinue 函数地址
.text:6E5008AD                 jmp     loc_6E4F1843

小结:
所以是从 VAR::Clear 中调用了 ntdll!ntContinue,而且又仿造好了一个了 CONTEXT结构体,这样利用 ntdll!ntContinue还原了一个假的进程。
且 eip 就是 VirtualProtect,而栈空间esp是前面准备好的,返回值为shellcode入口,VirtualProtect的执行参数也是shellcode区域,最后VirtualProtect函数执行完,直接返回到shellcode的开始处开始执行。
四、复现过程
复现环境:Win7 x86sp1,IE8.0.7601.17514
使用Github的PoC,在上述背景内的环境下直接IE打开即可复现:

五、防护建议
如果要预防此类型漏洞,提供以下建议:
1,微软也已经放弃了vbscript,edr 或其他安全厂商可以考虑禁用vbscript脚本,以避免其造成的安全隐患
2,VirtualProtect 函数,检查参数。
 
 

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20]