CVE-2018-8174双杀漏洞分析复现及防御
来源:岁月联盟
时间:2020-01-29
我们看一下 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]