array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 CVE-2018-8373相关利用杂谈 - 爱码网

前段时间趋势披露了VBS引擎的在野0day CVE-2018-8373,当时中心第一时间披露了该次攻击和Darkhotel的关联,上周花了段时间将该漏洞的exp构造出来,如下所示,目前来看UAF占位上不是太稳定,后续会继续改进,构造exp的时候遇到一些坑,遂找时间记录一下。

CVE-2018-8373相关利用杂谈

利用思路上趋势的文章中其实已经介绍得很清楚,在Default  Property中通过一个二维数组array1对释放的array(2)内存进行占位,并返回一个大的0x0FFFFFFF值,当cls.array(2) = cls赋值时,该0x0FFFFFFF会写入到array(2),由于该array(2)的内存空间之前巧妙的被二维数组array1占据,写入到0x0FFFFFFF正好将该二维数组的其中一维长度被设置为0x0FFFFFFF。

通过该array1(0x0FFFFFFF,2)创建一个超长的fakearray,从而实现全局内存读写(期间需要在array1中搜索两个特殊的index,可以使用银雁冰同学之前提供的方法,即暴力的type类型搜索)。

 CVE-2018-8373相关利用杂谈

这个地方遇到的坑就是构造的时候最好不要在打了CVE-2018-8174的机器上测试,如下所示是我们正常构造的array1二维数组,其中红框对应的具体的两个维数(红框),我们的目标就是通过cls.array(2) = cls修改这两维。

 CVE-2018-8373相关利用杂谈

返回的数据如下所示,这是一个int类型变量的内存结构,其数值为0x0FFFFFFF,可以看到绿色部分不为0(而是改为了C0),第一个红框中的8个字节的高字节也不为0(同样也是C0),注意这样的内存结构是固定的。

 CVE-2018-8373相关利用杂谈

这就导致之后cls.array(2) = cls返回二维数组被修改如下,但是这样的二维数组的内存结构是有问题的,此时你直接操作该二维数组将导致报错(数组越界,超过0x0FFFFFFF)。

 CVE-2018-8373相关利用杂谈

如下所示可以看到一个标准利用时被修改的array1的内存结构应该如下(该图来自于趋势科技的原文),通过后来的调试发现,8174之前的补丁0x0FFFFFF对应的内存结构就是下图红框所示(虽然绿框中0部分有时也不为0,但是其整体的值不会大于0x0FFFFFF)。 

CVE-2018-8373相关利用杂谈

但是打过8174补丁之后,其中绿色的部分会被填充上数据(固定填充),从而导致之后难以利用。

 CVE-2018-8373相关利用杂谈

其主要原因在于CScriptRuntime对象的Local Variables在补丁之后会初始化为C0的形式。

CVE-2018-8373相关利用杂谈

而变量的初始化时直接在这块内存上进行的,如下可知对int类型的变量只是简单的将3,4字节赋值为0003(int的type类型),8-c赋值对int的实际值,其余位置默认为内存的初始化值C0。

 CVE-2018-8373相关利用杂谈

因此这里我挺好奇当时趋势抓获的样本中是否有相应的技巧将0x0FFFFFF变量的内存进行规范化,还是说他们当时测试的时候是在没有打8174补丁的机器上进行,如果是第二点的话,该漏洞的利用似乎在打了8174补丁上的机器上是无法利用的(如果不能很好解决变量初始化时的C0问题)。

 

 转载请注明出处

 

参考

https://blog.trendmicro.com/trendlabs-security-intelligence/use-after-free-uaf-vulnerability-cve-2018-8373-in-vbscript-engine-affects-internet-explorer-to-run-shellcode/

https://bbs.pediy.com/thread-246327.htm

 

相关文章: