Archive for the ‘软件漏洞’ Category.

CVE-2014-6332 老洞

CVE-2014-6332,网上已经有过几篇分析报告 那些报告看得云里雾里,可谓“让懂的人懂让不懂的人不懂”

错位数组,修改类型

VBscript 代码开头定义了一些变量:

然后 Begin()–>Create()–>Over()

此时,aa 和 ab 的实际大小都是 a0,但 aa经过漏洞修改,可索引的范围大了 0x80000000h。

如果碰巧存在如上图所示的情况,aa 数组的实际大小到 a0为止,ab数组从 ab(0)开始,中间隔了 8h 大小的内存。
那么 ab(0)的 dataHigh 字段正好对应 aa(a1)的 varType 字段。
这是完全可以的,因为自 aa(a1-1)开始,aa数组的元素只有索引,没有实际内存。
为了满足这个“碰巧”,Create()要尝试最多 400次,直到满足。

实际上没几次尝试就成功了,多数情况一次即可。

什么事DVE?

题外话,啥是 DVE。Yuange 说了好几年 DVE,究竟什么是 DVE,即不劫持 EIP 而达到执行目的。
在 VB 虚拟机中,yuange 采用的具体办法是修改 GodMode,要修改 GodMode 就要修改 varType。
各种各样奇形怪状的漏洞,精心安排,都要达到这一目的——改 varType。
@romosied_lu 演示 DVE 的时候甚至直接 eb 08000020 200c
本例中,通过越界索引这个漏洞错位放置的数组可相互修改 varType。
这一整套的利用方式已经模块化了

mydata()

reate()结束,Begin()函数进入 setnotsafemode()。
setnotsafemode()先执行 mydata()

函数中
i=testaa
i=null
这两句话执行过后 i+0x8 的位置处恰好是一个 CScriptEntrypPoint 对象指针。
后面寻找标志位的时候有用处。
同样依靠上面说的方式,将内存弄成了如下的样子:

这样布置好数据,然后 mydata 返回 aa(a1)。

ReadMemo()

随后进入 ReadMemo()函数,这个函数很有技巧,用来获取指针的引用内容。
首先,再次利用错位修改属性:

这里将 aa(a1)的类型修改为 vbString,也就是 BSTR 结构,其内容也是个 BSTR 指针
BSTR 结构大名鼎鼎,已经在 IE 的攻防拉锯战中活跃已久,不服累述。

Lenb()函数用来获取 bstr 结构的长度,即 bstr 指针-4 处的内容,也就是说,Lenb()返回*(aa(a1)-4),yuange 用 add+4
来修正,那么 ReadMemo()函数返回值就是参数 add 指针所指的内容。

setnotsafemode()

此时,mydata()已准备好内存布局,setnotsafemode()要做的事情很简单了:
利用 ReadMemo()搜索内存,修改标志位。

经过这一轮反复索引寻址,i+&h134实际上已经“差不多”指向了 godmode flag。
因版本不同,地址可能会有微小差别,但总是在那一块。
地址找到了,如何修改内容呢?

还记得前面 aa(a1+2)被修改成 vbSafeArray 吗,与触发漏洞的时候数据类型一样的,也不再多说了。
修改为 vbSafeArray 后,aa(a1+2)可以索引到整个用户内存空间。
Yuange 搜索了那一块内存,找到 godmode flag 的确切位置

然后用 aa(a1+2)修改掉 flag,索引值 i+&h11c+k 也是 pvData+cbElements*4 修正 4个偏移得到的结果。
Myarray 在 BeginInit()函数中初始化过,符合 vbSafeArray 的结构

The end

至此,上帝模式已开启,runmuma 中能写什么,全靠各位想象力。
其实错位数组然后修改 varType 然后修改 flag 的这一套组合拳已经非常完善,之前大家的思路都是考虑一个 uaf 漏
洞之后怎么衔接上这个利用,如今再看 yuange 完整的代码,愚猜想可能 yuange 挖掘出这个 vb 的 redim 漏洞与这一
套利用方式应该是同时完成,这两方面都需要对 vbSafeArray 结构彻底的逆向理解。而且漏洞与利用一脉相承,顺
理成章,结合得非常紧密。当然,这只是八卦,真相只有 yuange 自己知道。
在感受大牛功力深厚,仙人指路的同时,学人以鱼不如学人以渔,vb 利用固然精妙,更应该看到的是对 vbscript.dll
的逆向分析,寻找软件内部的原理,了解其不想让我们知道的运作方式,找到别人找不到的弱点,完成大家不敢想
的 exploit,跳出惯性思维,不受框架束缚,享受过程,这才是黑客与黑客精神。