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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2021-40444 — CVE-2021-40444 - 完全武器化的 Microsoft Office Word 远程代码执行漏洞利用 | Kitploit
工具/GitHubGitHub/klezvirus/cve-2021-40444
Payload生成漏洞分析漏洞利用Web应用程序漏洞利用恶意软件分析命令与控制学习与教育
GitHubklezvirus/cve-2021-40444

CVE-2021-40444

CVE-2021-40444 - 完全武器化的 Microsoft Office Word 远程代码执行漏洞利用

查看仓库
832164222年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

完全武器化的 CVE-2021-40444

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

2022年5月31日更新 - CVE-2022-30190 - Follina

现在生成器能够生成同时利用“Follina”攻击(利用 ms-msdt)所需的文档。

背景

虽然互联网上已有许多 PoC,但我决定亲自尝试将此漏洞武器化,因为我发现已有的资料缺乏值得分享的有价值信息,同时考虑到微软已为此漏洞发布了补丁。

到目前为止,我所看到的创建完整可工作生成器的唯一有价值资源是:

  • Ret2Pwn 的博客
  • j00sean 的推文
  • wdormann 的推文

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

攻击链

  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)

被忽视的要求

要使此漏洞生效,有不少被忽视的要求,这导致即使是一些不错的 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 被压缩,在对象文件中打开它以触发 INF 写入的技巧将失败 错误,我成功用 MSZIP 压缩示例实现了相同结果
  • CoffCabStart:CoffCabStart 给出了第一个 CFDATA 结构的绝对位置,由于我们添加了 '../',需要将其增加 3 以指向文件(这更像是一个猜测)
  • cCfData:由于只有一个文件,我们应该只有 1 个 CFDATA,我不太确定为什么必须将其设置为 2 确实,我们可以将其保留为 1
  • cbFile:有趣的是,如果 CAB 提取没有错误地完成,INF 文件将被 WORD 标记为删除,从而破坏攻击。防止此问题的唯一方法是让 WORD 认为提取失败。如果 cbFile 值定义为大于 cabinet 文件本身,则提取器在读取完 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 smuggling 可能是利用该漏洞的一种可能场景。

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

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

请注意,使用此技术时,攻击链略有不同。此攻击要求用户下载一个特制的 RAR 文件,该文件通过将有效的 WSF 脚本和有效的 RAR 文件链接在一起获得。一旦打开,RAR 将包含一个引用 HTML 的 DOCX,而后者又会尝试将 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 中点击“保存”才能下载文件

3并非在所有 Windows/MS Word 版本上真正有效

CAB 文件解析器

工具 cab_parser.py 可用于查看 exploit 文件的头部,但不要将其视为一个完整的解析器。这是一个我为了解情况而开发的非常快速且粗糙的 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

示例

  • 生成原始 exploit 并在本地测试
root@kitploit:~
python generator.py -u http://127.0.0.1 -P test\calc.dll --host 

注意:端口由 URL 选定,exploit 根据 payload 文件扩展名生成

  • 生成带 RAR 的 CABless exploit 并通过 IE 在本地测试
root@kitploit:~
python generator.py -u http://127.0.0.1 -P test\job-jscript.wsf --no-cab --host -t 
  • 生成带 HTML smuggling 的 CABless exploit(仅 IE)并通过 IE 在本地测试
root@kitploit:~
python generator.py -u http://127.0.0.1 -P test\calc.js --no-cab --host -t 
  • 生成利用 MS-MSDT 的 CABless exploit(Follina 攻击),同时生成 DOCX 和 RTF 文档
root@kitploit:~
python generator.py -u http://127.0.0.1 -P test\calc.ps1 --no-cab --host --convert

致谢

  • RET2_pwn 提供了精彩的博客
  • j00sean 提供了很好的提示
  • lockedbyte 提供了第一个像样的 PoC
  • Max_Mal 提供了关于替代 URI 方案的提示
  • wdormann 提供了关于 HTML 文件大小限制的提示
  • Edu_Braun_0day 提供了很酷的 CABless 版本 exploit
  • Kevin Beaumont 对 CVE-2022-30190(Follina)的研究
下载工具
攻击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 smugglingcabless-smuggling-*IEHTMLJS/VBS是2
Follina 攻击cabless-msdt-*WORDDOCX/RTFMSDT + PS是3