PDF两重开释破绽CVE-2018-4990剖析 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

PDF两重开释破绽CVE-2018-4990剖析

申博_安全防护 申博 172次浏览 已收录 0个评论

破绽概述

CVE-2018-4990是Adobe在2018年5月修复的一个Adobe DC系列PDF阅读器的0day破绽。该破绽为两重开释(Double Free)破绽,攻击者经由过程一个特别的JPEG2000图象而触发Acrobat Reader两重开释,再经由过程JavaScript关于ArrayBuffers天真的掌握来完成恣意地点读写。
攻击者能够经由过程这个破绽完成对恣意两个4字节地点的开释,破绽触发前用精准的堆放射奇妙地构造内存,然后触发破绽,开释可控的的两块巨细为0xfff8的相邻堆块。随后,Windows堆分派算法自动将两块余暇的堆块兼并成一个大堆块,接着马上从新运用这个大堆块,并应用这个该堆块的读写能力改写一个ArrayBuffer对象的长度为0x66666666,从而完成恣意地点读写。

破绽细节

代码剖析
剖析破绽样本,经由过程PDF流剖析东西PdfStreamDumper能够看到pdf文件内里的objects流。个中第1个object流运用了JavaScript来触发并应用破绽。PDF两重开释破绽CVE-2018-4990剖析经由过程对该段剖析能够晓得,JavaScript中的dlldata为PDF阅读器破绽触发后加载运转的载荷,重要用于提权并实行恶意代码,而以后的JavaScript代码用来举行内存构造和破绽触发。PDF两重开释破绽CVE-2018-4990剖析上面JavaScript代码中经由过程两个Array实例sprayarr及a1来举行内存掌握,这两个Array在这里组织了大批对象,请求了大批的堆空间来完成Spray构造。再对a1的Array中奇数下标的堆空间举行了开释,借助堆分派算法,Windows堆管理器(Windows Heap Manager)会对这些块举行兼并,发作一个0x2000巨细的空间,JP2Klib在请求破绽对象时,会从开释的堆块内里直接复用一个。
下面的代码会先从开释的内存空间中从新运用内存。而且,因为空间较大(因为之前的兼并),以是须要分派比本来大一倍的空间,每一个数组成员分派一个长度为0x20000-0x24的ArrayBuffer。接着遍历sprayarr能够发明其对应的某一个sprayarr的成员长度被修正为了0x20000-0x24(默许的长度为0x10000-0x24),此时经由过程超长的sprayarr[i1]便可修正相邻的sprayarr[i1+1]对象的len长度属性,从剧本代码中能够看到长度被修正为了0x66666666,终究经由过程该超长的sprayarr[i1+1]便可完成全内存的读写。
PDF两重开释破绽CVE-2018-4990剖析
数据构造剖析
因为Adobe DC没有符号表,许多构造也没公然只要本身测试和总结。能够应用PdfStreamDumper对pdf剖析dump出须要修正的stream流,在修正dump出的stream流,末了替代完成对内嵌的javascript代码的修正。经由过程增加一些调试代码,以轻易下断和调试。
对Array构造举行剖析,能够建立一个Array的实例myContent,将该Array中第0个element赋值为0x1a2c3d4f,以便于内存搜刮,以后分别将感兴趣的变量赋值到该Array中便可很轻易的定位内存举行剖析。PDF两重开释破绽CVE-2018-4990剖析经由过程”s -d 0x0 L?0x7fffffff 0x1a2c3d4f”敕令能够定位到0x1a2c3d4f,查到左近的内存能够看到myContent构造的实例。能够看到Array构造每一个element占8字节,0x1a2c3d4f对应的是值,背面的0xffffff81对应的为element的范例,以是0xffffff81对应的范例为数值,0xffffff87对应的范例为数组。
PDF两重开释破绽CVE-2018-4990剖析如今有了sprayarr的地点0x391b3358,检察该地点的值能够看到该地点也是一个构造用来形貌sprayarr数组。经由过程测试发明0x49d50000地点生存了数组值,0x1000为数组的巨细。第0个element没有赋值以是为0,背面的element都赋值为数组。PDF两重开释破绽CVE-2018-4990剖析PDF两重开释破绽CVE-2018-4990剖析在代码里sprayarr被两次赋值,第一次为Uint32Array,第二次为ArrayBuffer,那末sprayarr被赋的值应该是ArrayBuffer。检察第一个element 0x49f9e420的值,能够看到一连的内存地区用来生存ArrayBuffer的构造信息,每一个构造0x98巨细,该构造偏移0xc的值0x49d5a018透露表现ArrayBuffer生存数据的内存地区。PDF两重开释破绽CVE-2018-4990剖析PDF两重开释破绽CVE-2018-4990剖析进入到详细的Arraybuffer内存空间检察(0x49d5a018),能够看到在0x49d5a018前面的0xc字节生存了Arraybuffer的现实内存长度ffe8(0x10000-0x24)。PDF两重开释破绽CVE-2018-4990剖析再看看a1的构造,a1的地点为0x391b3380,a1的构造和sprayarr雷同都为Array。0x47c01000为a1生存数据的地点,能够看到基数的element已被开释。PDF两重开释破绽CVE-2018-4990剖析PDF两重开释破绽CVE-2018-4990剖析再检察a1[3]所指向的Uint32Array构造,该构造巨细为0x58字节,个中0x3f0为构造的巨细(252*4),0x39137388形貌下一个构造。
PDF两重开释破绽CVE-2018-4990剖析在0x39137388的地点又生存的为0x98巨细的构造用来形貌现实数据的寄存地点,在偏移0xc的地点指向现实数据的寄存地点。在0x42638c10前面偏移0xc字节生存了Uint32Array的巨细0x3f0,这个头巨细应该为16字节。PDF两重开释破绽CVE-2018-4990剖析对应的JavaScript剧本,个中a1[i1][249],a1[i1][250]的值在此时分别为0x0d0e0048和0x0d0f0048。PDF两重开释破绽CVE-2018-4990剖析PDF两重开释破绽CVE-2018-4990剖析
破绽调试
设置windbg为默许调试器,对AcroRd32.exe历程运用敕令开启页堆”gflags /i AcroRd32.exe +ust +hpa”,附加AcroRd32.exe历程后运转poc文件,windbg将暂停到发作crach的处所。PDF两重开释破绽CVE-2018-4990剖析经由过程栈回溯能够看到开释的调用者是JP2KLib!JP2KCopyRect+0xbad6,证实破绽很可能在该模块内里。在该模块内里又调用了HeapFree函数,许多是开释空间激发的非常。PDF两重开释破绽CVE-2018-4990剖析对应的代码为以下代码片断。PDF两重开释破绽CVE-2018-4990剖析该片断F5的代码以下。PDF两重开释破绽CVE-2018-4990剖析经由过程对症结局部举行整顿后以下代码,能够看到这个代码从基地点轮回并运用变量count作为余暇内存的计数器,变量mem_base是在此轮回中最先的内存地点。能够设置断点来监控mem_base,max_count和count的值。PDF两重开释破绽CVE-2018-4990剖析能够经由过程以下断点来监控mem_base,max_count和count值的转变。能够看到mem_base的地点为0x47560c08,max_count的值为0xff。能够看到在count为0xfd的时刻开释了0xd0d0d0d0的地点。

