Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2021-40444 — Microsoft-Office-Word-MSHTML-Remote-Code-Execution-Exploit | Kitploit
工具/GitHubGitHub/mracumen/cve-2021-40444
Payload生成漏洞利用Web应用程序漏洞利用恶意软件分析二进制分析Shellcode 生成
GitHubmracumen/cve-2021-40444

CVE-2021-40444

Microsoft-Office-Word-MSHTML-Remote-Code-Execution-Exploit

查看仓库
214年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

完全武器化的CVE-2021-40444

用于利用CVE-2021-40444(Microsoft Office Word远程代码执行)的恶意docx生成器,可与任意DLL文件配合使用。

背景

尽管互联网上已经有许多PoC,我决定自己尝试武器化这个漏洞,因为我能找到的现有资料缺乏值得分享的有价值信息,同时考虑到微软已经发布了该漏洞的补丁。

到目前为止,我看到的用于创建功能完整的生成器的唯一有价值资源是:

  • Ret2Pwn的博客
  • j00sean的推文

上述资源概述了创建完整攻击链所需的许多要求。为避免重复太多不必要的信息,我只总结相关细节。

攻击链

  1. 打开Docx文件
  2. 存储在document.xml.rels中的关系指向恶意HTML
  3. 启动IE预览以打开HTML链接
  4. HTML中的JScript包含指向CAB文件的对象,以及指向INF文件的iframe,并以“.cpl:”指令为前缀
  5. 打开cab文件,INF文件存储在%TEMP%\Low目录中
  6. 由于CAB中的路径遍历(ZipSlip)漏洞,可以将INF存储在%TEMP%中
  7. 然后,使用“.cpl:”指令打开INF文件,导致通过rundll32侧加载INF文件(如果这是一个DLL)

被忽视的要求

这个漏洞利用有很多被忽视的要求,甚至导致像lockedbyte的PoC这样的优秀PoC无法正常工作。

也许没有人明确“公开”这些细节,以避免漏洞被更多地利用。但现在它已经被修补了,所以公开细节应该不会造成太多麻烦。

HTML文件

根据Will Dormann的这条推文,HTML的大小至少应为4096字节,才能触发MS Word中的“预览”。

CAB文件

CAB文件需要进行字节修补,以避免提取错误并实现ZipSlip:

  • filename.inf 应变为 ../filename.inf
  • filename.inf 应该恰好是<12字符>.inf 实际上不是这样,重要的是修改 coffCabStart
  • CFFOLDER.typeCompress 应该为0(未压缩)
  • CFFOLDER.coffCabStart 应该增加3(因为添加了 '../')
  • CFFOLDER.cCfData 应该为2
  • CFFILE.cbFile 应大于整个 CFHEADER.cbCabinet
  • CFDATA.csum 应重新计算(或清零) [可选]

这些约束的原因很多,我没有花足够的时间深入理解所有原因,但让我们看看最重要的:

  • TypeCompress: 如果CAB被压缩,在对象文件中打开它触发INF写入的技巧将失败 错误,我用MSZIP压缩样本实现了相同的结果
  • CoffCabStart: CoffCabStart给出了第一个CFDATA结构的绝对位置,由于我们添加了'../',需要将其增加3以指向文件(这更像是一个猜测)
  • cCfData: 因为只有1个文件,我们应该只有1个CFDATA,我不太确定为什么必须设置为2 实际上,我们可以保留为1
  • cbFile: 有趣的是,如果CAB提取没有任何错误地完成,INF文件将被WORD标记为删除,破坏漏洞利用。防止这种情况的唯一方法是让WORD认为提取失败。如果将cbFile值定义为大于cabinet文件本身,则提取器将在读取cbFile定义的所有字节之前到达EOF,引发提取错误。
  • [可选] MS Word似乎不检查此值。无论如何,为了有一个正确的CAB,csum值应该重新计算。幸运的是,正如j00sean指出的,根据微软文档,此值可以为0

注意1: Defender现在通过使用_IMAGE_DOS_HEADER.e_magic值作为签名来检测CAB文件是否包含PE,从而可能避免PE文件嵌入到CAB中。这个签名能被绕过吗?我不确定,但如前所述,这是一个已修补的漏洞,所以我不打算在这个问题上投入更多时间。有兴趣的读者可以进一步研究。

注意2: 微软补丁阻止了任意URI方案,显然使用了黑名单方法(这只是一个假设)

DLL攻击

