CVE-2022-30190 (Follina) 漏洞的教育性概念验证。
教育性恶意软件开发、利用、分析与缓解
一份完整文档化的概念验证,展示了Follina漏洞——从社会工程学投递到利用、取证分析及补丁开发的全流程。
⚠️ 仅供教育用途。 本仓库中的所有活动仅在SLIIT的IE4012进攻性黑客战术与策略课程模块的隔离虚拟机实验室环境中进行。任何内容不得在受控实验室之外使用。请勿在真实系统或网络上进行测试。
CVE-2022-30190,绰号Follina,是微软支持诊断工具(MSDT)中的一个远程代码执行漏洞。它于2022年5月30日公开披露,CVSS评分为7.8(高危)。当受害者打开一个特制的Microsoft Office文档时,该漏洞即被触发——无需宏。该文档从一个攻击者控制的HTTP服务器获取一个HTML载荷,通过ms-msdt: URI协议处理程序调用,并通过PCWDiagnostic参数向系统传递任意命令。
SourceCode.zip/
├── PoC.py # 主利用脚本
├── patch.py # 缓解补丁脚本
├── Invoice_FS-2026-8821_OVERDUE.docx # 生成的恶意Word文档
└── doc/ # 从docx中提取的内部XML文件
├── word/
│ ├── document.xml # 主文档正文
│ └── _rels/
│ └── document.xml.rels # 指向攻击者服务器的外部OLE引用
└── [Content_Types].xml
诱饵是一封冒充名为FinanceSync的计费平台的钓鱼邮件,声称有未付发票。附件是一个受密码保护的ZIP压缩包(Invoice.zip),内含恶意Word文档。使用加密压缩包可以绕过大多数电子邮件网关扫描器,因为内容无法被检查。
Invoice_FS-2026-8821_OVERDUE.docx 并在8000端口启动一个HTTP服务器word/_rels/document.xml.rels 中包含一个指向 http://<attacker_ip>:8000/index.html 的外部OLE引用2026-03-25)。如果日期条件未满足,则不执行任何操作ms-msdt: URI被触发,其 PCWDiagnostic 参数包含一个 cmd.exe 命令WINWORD.EXE → msdt.exe → cmd.exe 执行并将 sys_cache.dat 写入 C:\Users\Public\ 作为被攻陷的证据patch.py 从Windows注册表中移除 ms-msdt URI协议处理程序,在URI解析阶段切断利用链,使攻击者控制的参数无法到达MSDT。
攻击机(Kali Linux)
受害机(Windows 10)
HKEY_CLASSES_ROOT 下存在 ms-msdt 键2026-03-25 或之后# 在攻击机上运行
python3 PoC.py
该脚本生成Word文档并启动HTTP服务器。将文档传输到受害虚拟机并打开。攻击机终端将记录Word发来的传入请求。
补丁脚本必须在Windows受害虚拟机上以管理员身份运行。
# 检查当前状态
python patch.py --status
# 应用补丁(移除ms-msdt注册表键)
python patch.py --apply
# 回滚到脆弱状态(用于重新测试)
python patch.py --rollback
| 机器 | 角色 | IP地址 |
|---|---|---|
| Kali Linux VM | 攻击机 - 运行PoC.py | 192.168.56.10 |
| Windows 10 VM | 受害机 - 打开文档 | 192.168.56.20 |
两台虚拟机通过VirtualBox仅主机网络连接,无互联网访问。
| 字段 | 详情 |
|---|
| CVE ID | CVE-2022-30190 |
| 通用名称 | Follina |
| CVSS 评分 | 7.8(高危) |
| CVSS 向量 | AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
| 受影响组件 | 微软支持诊断工具(MSDT) |
| 受影响版本 | Windows 7 - 11 / Server 2008 R2 - 2022 |
| 披露日期 | 2022年5月30日 |
| 官方补丁 | KB5014697(2022年6月补丁星期二) |
| 测试项 | 打补丁前 | 打补丁后 |
|---|
| ms-msdt注册表键是否存在 | 是(脆弱) | 否(已缓解) |
| Word发起的HTTP请求 | 是 | 是(未改变) |
| msdt.exe被启动 | 是 | 否 |
| cmd.exe被启动 | 是 | 否 |
| sys_cache.dat被创建 | 是 | 否 |
| 利用是否成功 | 是 | 否 |