背景

CVE-2021-40444为微软MHTML远程命令执行漏洞,攻击者可通过传播Microsoft Office文档,诱导目标点击文档从而在目标机器上执行任意代码。该漏洞最初的利用思路是使用下载cab并释放、加载inf文件的形式执行恶意代码。独立安全研究员Eduardo B.在github公开了一种新的“无CAB”的漏洞利用方法及其POC。公众号之前发布的研判文章中已对在野利用中出现的新的Cabless利用链以及RAR文件隐藏载荷的巧妙方法进行了分析。本篇将进一步探究该利用链的技术本质,并在复现攻击场景的前提下尝试对利用链进行改进。

基于URL Scheme的Cabless利用链

与基于cab的攻击方式一样,新攻击链依然需要在Office文档中插入恶意htmlfile OLE对象,当目标用户点击文档后会请求访问远程html页面,而html页面中通过ActiveX控件调用".wsf:../" URL Scheme链接,最终调用wcript.exe执行RAR中嵌入的wsf脚本。

'.wsf:../../../Downloads/?.wsf'

URL Scheme也叫URL protocol,它的作用是通过链接启动对应的本地程序,格式为[scheme]://[host]/[path]?[query]。文件后缀名可同样用作scheme,调用相关文件类型绑定的程序。’?[query]’的存在则可利用URL Scheme与程序在处理路径时不同的行为,达到忽略真实后缀名,绕过扩展名校验的目的。在之前的攻击链中曾使用”.cpl”链接调用系统rundll32.exe程序将inf文件作为cpl文件加载执行。

目前公开的配合RAR的Cabless利用链的POC有两个利用条件,一是猜测到WINRAR的存储位置,默认其位于用户目录的Downloads文件夹下,否则无法获取wsf脚本位置;二是明确wscript.exe运行的当前路径(例如Documents目录),否则无法构造正确的路径。下面将从不同的利用场景考虑,思考更灵活的URL Scheme构造方式。

基于不同利用场景的利用链改进

配合RAR的Cabless利用链在实际执行时有两种可能,用户直接在WinRAR中打开DOCX文件,以及先解压再打开,对这两条攻击路径进行分别的探究。

直接在WINRAR中打开DOCX文件

当用户直接在WINRAR中打开压缩包中的DOCX文件时的进程树如下:

WinRAR的当前路径为RAR文件所在文件夹。

Word的当前路径为C:\Users\user\Documents,RAR中的DOCX文件被释放到%TEMP%临时文件夹中。

wscript.exe被触发执行后的当前路径为WinRAR的路径(也就是压缩包所在的文件夹)。

".wsf:"被用于Url Scheme唤起wscript.exe,而在被唤起后又被当作普通目录名去解析。’.wsf:’后的两个’.’可替换为其他内容,不影响执行,但是如果去掉这两个字符会在参数传递给wscript.exe时吞掉一个“../”导致找不到文件。这是因为wscript.exe解析路径的时候会将“.wsf:aa”整体当作一个host看待,后面拼接“../”就抵消了这层目录关系,相当于当前目录。

基于以上测试可知,当DOCX文件在WinRAR中直接执行时虽然DOCX文件释放于临时目录,但wscript.exe的当前目录即是RAR文件所在的目录。由此我们可以构造此情况下100%可用的URL Scheme(直接从当前路径读取RAR文件):

'.wsf:aa/../exp.rar1?.wsf'

先解压DOCX文件再打开

这种情况其实更复杂,也是公开的POC针对的场景,对应进程树:

直接点击解压后的DOCX文件打开时,Word的当前路径为DOCX文件所在路径,wscript.exe的路径也将保持一致。

值得注意的是,在一些情况下Word会将当前路径设置为C:\Users\Document,这可能是公开POC中构造路径的依据。但无论当前路径是什么,攻击者都必须成功获取(猜测)到RAR所在的文件夹。

漏洞修复

微软在9月的补丁中已将MHTML中使用URL Scheme的问题修复,在ieframe.dll中加入了一个新的校验函数IsValidSchemeName:

该函数将对URL Scheme进行校验,诸如”.cpl”、“.wsf”这种以文件扩展名启动应用程序的方式由于以字符“.”开头无法通过该校验函数的判断。

总结

本文主要分析了CVE-2021-40444的Cabless利用链中存在的路径问题以及对之前技术研判内容进行补充。通过分析CVE-2021-40444新利用链,可以看到该漏洞的根本原因是Office文档可以通过MHTML协议请求访问远程HTML页面从而执行JavaScript代码,并最终通过Url Scheme启动本地应用程序执行投递的恶意代码,而中间投递恶意代码的方式是可以替换的。同时也给了作为初学者的笔者很多启发,在分析漏洞时需加入对根本问题的思考:在攻击链中哪些部分是必不可少的,哪些是可以替换的。必不可少的部分作为漏洞根本问题要更深入地分析,而可以替换的部分要尝试去挖掘可替换的新利用链。而对于防守方,把握漏洞本质与漏洞利用必经之路,方能以不变应万变彻底控制各种漏洞利用变体。

