*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。
一、前言
CVE-2017-11826 据说是 360 在 2017 年 9 月底发现的一个关于 XML 格式解析的一个漏洞,之后微软在 10 月份发布了关于 CVE-2017-11826 的补丁。该漏洞的成因是由于在解析闭合元素时,没有对元素的完整性做出判断,导致将当前元素的嵌套关系加上 1。这样的话 wwlib 模块在处理闭合标签时,会错误的使用父级元素 w:name 属性 +44 的地址进行虚函数调用,攻击者通过修改 w:name 属性,就可以进行任意地址调用。
受影响的 Office 版本。
二、调试环境
操作系统:Windows 7 + VMware
调试工具:x64dbg
漏洞样本:POC
补丁地址:https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11826
三、调试分析
从 GitHub 上下载关于 CVE-2017-11826 漏洞的文件夹,解压后发现包括解压过的 docx 文件、README 文件、俄文文档,俄文文档没有仔细看,好像是关于漏洞利用的。
包含漏洞的 XML 文件为 document.xml,文件在 `word` 路径下。打开 document.xml 文件,分析后发现 标签使用了 标签进行闭合,而 标签的 w:name 属性有点奇怪,可能是用于控制某一个地址的值。
将解压过的 docx文档重新压缩,之后使用注册表附加调试器准备调试。
附加完成之后打开含有漏洞的文档,运行后触发异常,其中 call [ecx+4] 指令是利用虚函数表调用虚函数,而 ecx 为虚函数表指针,通过 wwlib.41249DA0 函数返回。
查看堆栈调用,发现用于处理 XML 格式的 msxml 模块,msxml 模块通过间接调用 wwlib 模块去协助解析 XML 格式。暂且将 wwlib.3161309E 函数定为漏洞函数。
对漏洞函数下记录断点后查看日志内容,发现漏洞函数被调用了 6 次,结合 document.xml 文件中的标签元素分析漏洞函数很有可能是用于解析元素标签的,至于解析的是什么,目前还不清楚。
选取最后一次调用漏洞函数的 esp 下条件断点,分析漏洞函数处理流程。
函数断下后从传入的参数可以发现,esi 可能是储存标签信息的数据结构。
单步进入该函数,在如图所示的位置会取出元素的嵌套关系,此时 标签已经插到了 标签的后面(以 “:” 符号为分隔符)。而 标签在未闭合的情况插入了 标签,说明嵌套关系已经被错误的解析。
调试到 0×31613084 地址时发现会调用 wwlib.31249DA0 函数,经过分析后发现该函数的返回值和异常处的虚函数表调用有关,所以进入这个函数看看。
通过分析发现该函数对 ecx 和 edx 做了一些简单的计算,算法为[[ecx]+8]*edx + [[ecx]+C] + [ecx],计算结果为 0x0751D140;而 ecx 是由 esi 传入,edx 又等于[[esi]],所以算法变为[[esi]+8]*([[esi]]-2) + [[esi]+C] + [esi],由传入的 esi 控制,经过后面的分析可以得出[[esi]]其实就是当前元素的嵌套等级。
调用完 wwlib.31249DA0 后会将[[0x0751D140+44]+44]地址的值作为虚函数表指针进行虚函数调用,进而触发异常。如图所示可以看出[0x0751D140+44]地址被覆盖成了 元素的 w:name 属性,所以攻击者通过修改 标签的 w:name 属性就可以做到调用任意地址。
接下来更改样本中的 document.xml 文件,手动添加 闭合标签,看看是否会触发异常。
在漏洞函数处断下,这时的嵌套等级为 5。
之后通过 wwlib.31249DA0 计算虚函数调用地址为 0x075098F4。由于嵌套等级为 5,所以计算出的结果为 F4(4C*(5 – 2) + 10),之前的为 140(4C*(6 – 2) + 10)。由于嵌套等级由 5 变为 6,导致计算结果出现偏差。
虚函数调用后程序并没有触发异常。
四、分析 msxml 模块处理步骤
为了快速了解 msxml 模块的处理流程,对调用堆栈中的所有 msxml 模块函数下记录断点,查看日志。
从日志中可以发现漏洞函数的调用都是通过 sub_78887830 函数中的 call [ebx+200] 的指令实现的,但是倒数第二个漏洞函数的调用却没有经过 call [ebx+200] 而是直接跳到了 MSO 模块。
对倒数第二个漏洞函数下断点。断下后分析堆栈调用,发现 msxml.78887830 函数中的 call [ecx+20] 的指令也会调用漏洞函数。
这样的话函数调用流程图就能分析出来了,函数调用流程如下图所示:
下面根据 msxml.78887830 函数的最后一次调用,简单分析 call [ebx+200] 下的函数链调用。
在 msxml.78887830 函数开头会将元素标签对象储存在 ebx 中,元素标签对象储存当前解析元素的信息,主要是元素的嵌套关系,嵌套等级等。
向下调试后发现 msxml.788872F7 函数会获取 元素的 w:name 属性字符的指针。
而下面的 msxml.78887335 函数会获取 o:idmap 元素字符的指针
获取完 o:idmap 元素字符的指针后,调用 msxml.788872F7 函数解析 o:idmap 元素,在内存窗口可以看出字符指针已经指向了 incer 的位置,说明已经把 idmap 标签解析出来了。
之后调用 msxml.788873F0 计算元素的嵌套等级,可以看出元素的嵌套等级计算出为 6,但此时元素的嵌套等级依旧是 5,还没有更新为 6。
在将 [ebx+1e8] 赋值给 eax 之后,发生了跳转,从而跳过了 call [ecx+20] 的调用转而进行 call [ebx+200] 的调用。
调用的函数为 mso.32751CAA,其实 MSO 模块的函数调用没有太大的作用,只是给后面 wwlib 模块的做间接处理。
到达 0x32751D5C 的位置后执行 call [ecx+20] 指令调用 sub_3277FAC0 函数,此时 esi = [esi+60]。
接着 sub_3277FAC0 函数中会执行 call [eax+10] 指令调用 wwlib.3127D3FB。
进入 wwlib.3127D3FB 函数之后继续向下调试,此时 [[esi+b14]] 的地址中储存着元素的嵌套关系。
之后调用完 wwlib.3127E6B3 函数后会进行一个判断,如果 ebx 等于 0×80004001 就跳转。
跳转完成之后调用漏洞函数,下面的流程刚刚已经分析过了。
根据上面调试分析的结果对其中几个位置下记录断点。查看日志可以发现 msxml.78887830 函数会逐一对元素进行解析,当解析到 标签时嵌套关系为 5。
但是在异常处嵌套关系为 6,对最后一次调用 msxml.78887830 函数下断点,查看嵌套关系是何时变为 6 的。
重新运行后断下,此时嵌套关系为 5。
当调试到 wwlib.3127D3FB 函数中的 0x3128E3AD 位置时,嵌套等级变为了 6,说明 wwlib.312C6142 函数更新了嵌套等级。
接着分析一下 w:name 属性是何时被复制的。通过对漏洞异常处的分析发现 w:name 属性储存在元素对象中,通过对元素对象储存 w:name 位置下写入断点发现在 WWLIB.sub_3127D3FB 函数中会调用 wwlib.3127E773 函数复制 w:name 到元素对象当中,之后漏洞函数中会把 w:name 属性取出来进行虚函数表调用。
需要注意的是再上面的分析中该跳转并没有实现,也就是说这里在复制完 w:name 属性之后直接返回了。而判断跳转的值是由 wwlib.3127E6B3 返回的,进入该函数,分析后发现在函数末尾处会将 0×80004001 赋值给 eax,在这之前会以 0x3149BFA3 作为基址,以 eax * 4 做为偏移地址进行调用,而 eax 是通过 [ebp-1c] 传进来的,对该位置下记录断点后查看日志。
根据日志可以发现当 [ebp+1c] 的值为 0xFFFF 时才会调用漏洞函数。而且解析 标签前调用一次,解析 标签后调用一次。
之后把 标签删除,再对比日志信息。
可以发现只有在 标签解析前才会将此值设置为 0xFFFF,所以这一个值可能是用于判断元素是否闭合。
最后总结得出 msxml.78887830 处理标签元素的流程。当 msxml.78887830 函数解析到 标签时,会误以为标签已经闭合(跳转值:0xFFFF),从而将 标签插入到 标签后,接着会把 标签的 w:name 属性(假如有的话)添加到对象之中,同时更新元素的嵌套关系(嵌套关系变为 6),导致最后使用 call [ecx+4] 进行虚函数表调用时虚表指针被错误的覆盖成了 w:name 属性中的数据触发了异常。
一些关键的数据及函数调用。
关于 CVE-2017-11826 的漏洞分析到此结束,由于是第一次分析类型混淆漏洞并且在写这篇文章前已经分析了一遍,所以有些地方不是很详细,可也能有一些错误。
*本文作者:护花使者cxy,转载请注明来自FreeBuf.COM
相关下载 |
FLASHPOINT作为国外的CSGO联赛品牌,在本赛季曾经大放厥词,表示要和ESL还有Blast等老牌CSGO主办方竞争联赛权。当然,FLASHPOINT的CEO还有一些相关负责人也是站了出详情>>
虽然许多游戏业内人士认为游戏全数字化的未来是不可避免的,但实体版相对于数字版有一些不容置疑的优势。 其中最大的一个,当然是对购买的游戏有一定详情>>
“地下城与勇士之小狐狸君爱谈游戏电竞”第一千一百七十一期《DNF2.06维护公告“亮了”:36个BUG同时修复,不愧是漏洞城与鬼剑》,国服2.06维护公告已经详情>>
【导读】不久前我们曾经报道了《辐射76》出现漏洞,黑客可盗窃玩家游戏库存物品的新闻,而现在B社终于就此事作出了回应,一起来看看吧!--> 详情>>
近日Reddit的一名用户发现可以通过漏洞探索《使命召唤:现代战争》疑似吃鸡模式的地图。 据其测试,需要在地图Vacant进行单人比赛,开始游戏后,使用详情>>
近日Reddit的一名用户发现可以通过漏洞探索《使命召唤:现代战争》疑似吃鸡模式的地图。 据其测试,需要在地图Vacant进行单人比赛,开始游戏后,使用观赛功能并调整镜头在区域中详情>>
原标题:火影博人传:为了凑够一集的时长,剧情漏洞百出,毫无逻辑 日本动漫火影忍者《博人传》动画“穿越篇”还有一集便结束了,在135集中,虽然大筒木浦式详情>>
【导读】最近《暗黑破坏神3》外服官网论坛上出现了单人速刷150层大秘境的帖子,引发网友热议。--> 最近《暗黑破坏神3:夺魂之镰(Di详情>>
原标题:安卓爆漏洞,你的手机摄像头会被黑客盯上?最新系统版本或可避免 近日,以色列安全公司Checkmarx曝光其此前发现的安卓系统漏洞:部分应用程序可绕详情>>
原标题:华为正式推出手机漏洞悬赏计划 找出漏洞重金奖励 据Twitter知名博主Azeria消息,华为今日凌晨在慕尼黑举行了“秘密会议”,本次大会邀请了业详情>>
原标题:明星P图上瘾漏洞百出,跪服关晓彤的修图师 何洁参加某晚会的照片被曝光之后,起初其正常的体型原本并没有产生热议,直到生图被曝光之后,显然与P详情>>
原标题:续航差杀进程 iOS 13各种漏洞为何扎堆爆发? 旧病未愈又添新疾,这或许是iOS 13系统最贴切的写照。续航差、信号差、闪退等各种问题还没解决,iOS详情>>
pokerstars的操控系统非常便捷且人性化。沿袭PC版,Android版同样具备了聊天、托管、提示等选项,无论是与牌友交流,还是临时有事需暂离牌桌,或是一时间不知道如何出牌,都可以利详情>>
原标题:国内首家开源漏洞平台360BugCloud,上线首周收录漏洞超300个 全球几十亿的设备都基于某种开源软件而开发,一旦某个通用型开源漏洞被利用来攻破详情>>
原标题:Struts2基于OGNL的RCE漏洞全解析 引言 最近两年ST2-OGNL方面的漏洞已经渐渐淡出大家的视线,但我觉得作为曾经红极一时的经典系列RCE漏洞,对详情>>
中国青年报10月23日消息,微商朋友圈里“让人一天瘦一斤”的古方减肥药“燃脂减肥胶囊”,被警方认定是无国药准字号、无药监局批文的假药。经权威部门检测,其中竟还含有对人体有详情>>
原标题:网红减肥药含违禁成分 微商卖假药凸显市场监管漏洞 微商卖假药凸显市场监管漏洞 微商朋友圈里“让人一天瘦一斤”的古方减肥药“燃脂减肥胶详情>>
原标题:Alexa和Google Home曝重大漏洞,黑客可监听并窃取密码 智东西(公众号:zhidxcom) 编 | 云鹏 导语:你的智能语音助手,可能会成为窃听和网络钓鱼的工详情>>
根据ZDNet报道,Google旗下安全团队Project Zero的两名成员日前公布了影响iOS系统的6个“无交互”安全漏洞中其中5个的详细信息和演示用攻击代码,这些漏洞可通过详情>>
苹果第三财季业绩超预期 第四财季业绩展望良好 苹果对外公布2019年第三财季业绩,苹果第三财季营收114.6亿美元,同比增长12.6%。据悉,苹果第三财季业绩已超出华尔街预期,详情>>
今日,谷歌旗下安全团队Project Zero的两名成员日前公布了影响iOS系统的6个安全漏洞中其中5个的详细信息和演示用攻击代码。不过近日更新的 iOS 12.4 版本已经修复了这些漏详情>>
网易新游《隐世录》自从首测以来,东方唯美幻想与代码电子乱流风格并存的场景特点、围绕“BUG”展开的独特世界观等,始终是玩家关注的焦点。 《隐世录》手游中,隐世究竟隐详情>>
原标题:EA:已修复影响3亿玩家的Origin游戏服务漏洞 IT之家6月30日消息 不久前,安全研究人员发现了来自Electronic Arts(EA)的Origin游戏平台中的漏洞,这些漏洞本可以详情>>
原标题:[视频]EA宣布已修复影响3亿玩家的Origin游戏服务漏洞 EA已经修复了此前Origin游戏服务上曝光的一系列安全问题,攻击者可以利用这些漏洞控制用户账户并获取详情>>
微信海盗来了能量漏洞BUG于最近被玩家们所发现,一些小伙伴对能量漏洞这个小BUG还不是很了解!下面是游戏鸟小编为大家带来的能量漏洞BUG详细解析! 能量漏洞BUG详解: 1、详情>>
原标题:DOTA2:核桃解说Major比赛,漏洞百出,玩家求他练练普通话 最近Major比赛正在火热进行中,而本次比赛由于直播版权问题,使得很多经验丰富的主播解说不了这次的震中详情>>
office办公软件相信,无论你是上班族还是学生学习,都会或多或少的使用到该软件,是软件就会有漏洞,这里小生说一下远程代码执行漏洞补丁如何下载?攻略对象互联网步骤分解1百度搜索:详情>>
Game234问答中心有网友提出了一个比较有代表性的问题【补天漏洞平台跟360是什么关系】,小编觉得可能对其他网友也有帮助,所以将此问答整理出来了,希望对您有帮助。小编为您搜罗的答案1腾讯电脑管家主要详情>>
游戏类型:数据恢复文件大小:49.65MB软件语言:简体中文运营:未知软件授权:免费版应用平台:WinXP/Vista/Win7/Win8/Win8.1/Win10安全认证:川师IT之家系统优化详情>>
然后找到会员使用权限开通状态这栏,DEDE默认选择是0也就是注册会员就能发布文章。...功能简单,正因如此,很多需要专业企业官网的用户使用一段时间后就不得不选择更为... 详情>>
?据外媒MSPowerUser援引BGR消息报道,谷歌最近披露了Android系统的一项新的漏洞,通过这项漏洞,黑客可以引诱你打开一个特制的.PNG格式的图片文件,然后借助此侵入你的设备,运行Andr详情>>
和其他操作系统一样,OS X和iOS的应用程序运行于沙盒中,操作系统严格限制应用程序的权限和程序间的访问,以确... 详情>>
《天天酷跑》是一款卡通风格的跑酷手游,不少玩家想要进一步了解关于黄金卡池bug的相关情报。天天酷跑黄金卷漏洞是什么详情>>
Bethesda在本周《辐射76》最新补丁中修复了一个名为“喂饱人民(FeedThePeople)”的公共任务Bug,但这又引起了玩家的不满,因为此前只要有详情>>
对于Windows 8.1系统,微软寄予了很高的期望,不过,新系统虽好,但是近来越来越多的玩家曝光其运行游戏时会有很多漏洞,主要是一些鼠标的失灵等。日前,微软正式表态说... 详情>>
原标题:B社漏洞百出《辐射76》帆布包退换曝隐私问题《辐射76》发售以来风波不断,此前闹得沸沸扬扬的“尼龙袋毛冒充帆布包”事件也让B社压力巨大,最终提出同意为玩家详情>>