某shop API接口前台注入(通杀3.X)

0x01 前言 TPshop是国内应用范围大、覆盖面广的电商软件产品,基于此,历经5年的时间,而发展成为国内先进的具备成熟且标准化的电商平台技术解决方案提供商。“TPshop” 的每一次新产品发布都引带头中国电商软件研发领域的潮流,持续为中国电子商务服务行业。同时公司建立了由多名科学家构成的行业及技术研究中心,对电商行业发展趋势、软件产品架构、技术性、新技术应用与创新等都做出了卓越贡献。 代码来源: http://www.tp-shop.cn/download/ 0x02 分析 跟踪到/application/home/controller/Api.php控制器中的shop方法: 流程分析: 379~384 Line: 获取外部输入并赋值给变量
385~387 Line: $province_id、$province_id、$district_id判断以上三个遍历是否为空,若成立返回空的json
388 Line: 将$province_id、$city_id、$district_id放入$where数组中以供SQL查询
389 Line: 定义变量$field并赋值为*
390 Line: 定义变量$order并赋值为shop_id desc
391 Line: 判断变量$longitude是否为真
392 Line: 将$longitude、$latitude拼接到SQL语句中并赋值到$field中
393 Line: 将$order赋值为distance ASC
395 Line: 判断$shop_address是否为真
396 Line: 将$shop_address放入$wher

bp JP2KLib!JP2KCopyRect+0xbaea "dd eax+4 l1; g;"// max_count
bp JP2KLib!JP2KCopyRect+0xbac9 "r eax; r ecx; g;"// eax = mem_base,ecx = count
bp JP2KLib!JP2KCopyRect+0xbad0 "r eax; g;"//free addr

PDF两重开释破绽CVE-2018-4990剖析再经由过程!heap -p -a 47560c08检察基地点0x47560c08的信息,能够看到运用的巨细为0x3f4,而while轮回能够接见到mem_base ~ mem_base+3fc(4*0xff)区间的内存。二者的差值为8个字节3fc – 3f4 = 8,因而能够借助上述while轮回越界接见两个4字节地点并开释,来完成恣意开释两个地点。攻击者能够经由过程内存构造(比方堆放射)供应的恣意两个4字节地点,并完成恣意开释。PDF两重开释破绽CVE-2018-4990剖析夙昔面的代码晓得攻击者在破绽触发前应用经心掌握巨细(0x400)的堆放射组织大批对象,然后开释个中的一半,借助堆分派算法,JP2Klib在请求破绽对象时,会从a1开释的堆块内里直接复用一个。JP2Klib开释对象时会触发破绽多开释2个4字节的地点,在特别的组织下开释的地点正好是0x0d0e0048和0x0d0f0048,而这两个地点在堆喷下会被sprayarr请求运用,在触发破绽的情况下两个地点被开释后兼并巨细正好是0x20000,在随后攻击者经由过程以下代码马上将上述兼并的堆块从新运用。PDF两重开释破绽CVE-2018-4990剖析这段代码会从两重开释的内存空间中收受接管已开释的内存。而且因为内存较大(因为之前的兼并),以是须要分派比本来大一倍的空间。在sprayarr2被分派为0x20000-24巨细的空间后,因为堆的特征sprayarr中之前被开释的elment的长度就会被修正为0x20000。在此以后,攻击者已收受接管了开释的内存,他们接下来须要找出sprayarr中的哪一个ArrayBuffer的巨细增加了一倍。PDF两重开释破绽CVE-2018-4990剖析接着攻击者查找所需的ArrayBuffer以后应用长度为0x20000-24的ArrayBuffer的读写能力去改写对应ArrayBuffer对象的长度,将其改写为0x66666666。然后应用之前组织的sprayarr数组找到长度为0x66666666的“ArrayBuffer”对象,紧接着将其赋值给一个DataView对象借助DataView来完成恣意地点读写。PDF两重开释破绽CVE-2018-4990剖析


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明PDF两重开释破绽CVE-2018-4990剖析
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址