Matic539/roothunter

GitHub: Matic539/roothunter

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

Stars: 5 | Forks: 0

# 🔍 RootHunter ![Bash](https://img.shields.io/badge/bash-5.x-green?logo=gnubash&logoColor=white) ![Python](https://img.shields.io/badge/python-3.7+-blue?logo=python&logoColor=white) ![Platform](https://img.shields.io/badge/platform-Linux-blue) ![License](https://img.shields.io/badge/license-MIT-lightgrey) ![roothunter](https://img.shields.io/badge/roothunter.sh-1.2.0-orange) ![rh-analyze](https://img.shields.io/badge/rh--analyze-1.2-orange) ## ⚠️ 免责声明 / 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报告查看器, 关系图谱, 协议分析, 反取证, 后渗透, 基线检查, 安全评估, 应用安全, 开源安全工具, 插件系统, 攻击路径分析, 无后门, 无线安全, 本地提权, 权限提升, 离线分析, 系统加固, 逆向工具, 逆向工程平台