首页
社区
课程
招聘
IE VBScript 漏洞之CVE-2018-8174
发表于: 2019-1-13 21:13 9000

IE VBScript 漏洞之CVE-2018-8174

2019-1-13 21:13
9000

之前在IE VBScript 漏洞之CVE-2014-6332中,总结学习了VBScript中的关键数据结构,故在这篇中不再总结。如果错误,请指正,谢谢。

启用页堆

捕获异常如下,我们可以看到eax引用的地址已经被释放了,也就是对应在poc中的Erase array,调用Erase触发了Class_Terminate函数,在Class_Terminate函数中,将array(1) 赋值给了array2,然后又平衡了其引用计数,使得array2成了指向MyClass的悬挂指针,访问array2造成了访问异常。

首先,我们将poc修改成如下。看一下正常的释放过程。

我们来看看poc中MyClass在VbsScript中的释放过程。

在Exploit中,当执行完UAF函数,使用memclass函数对释放的内存进行站位。

下面我们来看下InitObjects函数的功能,SetProp函数触发 SetProp的Public Default Property Get P函数执行,在此函数中,将memClass再次释放,并再次使用readMemClass进行站位,并将hexA赋值给readMemClass的成员变量mem,将并将返回的P = 174088534690791e-324(00000005 02aa01dc 00000000 0000200c)复制给memClass的成员变量mem。因为
readMemClass和memClass的mem变量地址相差0xc,因此出现了内存重叠。对memClass的成员变量mem赋值造成了readMemClass.mem 的类型变为了一个大小为0x7FFFFFFF每个元素占1Byte的variant,最终实现任意地址读写。

在执行InitObjects函数前,memClass的内存布局

执行完InitObjects函数之后,我们来看先内存布局

在Exploit中,通过相同的方法,将memClassB.mem构造成了vblong类型用于泄露地址。通过以下
方法泄露CScriptEntryPoint对象的地址。然后通过对象地址获得vbs的基址。通过VbScript的导出表获得msvcrt.dll的基址,获得ntdll的基址,最终获取了NtContinue、VirtualProtect函数地址。。

调试验证

Exploit 通过如下的方法获得执行参数的地址内存数据,将address指向的内存混淆成bstr,通过lenB获得改地址前4个字节的数据。

Exploit中,通过和获得关键DLL基址同样的手法,获得shellCode地址,然后构建ROP链,通过精心控制使代码执行ntdll!ZwContinue函数,然后利用任意读写的手段修改某个VAR的type类型为0x4d,再赋值为0让虚拟机执行VAR::Clear函数。最终实现shellcode执行。

 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-1-14 09:53 被Heavenml编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (1)
雪    币: 26398
活跃值: (63257)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
赞一下,感谢分享!
2019-1-23 16:02
0
游客
登录 | 注册 方可回帖
返回
//