Matic539/roothunter
GitHub: Matic539/roothunter
一套面向 Linux 的权限提升审计套件,通过在目标主机收集证据并离线分析,自动匹配 CVE、构建链式攻击路径并按优先级输出可操作的提权命令。
Stars: 5 | Forks: 0
# 🔍 RootHunter






## ⚠️ 免责声明 / Disclaimer
## 📋 描述
**RootHunter** 是一款针对 Linux 系统的侧重攻击性视角的审计套件。它专为 Pentester、Red Team 和系统管理员设计,旨在先于攻击者发现并优先处理最容易被利用的权限提升向量。
该套件分为三层,各司其职:
- **`roothunter.sh`** — 证据收集。基于 Bash,无重度依赖,可直接在目标主机上执行。输出结构化的 JSON schema v2 报告(每个发现都包含 `type`、`severity` 及可解析的 `data`)。
- **`lib/gtfobins.py`** — 本地二进制文件提权技术库(SUID、sudo、capabilities),具备 3 级验证以及 `reliability/stealth/speed` 评分。
- **`rh-analyze`** — 基于证据的分析。使用 Python stdlib,可离线执行。读取 JSON 并生成:带有 `confidence` 的适用 CVE exploits、链式攻击路径、0–100 风险评分、按 tier 优先排序的精确命令、可复制粘贴的 playbook 模式,以及多次审计间的差异对比。
## 📁 项目结构
```
roothunter/
├── roothunter.sh # Recolección de evidencia (Bash)
├── rh-analyze # Análisis y priorización (Python)
├── lib/
│ ├── gtfobins.py # Base local de técnicas SUID/sudo/capabilities
│ └── suid_whitelist.py # Whitelist de SUID legítimos por distro
├── LICENSE
└── README.md
```
`gtfobins.py` 和 `suid_whitelist.py` 会在你执行 `rh-analyze` 或 `roothunter.sh -V` 时从 `lib/` 目录自动加载。无需安装或配置 PYTHONPATH —— 套件会自动发现脚本相对路径下的模块。
## 🧩 `roothunter.sh` 模块
| # | 模块 | 描述 |
|---|--------|-------------|
| 1 | sysinfo | 主机信息、glibc、容器检测 |
| 2 | suid | 结合 GTFOBins 交叉检查 SUID / SGID 二进制文件(`-xdev`,不跨文件系统) |
| 3 | sudo | sudo 配置,按规则解析的 NOPASSWD,特权组 |
| 4 | cron | 包含可写脚本的计划任务 |
| 5 | files | `/etc/passwd`、`/etc/shadow`、可读的 SSH 密钥、包含凭证的配置文件 |
| 6 | caps | 危险的 Linux capabilities(`cap_setuid`、`cap_sys_admin`、`cap_dac_read_search` 等) |
| 7 | kernel | ASLR、ptrace、kptr_restrict、symlinks、user namespaces + CVE 查询 |
| 8 | nfs | 带有 `no_root_squash` 的共享,不安全的 exports |
| 9 | history | bash、zsh、fish、python、mysql、psql 历史记录中的密码和机密信息 |
| 10 | services | 本地服务,暴露的接口,Docker socket |
| 11 | env | PATH 劫持,`LD_PRELOAD`,当前进程变量中的机密信息 |
| 12 | users | 具有相同 root 的重复 UID,无密码用户,交互式 shell |
| 13 | containers | Docker/LXC 逃逸,可写的 socket,共享的 namespaces,K8s token |
| 14 | cloud | AWS (IMDSv1/v2)、GCP 和 Azure 通过 metadata server 获取的凭证 |
| 15 | systemd | 可写的 units 和 timers,Polkit 规则,PwnKit (CVE-2021-4034) |
| 16 | pam | PAM 后门,非标准模块,`authorized_keys`,`sshd_config` |
| 17 | processes | 带有可写二进制文件的 root 进程,`/proc//environ` 中的机密信息,宽松的 unix sockets,其他用户的 `.bashrc`/`profile.d` |
## 🚀 `roothunter.sh` 用法
```
# Clonar
git clone https://github.com/Matic539/roothunter.git
cd roothunter
chmod +x roothunter.sh rh-analyze
# 基本执行(所有模块)
bash roothunter.sh
# 仅运行特定模块
bash roothunter.sh -m suid,sudo,kernel
# 为 rh-analyze 生成结构化 JSON
bash roothunter.sh -j reporte.json
# 带 GTFOBins / HackTricks 参考的详细模式
bash roothunter.sh -v
# 向量的选择性验证(opt-in,需要 lib/gtfobins.py + python3)
bash roothunter.sh -V -j reporte.json
# 典型的 pentest 组合
bash roothunter.sh -v -V -o reporte.txt -j reporte.json
```
### 选项
| Flag | 描述 |
|------|-------------|
| `-o ` | 保存纯文本报告(无 ANSI 颜色) |
| `-j ` | 导出 JSON schema v2 格式的报告(作为 `rh-analyze` 的输入) |
| `-m ` | 仅运行指定的模块,以逗号分隔 |
| `-v` | Verbose 模式:显示 GTFOBins/HackTricks 参考链接及额外详情 |
| `-V`, `--verify-vectors` | 使用 `lib/gtfobins.py` 验证 SUID/sudo/cap 向量的 precondition 和 capability。在 JSON 中标记为 `verified=true/false`。**不会执行 exploits**,仅进行非破坏性检查。 |
| `-h` | 帮助信息 |
### `-m` 可用的模块
```
sysinfo, suid, sudo, cron, files, caps, kernel, nfs,
history, services, env, users, containers, cloud, systemd, pam, processes
```
### 关于 `-V`(向量验证)
当模块检测到潜在向量时(例如:带有 SUID 的 `find`),默认只会记录其路径和所有者。使用 `-V` 参数后,工具会查询 `lib/gtfobins.py` 执行两项非破坏性检查:
- **precondition**:向量存在(例如:`stat` 显示 SUID 位已激活)。
- **capability**:二进制文件具备所需功能(例如:编译了 `+python3` 的 `vim`)。
生成的 JSON 中会为每个发现包含 `verified=true|false|unknown` 标记。`rh-analyze` 会将其显示为 `✓ VERIFICADO` 或 `✗ NO VIABLE`,从而为你节省追查误报的时间。
## 🧠 `rh-analyze` 用法
`rh-analyze` 读取 `roothunter.sh -j` 生成的 JSON 并进行攻击性分析。仅使用 Python 3.7+ 标准库 —— 无外部依赖。
```
# 标准分析(score + exploits + commands + paths + 摘要)
./rh-analyze reporte.json
# 按 tier 优先排序的确切命令(需要 schema v2 报告)
./rh-analyze reporte.json --commands
# Playbook 复制粘贴模式,无颜色或元数据(适合 .txt 笔记)
./rh-analyze reporte.json --playbook > playbook.sh
# 在目标主机上通过非破坏性 dry-runs 确认技术
./rh-analyze reporte.json --confirm
# 仅 score
./rh-analyze reporte.json --score
# 仅适用的 CVE exploits
./rh-analyze reporte.json --exploits
# 仅链接的 attack paths
./rh-analyze reporte.json --paths
# 比较两次审计
./rh-analyze --diff antes.json despues.json
# 按 score 对完整 flota 进行优先排序
./rh-analyze --batch /var/audits/*.json
# 本地数据库覆盖范围(已记录的 SUID/sudo/caps 二进制文件)
./rh-analyze --list-techniques
# 将分析导出为 Markdown
./rh-analyze reporte.json -o analisis.md
```
### 选项
| Flag | 描述 |
|------|-------------|
| `--score` | 风险评分及明细 |
| `--exploits` | 适用的 CVE,附带 PoC 和 `confidence` |
| `--commands` | 建议的精确命令,按 tier 分组(需要 schema v2) |
| `--playbook` | 仅按优先级排序输出命令,纯文本格式 |
| `--confirm` | 在当前主机上执行非破坏性的 dry-runs |
| `--paths` | 链式攻击路径 |
| `--diff OLD NEW` | 比较两份报告 |
| `--batch` | 批量处理多份报告并按 score 排序 |
| `--list-techniques` | 显示 `lib/gtfobins.py` 和 `lib/suid_whitelist.py` 的覆盖范围 |
| `-o ` | 将分析结果导出为 Markdown |
| `--no-color` | 禁用 ANSI 颜色(适用于管道和 CI 环境) |
### 🎯 检测内容
**建议的 CVE exploits** — 根据发现结果比对本地公开 CVE 库。每个 exploit 带有 `confidence`(high/medium/low)及上下文说明:
| CVE / Vector | 名称 | 严重程度 | 置信度 |
|--------------|--------|-----------|-----------|
| CVE-2021-3156 | Baron Samedit (sudo 堆溢出) | 严重 | high |
| CVE-2021-4034 | PwnKit (pkexec) | 严重 | high |
| CVE-2022-0847 | Dirty Pipe (内核) | 严重 | high |
| CVE-2023-22809 | Sudoedit 环境变量注入 | 严重 | high |
| CVE-2025-32463 | Sudo `--chroot` 路径解析 | 严重 | medium |
| CVE-2023-4911 | Looney Tunables (glibc) | 严重 | high |
| CVE-2024-1086 | nf_tables 双重释放 | 严重 | medium |
| CVE-2023-0386 | OverlayFS UID 映射 | 严重 | high |
| CVE-2023-32233 | Netfilter nf_tables UAF | 严重 | medium |
| CVE-2022-2588 | cls_route UAF | 高 | medium |
| CVE-2021-22555 | Netfilter 堆溢出 | 高 | medium |
| CVE-2025-6019 | libblockdev/udisks LPE | 高 | low |
| GTFOBins | `docker` 组 = 主机 root | 严重 | high |
| Container escape | 可写的 Docker socket | 严重 | high |
**按 tier 优先排序的精确命令** (`--commands`) — 每项可操作的技术均包含:
- `verify` — 确认 precondition 的命令
- `exploit` — 打开 shell 或提升权限的命令
- `why` — 单行解释说明
- `success` — 成功执行后的预期现象
- 评分公式:`reliability × 2 + stealth + speed`(范围 4–25)
| Tier | 得分 | 含义 |
|------|-------|-------------|
| 🟢 Tier 1 | 18–25 | 容易得手,优先尝试 |
| 🟡 Tier 2 | 12–17 | Tier 1 失败时的备选方案 |
| 🔴 Tier 3 | 4–11 | 最后手段(脆弱或动静较大) |
**链式攻击路径** — 通过组合多个发现构建提权路径:
- 可写的 Cron → 以 root 身份执行
- 危险的 SUID → 通过 GTFOBins 提权
- Sudo NOPASSWD → 立即获取 root shell
- PATH 劫持 + cron → 以 root 身份执行
- 漏洞内核/glibc → 本地提权 exploit
- 可读的 SSH 私钥 → 横向移动
- 可访问的 Kubernetes token → 集群内跳板
- 通过 IMDS 获取的 Cloud 凭证 → 账号内跳板
- `/proc//environ` 中的机密 → daemon 凭证窃取
- 可写的 root 二进制文件 → 进程重启时提权
- 可写的他人 `profile.d`/`.bashrc` → 登录时提权
- 可写的 unix socket (Redis/Docker/Postgres) → 根据 daemon 实现 RCE
**风险评分 (0–100)** — 综合计算严重发现和警告的数量,并辅以上下文加分(Docker 访问权限、sudo NOPASSWD、shadow 可读、无 token 的 IMDS、cloud 凭证、PAM 后门、`/proc` 中的机密、可写的 profile.d、宽松的 unix socket)。属于合法系统 SUID 的项(与 `lib/suid_whitelist.py` 匹配)会从严重项中被剔除。
| 分数 | 等级 |
|-------|-------|
| 70–100 | 🔴 危险 (CRÍTICO) |
| 40–69 | 🟡 高危 (ALTO) |
| 15–39 | 🔵 中危 (MEDIO) |
| 0–14 | 🟢 低危 (BAJO) |
## 🔄 推荐工作流
```
# 第 1 天:带向量验证的初步审计
bash roothunter.sh -V -j /tmp/host01.json
# 第 1 天:按 tier 优先排序命令的分析
./rh-analyze /tmp/host01.json --commands
# 第 1 天:通过非破坏性 dry-runs 确认 tier 1 技术
./rh-analyze /tmp/host01.json --confirm
# 第 1 天:在完整 flota 中审查优先级
./rh-analyze --batch /var/audits/*.json
# 第 7 天:应用补丁后,进行比较
bash roothunter.sh -V -j /tmp/host01_v2.json
./rh-analyze --diff /tmp/host01.json /tmp/host01_v2.json
# 为笔记生成 playbook
./rh-analyze /tmp/host01.json --playbook > /tmp/playbook_host01.txt
# 生成 Markdown 格式的执行报告
./rh-analyze /tmp/host01.json -o /tmp/analisis_host01.md
```
## 📤 输出格式
### 终端(彩色)
发现结果会进行视觉分类:
- 🔴 `[CRÍTICO]` — 可直接利用的向量
- 🟡 `[ADVERTENCIA]` — 弱配置或可疑配置
- 🔵 `[INFO]` — 系统信息类数据
执行完毕后,将输出包含所有严重和警告级别发现的汇总报告。
### JSON schema v2(两个工具之间的接口契约)
JSON 报告包含主机元数据、脚本的 SHA256、摘要、结构化发现(每一项均带有 `type`、`severity`、`message` 和可解析的 `data`)以及各模块的结果:
```
{
"report": {
"tool": "roothunter.sh",
"version": "1.2.0",
"schema_version": "2",
"timestamp": "2025-01-01T00:00:00Z",
"script_sha256": "abc123...",
"target": {
"hostname": "...", "kernel": "...", "os": "...",
"user": "...", "uid": 1000, "groups": "..."
},
"summary": { "critical": 3, "warnings": 7, "info": 25, "structured_findings": 12 },
"findings": [
{
"type": "suid_dangerous",
"severity": "critical",
"message": "SUID peligroso: /usr/bin/find (owner: root, perms: 4755)",
"data": {
"binary": "find", "path": "/usr/bin/find",
"owner": "root", "perms": "4755",
"verified": "true", "verified_at_level": "capability"
}
}
],
"modules": [ /* findings agrupados por módulo */ ]
}
}
```
### Markdown (`rh-analyze -o`)
可直接分享的执行报告:包含汇总表、附带 PoC 及 confidence 的 CVE exploits、分步攻击路径,以及根据评分进行优先排序的建议。
### Playbook (`rh-analyze --playbook`)
无颜色的纯文本格式,命令按 tier+score 排序。非常适合直接输出到笔记或发给 Red Team 同事:
```
# ─── TIER 1 — 轻松获胜 (请先尝试) ───
# find 中的 SUID [score 22/25]
# Path: /usr/bin/find | Owner: root | Perms: 4755
# 验证:
stat -c "%U %a" /usr/bin/find 2>/dev/null
# exploit:
/usr/bin/find . -exec /bin/sh -p \; -quit
```
## 🛠️ 系统要求
**`roothunter.sh`**
- Bash 4.x 或更高版本
- Linux(已在 Ubuntu、Debian、CentOS、Fedora、Alpine 上测试)
- `curl` + `python3` *(可选 —— 实时 CVE、格式化输出和 `-V` 验证时需要)*
- 建议以普通用户运行。部分检查需要较高权限才能获得更全面的覆盖。
**`rh-analyze`**
- Python 3.7 或更高版本(仅使用 stdlib,无外部依赖)
- 支持离线运行 —— 适合在隔离的工作站上分析报告
- 自动从脚本所在目录加载 `lib/gtfobins.py` 和 `lib/suid_whitelist.py`
## 🔗 参考资料
- [GTFOBins](https://gtfobins.github.io)
- [HackTricks — Linux 提权](https://book.hacktricks.xyz/linux-hardening/privilege-escalation)
- [Linux Kernel CVEs](https://www.linuxkernelcves.com)
## 👤 作者
**Matias López**
- GitHub: [@Matic539](https://github.com/Matic539)
## 📄 许可证
本项目采用 MIT 许可证。详情请参见 [LICENSE](LICENSE) 文件。
标签:Claude, CSV导出, CVE检测, GTFOBins, Python, SUID, Web报告查看器, 关系图谱, 协议分析, 反取证, 后渗透, 基线检查, 安全评估, 应用安全, 开源安全工具, 插件系统, 攻击路径分析, 无后门, 无线安全, 本地提权, 权限提升, 离线分析, 系统加固, 逆向工具, 逆向工程平台