与CVE-2021-40444相关的主要攻击链是通过.cpl URI方案加载的DLL攻击。为了利用这一点,攻击者需要生成一个特制的DLL。如果你想测试一下,试试我的evildll-gen脚本。

JScript、VBScript、Javaw、MSIexec...

正如Max Maluin所指出的,可以利用IE和相关的基于文件扩展名的URI与多种文件类型进行交互。虽然这可能是利用IE的好方法,但它也有局限性。

实际上,应该注意的是,该漏洞利用中用于下载文件的方法基于ActiveX控件更新,不能用于下载任意文件。根据微软文档,codebase标签只能指向少数几种文件类型:OCX、INF和CAB。

即使我们可以直接下载OCX或INF文件,我们仍然不能确保文件下载到系统中的正确位置。通过cab漏洞利用,可以使用路径遍历将.inf文件移动到一个已知路径,但在其他情况下,文件将存储在随机目录中,使得几乎不可能引用它。

截至目前,我没有找到无需CAB文件就能链式下载和执行的方法。

注意:仅就IE而言,HTML走私可能是利用该漏洞的一种可能场景。

使用混合RAR文件的无CAB文件攻击

该技术最初由Eduardo Braun在Twitter上披露,并在这篇论文中进一步解释。

请注意,使用这种技术,攻击链略有不同。这种攻击要求用户下载一个特制的RAR文件,该文件通过连接一个有效的WSF脚本和一个有效的RAR文件获得。一旦打开,RAR将包含一个DOCX,其中包含对HTML的引用,而HTML又会尝试将RAR文件作为WSF脚本加载。

总结:

  1. 下载特制的RAR文件(可能在下载文件夹)
  2. 解压并打开DOCX
  3. 存储在document.xml.rels中的关系指向恶意HTML
  4. 启动IE预览以打开HTML链接
  5. HTML中的JScript包含一个指向RAR文件的脚本/iframe,并以“.wsf:” URI方案为前缀
  6. 由于RAR被设计为同时是一个有效的RAR和一个有效的WSF脚本,脚本被执行

该工具实现了哪些漏洞利用PoC

该生成器实用程序目前可以复现以下攻击:

1在某些环境中CAB无法正常下载

2用户需要在IE中点击“保存”才能下载文件

CAB文件解析器

工具cab_parser.py可用于查看漏洞利用文件的头部,但请不要将其视为一个完整的解析器。这是我为了了解情况而开发的一个非常简陋的CAB头部查看器。

安装

生成器设计用于Windows,因为它使用makecab实用程序。使用前,请确保安装所需依赖:

  • 使用Virtualenv
root@kitploit:~
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
  • 不使用Virtualenv
root@kitploit:~
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install -r requirements

用法

生成器使用起来很简单,尽管它已经用许多不同的payload和Windows版本进行了测试,但并非万无一失。我在不同的Windows版本中遇到了不同的行为。一旦我有更多细节可以分享,我会在这里发布。

root@kitploit:~
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

示例

  • 生成原始漏洞利用并在本地测试
root@kitploit:~
python generator.py -u http://127.0.0.1 -P test\calc.dll --host 
  • 生成带有RAR的CABless漏洞利用并通过IE在本地测试
root@kitploit:~
python generator.py -u http://127.0.0.1 -P test\job-jscript.wsf --no-cab --host -t 
  • 生成带有HTML走私的CABless漏洞利用(仅IE)并通过IE在本地测试
root@kitploit:~
python generator.py -u http://127.0.0.1 -P test\calc.js --no-cab --host -t 

致谢

  • RET2_pwn 提供的精彩博客
  • j00sean 提供的良好提示
  • lockedbyte 提供的第一个像样的PoC
  • Max_Mal 提供的关于替代URI方案的提示
  • wdormann 提供的关于HTML文件大小限制的提示
  • Edu_Braun_0day 提供的很酷的CABless版本漏洞利用
下载工具
攻击HTML模板目标递送方式执行方式是否有效
攻击的原始版本cab-orig-*WORDDOCXCAB + DLL是
j00sean仅IE攻击cab-orig-j00sanIEHTMLCAB + DLL是
我的无DLL版本cab-uri-*WORDDOCXCAB + JS/VBS否1
Eduardo B. 使用RAR的“CABless”攻击cabless-rar-*WORDRARWSF是
改进的j00sean攻击 + HTML走私cabless-smuggling-*IEHTMLJS/VBS是2