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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2021-40444 | Kitploit
工具/GitHubGitHub/tiagob0b/cve-2021-40444
Payload生成漏洞利用Web应用程序漏洞利用渗透测试Shellcode 生成二进制利用
GitHubtiagob0b/cve-2021-40444

CVE-2021-40444

查看仓库
4年前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

完全武器化的 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 文件的 object,以及一个指向 INF 文件的 iframe, 并使用 ".cpl:" 指令作为前缀
  5. 打开 cab 文件,INF 文件被存储在 %TEMP%\Low 目录中
  6. 由于 CAB 中存在路径遍历(ZipSlip)漏洞,可以将 INF 存储在 %TEMP% 中
  7. 然后,使用 ".cpl:" 指令打开 INF 文件,从而通过 rundll32 侧加载 INF 文件 (如果它是一个 DLL)

容易被忽略的要求

要让这个漏洞利用正常工作,有很多容易被忽略的要求,这导致即使是优秀的 PoC(例如 lockedbyte 的这个)也无法正常工作。

也许没有人明确“公开”这些细节,是为了避免该漏洞被更多人利用。但现在补丁已经发布,公开这些细节应该不会造成太大麻烦。

HTML 文件

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

CAB 文件

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

  • filename.inf 应变为 ../filename.inf
  • filename.inf 应该正好是 <12-char>.inf 并非完全正确,关键是要修改 coffCabStart
  • CFFOLDER.typeCompress 应为 0(未压缩)
  • CFFOLDER.coffCabStart 应增加 3(因为添加了 '../')
  • CFFOLDER.cCfData 应为 2
  • CFFILE.cbFile 应大于整个 CFHEADER.cbCabinet
  • CFDATA.csum 应重新计算(或清零) [可选]

这些约束背后的原因很多,我没有花足够的时间去深入理解全部,但让我们看看最重要的几点:

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

使用

生成器使用起来很简单,尽管它已经用多种不同的载荷和 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 

注意:端口由 URL 确定,漏洞利用文件根据载荷文件的扩展名生成

  • 生成使用 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 提供了很酷的无 CAB 版本的漏洞利用
下载工具
攻击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