深入剖析CVE-2021-40444-Cabless利用链的更多相关文章

  1. FastJson反序列化漏洞利用的三个细节 - TemplatesImpl的利用链

    0. 前言 记录在FastJson反序列化RCE漏洞分析和利用时的一些细节问题. 1. TemplatesImpl的利用链 关于 parse 和 parseObject FastJson中的 pars ...

  2. 聚焦 2021 NGK 新加坡区块链技术峰会,探讨DeFi未来新生态!

    2021年1月31日14时,备受行业关注的"2021 NGK 新加坡区块链技术峰会"如期举行.本次峰会由NGK官方主办,以"DeFi"为主题,探讨了区块链技术革 ...

  3. 倒计时2天!2021 NGK新加坡区块链峰会与你不见不散!

    1月31日14时,NGK将于新加坡召开"2021 NGK新加坡区块链峰会",并将在全球开启同步直播.   据了解,本次峰会将汇聚全球二十多位顶尖区块链专家学者,与NGK灵石技术团队 ...

  4. commons-collections利用链学习总结

    目录 1 基础 ConstantTransformer InvokeTransformer ChainedTransformer LazyMap TiedMapEntry TransformingCo ...

  5. JDK原生反序列化利用链7u21

    前言 JDK 7u21以前只粗略的扫过一眼,一看使用了AnnotationInvocationHandler,就以为还是和 CC1 一样差不多的利用方式,但最近仔细看了下利用链发现事情并不简单- 7u ...

  6. fastjson反序列化-JdbcRowSetImpl利用链

    fastjson反序列化-JdbcRowSetImpl利用链 JdbcRowSetImpl利用链 fastjson反序列化JdbcRowSetImpl - Afant1 - 博客园 (cnblogs. ...

  7. Apache Common-collection 反序列化利用链解析--TransformedMap链

    Apache Common-collection 反序列化利用链解析 TransformedMap链 参考Java反序列化漏洞分析 - ssooking - 博客园 (cnblogs.com) poc ...

  8. TemplatesImpl利用链

    FastJson利用链 Fastjson的版本在1.2.22-1.2.24主要有两条链利用TemplatsImpl和JdbcRowSetImpl利用链先来学习TemplatsImpl利用链,这个与前面 ...

  9. Fastjson JdbcRowSetImpl利用链学习

    JdbcRowSetImpl 接着继续学习fastjson的第二条链JdbcRowSetImpl,主要是利用jndi注入达到的攻击,而且没有什么利用限制,而且其原理就是setter的自动调用,具体se ...

随机推荐

  1. 树莓派和荔枝派,局域网socket 通信

    在虚拟机上面实现了socket 之间的通信之后,突发奇想,想要实现树莓派和 荔枝派zero之间的通信. 1.直接将虚拟机下面的程序复制过来,重新编译并且运行.发现是没有办法进行通信的.客户端一直报错: ...

  2. 《剑指offer》面试题55 - II. 平衡二叉树

    问题描述 输入一棵二叉树的根节点,判断该树是不是平衡二叉树.如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 示例 1: 给定二叉树 [3,9,20,null,null, ...

  3. web刷题记录 极客大挑战2019Knife upload buy a flag

    极客2019Knife webshell就是以asp.php.jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理.服务器管理.权限管理等操作.使用方法简单,只需上传一个代码文件,通 ...

  4. 聊聊dubbo协议2

    本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star. 在<聊聊dubbo协议>中介绍了attachments在consumer和prov ...

  5. [开发笔记usbTOcan]需求获取与系统需求分析

    简介 一直一以来都是站在实现某个模块功能的角度去做软件开发,没有尝试过站在系统的层面去做开发.最近正好不忙,觉得是时候以系统工程师的视角,去开发一个完整的系统.接下来的几篇文章,我会记录一个USB转C ...

  6. Servlet Listener(监听器)

    监听器 Listener 是一个实现特定接口的 Java 程序,这个程序专门用于监听另一个 Java 对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即自动执行.监听器的相关概 ...

  7. Avoiding the Backup of Online Redo Logs

    Although it may seem that you should back up online redo logs along with the datafiles and control f ...

  8. Hello,find!

    Hello,find! 前言 余幼时,每至除夕,爆竹声声,如雷贯耳,醒于梦中,便知春节将至.与兄长二三人,执摔炮六七只, 玩耍于廷中.出门罢,廷中白雪覆于黄土之上.二三尺之外,见犬窝,余之爱犬趴于其中 ...

  9. git clone 命令

    感谢原文作者:寻芝彬 原文链接:https://www.jianshu.com/p/c992c799f2dd 描述 拷贝一个 Git 仓库到本地 实例 拷贝一个 Git 仓库到本地,本地目录名称与Gi ...

  10. 入门-Kubernetes概述 (一)

    1 Kubernetes是什么 Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S. K8S用于容器化应用程序的部署,扩展和管理. K8S提供了容 ...