-
-
[翻译]MS11-002 Pwn2Own 堆溢出
-
发表于: 2017-7-29 22:33 3974
-
翻译自:http://vreugdenhilresearch.nl/ms11-002-pwn2own-heap-overflow/
今天微软给我在Pwn2Own 2010中使用的堆溢出漏洞打上了补丁。这个漏洞是堆分配中的整数溢出。分配较小的内存后来用于存储适合在那里的更多信息。
更确切地说:
<XML ID="xmlid1">
<Devices>
<Device>
<AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA />
</Device>
</Devices>
</XML></pre>
在一个html文件内部,你能够访问到一个叫做XML Data Island的数据结构。它实际上起到一个数据库界面的作用。通过它,你可以查询XML数据,检索记录行、数据,增加更多的记录行。它底层的对象是MSAdo对象。
数据库对象提供了一个叫CacheSize的属性,你可以利用该属性决定在它的高速缓存中应该保存多少记录。CacheSize 在内部进行了乘以0x4并加0x10的运算(我凭借记忆写下这些内容,所以我可能会有点偏离,但粗略的数据是正确的)。
通过为CacheSize属性指定一个大的数据,一个整数溢出可能会发生,结果将会仅预留少量的内存用于保存数据。保存在CacheSize缓冲区中的数据是被取出的记录行行号。
通过调用使你遍历所有记录的函数,比如‘MoveFirst’, ‘MoveNext’ 或相似的方法,你可以向高速缓存中增加记录行。这当然不会向高速缓存中写入更多的记录号,然后有可用的。
所以,通过增加新的记录,然后发起移向后续记录并缓存的命令,你可以可靠地溢出你想要的字节数。我使用‘MoveFirst’方法获得了成功。
高速缓存缓冲区位于一个私有堆而不是默认的IE8堆,所以正常的堆喷射技术不会有效。因为我想利用这个漏洞来规避ASLR,我需要想办法来利用这个漏洞来泄露堆内存的一些信息。在私有堆上,缓冲区所在的地方存有一些C++对象和字符串。
我通过覆写堆上其中一个字符串的\00\00 字节获得了该堆上其中一个对象的虚表地址,该地址提供了了解内存中 msado.dll模块位置的足够信息,这是我需要的规避DEP技巧的全部。
为了覆写字符串的\00\00字节,你的确需要一个相当高的记录号,比如高于0x00010001。我只是简单地增加和移除足够的记录直到达到了这个记录号。之所以移除他们,是因为我不想同时把0x00010001个记录全部写到高速缓存中。
当你已经把记录号增加到足够高,你可以在堆中布局一个字符串,然后往高速缓存中写足够的记录来覆写\00\00这个字符串结束字节 。如果然后你在javascript中读回这个字符串,你可以瞥一眼这个字符串后面的内存。如果你在那里没有找到你想要的(你的字符串将仍旧终止在下一个\00\00序列),你可以简单地增加另一个记录,然后把这个记录也写到高速缓存中,直到你发现你寻找的东西。
这当然需要你以正确的顺序布局堆:[cachebuffer][string][objects] 。我成功地做到了,当我在pwn2own机器上运行时,它能工作并且稳定的。但是它可能是只适用于特定的一个确切的IE8和windows 7补丁版本,所以如果poc代码没有立即工作,不要太惊讶。
我发现的一个小技巧是这样一个事实:通过为XML Data Island指定一个确定的CacheSize,然后关闭RecordSet,你可以在私有堆上“打洞”。这样允许你对堆布局有一定的控制。
另外,我只使用堆溢出的信息泄露,但是有足够的选项使它变成RCE,至少对于Windows xp,也可能是Windows 7是这样的。但对于实际的RCE,我使用了一个UAF bug,该bug在几个月前已经打了补丁:http://www.microsoft.com/technet/security/bulletin/MS10-035.mspx。
在我的硬盘中有好几个exp版本,我不知道哪一个是实际上工作的最终版本,所以我只把一个放在这里。
另外,我使用的DEP规避是基于在pwn2opwn时与W7一起提供的msado.dll版本,基本上在我排列的堆喷射上进行了 VirtualProtect调用,然后使它可执行。
记住,这是原始代码,是在我很忙的时候写的,所以它是丑陋并且低效的,可能充满了怪异的变量名。同时,它需要Alex Sotirovs的heapLib.js来运行。
我原先的的pwn2own paper
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
- [原创]large chunk分配过程调试 12782
- [原创]BCTF 2018 House of Atum分析 11814
- [原创]HITB CTF 2018 gundam分析 17322
- [原创][原创]Unsorted Bin 利用后续 5788