| name | escalate-linux-privilege |
| description | 在 Linux 目标上系统性地检测权限提升路径,包括 SUID/SGID 文件、sudo 配置、可写的 cron 脚本、内核版本漏洞、NFS 错误配置、PATH 劫持等。当任务涉及 Linux 提权、SUID、sudo 滥用、内核漏洞时使用。 |
| enabled | true |
| tags | ["privilege-escalation","linux"] |
Linux 权限提升路径检测
当目标是 Linux 主机且当前权限为普通用户(非 root)时,使用这个 skill 系统性地检测可用的提权路径。
原则:只检测,不利用。 所有步骤为信息收集,不执行实际提权操作,由用户决定是否利用。
一、OPSEC 与环境约束
| 原则 | 说明 |
|---|
| 只读操作 | 不修改系统文件、不安装内核模块、不执行实际提权 |
| 低噪声 | find / 级搜索加 timeout,避免触发 HIDS 文件遍历告警 |
| 避免触发审计 | 不读取 /etc/shadow(除非已确认有权限),不执行 sudo 带密码 |
| 分阶段收敛 | 先快速检测高价值向量(SUID/sudo),再扩展到内核和服务 |
| 并发执行 | 独立检测项并发执行,减少总耗时 |
WebShell 环境注意:
- WebShell 通常以 Web 服务用户运行(www-data/tomcat/nobody),
sudo -l 可能需要密码
find / 在容器 overlay fs 上性能极差,必须限定目录或加 timeout
- 部分命令(
lsb_release、showmount)可能不存在,需回退
- 非交互式 Shell 下
sudo 无法输入密码,只能检测 NOPASSWD 规则
二、目标
检测并报告以下提权向量:
- SUID/SGID 可利用的二进制文件
- sudo 配置中的可利用规则(NOPASSWD)
- 可写的 cron 任务脚本
- 可写的 PATH 目录(PATH 劫持)
- 敏感文件权限(/etc/passwd、/etc/shadow 可写)
- 内核版本和已知 CVE
- 服务配置错误(运行中的特权服务)
- 环境变量注入(LD_PRELOAD 等)
- NFS 错误配置(no_root_squash)
- Docker/LXC 容器逃逸向量
三、工作流程
执行前:制定计划
在任何工具调用前,先输出:
- 目标:检测目标 Linux 主机上可用的权限提升路径
- 路径:并发检测 SUID/sudo/cron → 内核 CVE 评估 → 服务和容器检测 → 汇总报告
- 终止条件:所有检测项已执行并汇总,或当前用户已是 root 时停止
如果已有侦察摘要,先读取 hostProfile(内核版本)、privilegeProfile(当前用户)、containerProfile(容器状态),跳过已有信息。如果当前用户已是 root,此 skill 无需执行。
第一阶段:用户与环境确认(并发)
同时执行:
- 当前用户:
getCurrentUserInfo 或 id && whoami && groups
- 内核版本:
uname -r && cat /etc/os-release 2>/dev/null
- 可登录用户:
cat /etc/passwd | grep -v "nologin\|false" | grep "sh$"
第二阶段:高价值向量检测(并发)
同时执行以下检测:
1. SUID/SGID 文件:
timeout 15 find / -perm -4000 -type f 2>/dev/null
timeout 15 find / -perm -2000 -type f 2>/dev/null
对比 GTFOBins 可利用清单,重点关注:
nmap, vim, vi, nano, find, awk, python, python3, perl, ruby, php, bash,
sh, more, less, man, cp, mv, tar, zip, unzip, curl, wget, nc, netcat,
openssl, base64, dd, xxd, tee, env, strace, ltrace, gdb, git, svn, ftp,
sftp, ssh, scp, rsync, screen, tmux, docker, lxc, kubectl, ionice, nice,
taskset, time, timeout, journalctl, systemctl, service, mount, umount,
chsh, chown, chmod
2. sudo 配置:
sudo -l 2>/dev/null
cat /etc/sudoers 2>/dev/null
ls -la /etc/sudoers.d/ 2>/dev/null
重点关注:
NOPASSWD 规则(WebShell 环境下唯一可利用的 sudo 配置)
- 允许执行解释器的规则(python、bash、vim 等)
- 通配符(
*)滥用
env_keep 中保留 LD_PRELOAD
3. 可写的 cron 任务:
cat /etc/crontab 2>/dev/null
ls -la /etc/cron.d/ /etc/cron.daily/ /var/spool/cron/ 2>/dev/null
crontab -l 2>/dev/null
grep -r "^[^#]" /etc/cron* 2>/dev/null | grep -v "^Binary"
4. PATH 劫持:
echo $PATH | tr ':' '\n' | while read dir; do test -w "$dir" && echo "WRITABLE: $dir"; done
5. 敏感文件权限:
ls -la /etc/passwd /etc/shadow /etc/sudoers 2>/dev/null
find /etc -writable -type f 2>/dev/null | head -20
第三阶段:内核与组件 CVE 评估
根据内核版本对照以下高危 CVE:
| CVE 编号 | 名称 | 受影响版本 | 修复基线 |
|---|
| CVE-2016-5195 | Dirty COW | 2.6.22 ~ 4.8.3 | 4.8.3 / 4.7.9 / 4.4.26 |
| CVE-2022-0847 | Dirty Pipe | 5.8 ~ 5.16.11 | 5.16.11 / 5.15.25 / 5.10.102 |
| CVE-2024-1086 | nf_tables UAF | 3.15 ~ 6.7.2 | 6.1.76 / 6.6.15 / 6.7.3 |
| CVE-2021-4034 | PwnKit (pkexec) | 所有 polkit 版本 | 发行版修复包 |
| CVE-2021-3156 | Baron Samedit (sudo) | sudo 1.8.2 ~ 1.9.5p1 | sudo 1.9.5p2+ |
| CVE-2023-4911 | Looney Tunables (glibc) | glibc 2.34+ | 发行版修复包 |
| CVE-2023-0386 | OverlayFS EoP | 5.11 ~ 6.1.8 | 5.15.91 / 6.1.9 |
| CVE-2021-3493 | Ubuntu OverlayFS | Ubuntu 特定内核 | Ubuntu 修复包 |
| CVE-2022-0185 | fs_context | 5.1 ~ 5.16 | 发行版修复内核 |
| CVE-2019-5736 | runc 容器逃逸 | runc ≤ 1.0-rc6 | Docker 18.09.2+ |
补充检测组件版本:
pkexec --version 2>/dev/null
sudo --version 2>/dev/null | head -1
ldd --version 2>/dev/null | head -1
注意:发行版常通过 backport 修复,排查时应同时核对上游版本和发行版安全公告中的包版本。
第四阶段:服务与容器检测(并发)
1. 特权服务:
ps -eo pid,user,comm --no-header | grep "^.*root" | grep -v "\[" | head -30
2. 环境变量注入:
sudo -l 2>/dev/null | grep -iE "env_keep|ld_preload|ld_library"
3. Docker / 容器逃逸:
ls -la /var/run/docker.sock 2>/dev/null
cat /proc/self/status 2>/dev/null | grep CapEff
test -f /.dockerenv && echo "IN_DOCKER"
cat /proc/1/cgroup 2>/dev/null | grep -i docker | head -3
4. NFS 错误配置:
cat /etc/exports 2>/dev/null | grep -v "^#"
showmount -e localhost 2>/dev/null
关注 no_root_squash 选项。
四、工具优先级
| 优先级 | 工具 | 用途 |
|---|
| 1 | CommandTools | 所有检测命令执行 |
| 2 | FileTools | 读取配置文件(sudoers、crontab、exports) |
命令执行模式选择:
| 命令类型 | 模式 |
|---|
| 快速命令(id、uname) | exec |
| 可能耗时(find /) | exec 或 exec + queryTask |
| 多个独立命令 | 并发 exec |
五、失败回退
| 场景 | 回退策略 |
|---|
find / 超时 | 限定 /usr/bin、/usr/sbin、/usr/local/bin 搜索 SUID |
sudo -l 需要密码 | 跳过,标注"需密码,WebShell 环境不可用" |
lsb_release 不存在 | 用 cat /etc/os-release |
showmount 不存在 | 只检查 /etc/exports 文件 |
容器内 /proc 受限 | 从环境变量和挂载点推断 |
pkexec --version 不存在 | 用 dpkg -l policykit-1 或 rpm -q polkit |
| 权限不足读取 sudoers | 标注后继续其他检测 |
六、输出格式
## Linux 提权路径检测摘要
**当前用户**:{username}(uid={uid})
**内核版本**:{kernel}
**发现向量数**:{n}(high: x,medium: y,low: z)
---
## 提权向量(按优先级排序)
| # | 类型 | 目标 | 可利用性 | 前提条件 |
|---|------|------|---------|---------|
## 向量详情
### [HIGH] {vector_name}
- **类型**:{suid_binary / sudo / cron / kernel_cve / ...}
- **目标**:{具体文件/配置/CVE}
- **可利用性**:{high / medium / low}
- **利用前提**:{条件说明}
- **参考**:{GTFOBins / CVE 编号}
## 内核 CVE 评估
| CVE | 名称 | 匹配 | 备注 |
|-----|------|------|------|
## 已检测项
{列出所有已检测的类别和结果}
## 未检查项
{权限不足或工具缺失导致未检测的项}
## 下一步建议
2~3 条具体建议
建议示例
| 发现 | 建议 |
|---|
| SUID 可利用 | 用户可通过 GTFOBins 技术提权 |
| 内核 CVE 匹配 | 评估 exploit 可用性和稳定性 |
| Docker socket 可写 | 通过 Docker 挂载宿主机文件系统逃逸 |
| 提权成功后 | 使用 persistence-linux skill 建立持久化 |
| 发现凭据线索 | 使用 hunt-credentials skill 深入收集 |
七、结构化摘要写入
完成后必须:
manage_recon_summary(action="append") — 提权向量检测结果摘要
manage_recon_summary(action="append") — 机器可读字段
结构化 patch 示例:
{
"privilegeEscalation": {
"linux": {
"currentUser": "www-data",
"currentLevel": "user",
"vectors": [
{
"type": "suid_binary",
"target": "/usr/bin/find",
"exploitability": "high",
"technique": "find . -exec /bin/sh -p \\;",
"reference": "GTFOBins"
},
{
"type": "kernel_cve",
"target": "CVE-2021-4034",
"exploitability": "high",
"kernelVersion": "5.4.0-42-generic",
"note": "pkexec SUID + polkit 版本 < 0.120"
}
],
"checkedCategories": ["suid", "sudo", "cron", "kernel", "path_hijack", "nfs", "container", "services", "env_inject"]
}
},
"openQuestions": ["persistence-linux"]
}
八、决策规则
| 场景 | 行为 |
|---|
| 当前用户已是 root | 告知用户已有最高权限,此 skill 不适用 |
| 所有检测命令 | 只读操作,不写入任何文件 |
find / 耗时 | 使用异步模式,等待时先执行其他检测 |
| 发现 docker.sock 可写 | 单独标注"高危:Docker Socket 逃逸" |
| 内核版本匹配 CVE | 列出 CVE 编号和概要,不提供 exploit 代码 |
| 发现 SUID 可利用 | 引用 GTFOBins 技术,不直接执行 |
| WebShell 环境 sudo 需密码 | 跳过,只检测 NOPASSWD 规则 |
| 容器环境 | 额外检测特权容器和 socket 挂载 |
| 发现可利用向量 | 立即写入侦察摘要 |
Skill 元数据
- riskLevel:
medium
- accessMode:
read_only
- requiredTools:
CommandTools, SuidCapabilityTools
- optionalTools:
FileTools, UserAccountTools, ProcessTools, ServiceManagerTools
- produces:
privilegeEscalation.linux, openQuestions
- recommendedNextSkills:
persistence-linux, hunt-credentials, recon-internal-network, detect-container-escape
- forbiddenByDefault: 执行实际提权操作、修改系统文件、安装内核模块、写入 cron 任务