Privilege Escalation,简称:
Privesc
中文通常称为:
权限提升 / 提权
它指的是:
已经获得目标主机某种低权限访问能力之后,通过系统漏洞、软件漏洞、错误配置、服务权限、特殊权限等问题,使当前进程或用户获得更高权限。
基本过程:
获得低权限 Shell
↓
确认当前用户与权限
↓
收集系统信息
↓
枚举服务 / 软件 / 配置 / 特殊权限
↓
寻找可能的提权路径
↓
验证漏洞或错误配置
↓
获得更高权限
例如 Linux:
www-data
↓
普通用户
↓
root
Windows:
普通用户
↓
管理员权限
↓
高完整性管理员 / SYSTEM
一、提权的本质
提权不能简单理解成:
找到系统版本
↓
网上下载 EXP
↓
执行
↓
获得 SYSTEM/root
真实环境中的提权来源很多。
主要可以分为:
Privilege Escalation
│
├── 操作系统漏洞
│
├── 第三方软件漏洞
│
├── 系统配置错误
│
├── 服务权限错误
│
├── 文件权限错误
│
├── sudo / SUID / Capabilities
│
├── 计划任务 / 启动项
│
├── 数据库相关权限问题
│
└── 凭据与权限配置问题
所以:
提权的第一步通常不是寻找 EXP,而是 Enumeration(枚举)。
二、Windows 中 Administrator 与 SYSTEM 的区别
Windows 中需要区分:
Administrator
和:
NT AUTHORITY\SYSTEM
它们并不是同一个账户。
Administrator
Administrator 属于管理员级账户。
管理员用户通常属于:
Administrators
用户组。
但受到 UAC 等机制影响时:
属于 Administrators
并不意味着:
当前进程一定已经拥有最高管理员权限
SYSTEM
SYSTEM:
NT AUTHORITY\SYSTEM
是 Windows 内置的高权限服务账户。
很多 Windows 核心组件和系统服务使用 SYSTEM 身份运行。
因此:
Administrator ≠ SYSTEM
Windows 提权更准确地理解为:
从当前低权限安全上下文提升到管理员级、高完整性管理员、SYSTEM 等更高权限安全上下文。
三、UAC Bypass 与 SYSTEM 提权不要混淆
例如:
bypassuac_fodhelper
bypassuac_sdclt
属于:
UAC Bypass
UAC Bypass 一般针对:
用户已经属于 Administrators 组,但是当前进程运行在受 UAC 限制的权限级别。
可以简单理解:
Administrators 用户
↓
Medium Integrity
↓
UAC Bypass
↓
High Integrity
所以:
UAC Bypass
不应该直接理解成:
普通用户 → SYSTEM
UAC Bypass 和 SYSTEM 提权属于不同概念。
四、常见提权方式
1. 操作系统漏洞提权
操作系统自身可能存在:
Kernel
Driver
System Service
权限控制
内存管理
等安全漏洞。
基本思路:
确认系统版本
↓
确认系统架构
↓
确认补丁情况
↓
寻找对应漏洞
↓
验证目标是否满足漏洞条件
↓
授权环境中测试
例如 Windows 可以先查看:
systeminfo
Linux:
uname -a
以及:
cat /etc/os-release
五、系统配置错误提权
很多实际环境中的权限提升并不依赖 0-day。
常见问题包括:
文件权限配置错误
目录权限配置错误
服务配置错误
计划任务配置错误
启动项配置错误
sudo 配置错误
SUID 配置错误
Capabilities 配置错误
环境变量配置错误
敏感凭据泄露
例如:
高权限服务
↓
调用某个程序
↓
低权限用户可以修改这个程序
那么就存在明显的权限边界问题。
因此提权时应该重点检查:
谁运行这个程序?
+
谁可以修改这个程序?
六、第三方软件 / 服务提权
即使操作系统本身不存在可利用漏洞:
数据库
Web Server
备份软件
监控程序
运维软件
驱动程序
第三方服务
仍然可能存在安全问题。
例如某个服务:
SYSTEM
↓
Service.exe
如果普通用户能够修改:
Service.exe
或者相关:
DLL
配置文件
脚本
目录
就可能形成权限提升风险。
七、Windows 提权基本流程
Windows 提权建议按照下面的顺序进行:
① 当前用户是谁?
↓
② 当前用户属于哪些组?
↓
③ 当前 Token 有哪些权限?
↓
④ Windows 是什么版本?
↓
⑤ 安装了哪些补丁?
↓
⑥ 有哪些服务?
↓
⑦ 有哪些计划任务?
↓
⑧ 有哪些启动项?
↓
⑨ 文件 / 目录权限是否异常?
↓
⑩ 第三方软件是否存在漏洞?
↓
⑪ 根据枚举结果寻找提权路径
八、Windows 当前用户信息
查看当前用户
whoami
例如:
desktop-01\green
查看 SID
whoami /user
用于查看:
当前用户名
SID
查看当前权限
whoami /priv
可以查看当前 Access Token 中包含的:
Privileges
不同用户、不同服务账户拥有的权限不同。
查看用户组
whoami /groups
重点关注:
Administrators
Remote Desktop Users
Integrity Level
其他特殊用户组
九、Windows 系统信息
systeminfo
可以获取:
Windows 版本
Build
系统架构
补丁
主机名
域信息
启动时间
系统架构也可以查看:
echo %PROCESSOR_ARCHITECTURE%
十、Windows 网络信息
查看网卡
ipconfig /all
可以看到:
IP 地址
DNS
Gateway
DNS Suffix
网卡
DHCP
查看路由
route print
路由表可以帮助判断:
当前服务器能够访问哪些网络。
查看 ARP
arp -a
用于查看当前 IPv4 邻居缓存。
查看监听端口与连接
netstat -ano
可以看到:
Local Address
Remote Address
State
PID
然后:
tasklist
通过 PID 判断对应程序。
十一、Windows 进程与服务
查看进程:
tasklist
查看详细信息:
tasklist /v
查看进程对应服务:
tasklist /svc
查看系统服务:
sc query
枚举服务时重点关注:
服务由谁运行
服务程序在哪里
服务启动类型
程序文件权限
程序目录权限
配置文件权限
十二、Windows 计划任务
查看计划任务:
schtasks /query /fo LIST /v
重点检查:
任务名称
运行账户
执行程序
执行脚本
触发条件
程序是否可写
脚本是否可写
核心逻辑:
高权限计划任务
+
低权限可修改执行文件
↓
潜在权限提升风险
十三、Windows 启动项
可以查看启动程序:
wmic startup get command,caption
不过需要注意:
WMIC 已经在较新的 Windows 中逐渐弃用。
现代 Windows 环境也可以使用 PowerShell / CIM 等系统管理接口进行查询。
启动项检查的核心不是:
看到启动项 = 可以提权
而是:
高权限启动
+
低权限用户能够修改启动程序
↓
安全风险
十四、winPEAS
winPEAS 属于:
Windows Privilege Escalation Enumeration Tool
它主要用于:
收集系统信息
检查权限
检查服务
检查计划任务
检查注册表
检查凭据痕迹
检查常见配置问题
需要注意:
winPEAS ≠ 自动提权工具
正确流程应该是:
winPEAS
↓
发现可疑配置
↓
人工分析
↓
确认是否真实存在风险
↓
授权环境验证
十五、Metasploit Local Exploit Suggester
Meterpreter 中可以使用:
post/multi/recon/local_exploit_suggester
用于:
根据当前 Session 和目标环境寻找可能适用的本地漏洞利用模块。
其输出可能包含:
Potentially Vulnerable?
Yes
但:
Potentially Vulnerable
不等于:
一定可以成功提权
它只能表示:
当前环境可能符合该模块的部分条件。
仍然需要确认:
Windows版本
补丁
架构
当前权限
模块要求
漏洞适用范围
十六、Meterpreter 中常用的信息查看
获得 Meterpreter Session 后:
getuid
查看当前身份。
sysinfo
查看系统信息。
进入 Windows Shell:
shell
Windows CMD 中文编码出现问题时:
chcp 65001
返回 Meterpreter 后可以继续进行系统枚举。
十七、Linux 提权
Linux 中最典型的权限提升目标:
普通用户
↓
root
与 Windows 一样:
Linux 提权首先应该进行系统枚举。
基本流程:
当前用户
↓
系统版本
↓
sudo
↓
SUID / SGID
↓
Capabilities
↓
Cron / Systemd Timer
↓
文件权限
↓
服务
↓
凭据
↓
Kernel / 软件漏洞
十八、Linux 当前用户
whoami
查看:
当前用户名
UID / GID
id
例如:
uid=1000(user)
gid=1000(user)
groups=1000(user)
可以判断:
UID
GID
用户组
十九、Linux 系统信息
查看 Kernel:
uname -a
查看发行版:
cat /etc/os-release
例如可以获得:
Ubuntu
Debian
CentOS
Arch Linux
Kernel Version
Architecture
二十、sudo 权限
Linux 提权中非常重要:
sudo -l
它用于查看:
当前用户允许通过 sudo 以什么身份执行哪些程序。
例如需要关注:
NOPASSWD
允许执行的程序
允许切换的用户
环境变量配置
二十一、SUID / SGID
Linux 文件权限中存在:
SUID
SGID
特殊权限。
SUID 的核心作用是:
程序运行时可以使用文件所有者的 Effective UID。
因此:
SUID
+
危险程序行为
+
错误配置
可能形成权限提升风险。
但是:
存在 SUID ≠ 存在漏洞
很多系统程序本身就需要合法使用 SUID。
二十二、Linux Capabilities
Linux Capabilities 将传统 root 权限拆分成更细粒度的能力。
例如:
CAP_NET_BIND_SERVICE
CAP_NET_ADMIN
CAP_SYS_ADMIN
因此在权限枚举过程中:
需要检查程序是否被授予了不合理的 Capability。
二十三、Cron / Systemd Timer
Linux 中常见自动任务包括:
cron
systemd timer
重点检查:
任务由谁执行
执行什么程序
调用什么脚本
低权限用户是否可以修改
逻辑与 Windows Scheduled Task 类似:
root 定时任务
+
普通用户可修改脚本
↓
潜在权限提升风险
二十四、linPEAS
linPEAS 与 winPEAS 类似。
属于:
Linux Privilege Escalation Enumeration Tool
主要帮助枚举:
系统版本
用户
sudo
SUID
Capabilities
Cron
Systemd
服务
文件权限
敏感配置
凭据痕迹
同样:
linPEAS ≠ 自动提权
正确思路:
linPEAS
↓
发现问题
↓
人工分析
↓
验证
二十五、数据库相关权限提升
数据库与操作系统之间存在一个重要关系:
Database
↓
Database Process
↓
Operating System Account
数据库中的某些危险功能可能允许数据库服务器执行:
操作系统相关操作
但最终获得什么系统权限取决于:
数据库服务进程本身使用什么操作系统账户运行。
二十六、SQL Server 与 xp_cmdshell
SQL Server 并不是一定以:
SYSTEM
运行。
它可能使用:
虚拟账户
Network Service
域账户
自定义服务账户
其他服务账户
所以:
SQL Server = SYSTEM
这个理解是错误的。
xp_cmdshell
SQL Server 提供:
xp_cmdshell
它可以调用 Windows Command Shell 执行系统命令。
概念:
SQL Server
↓
xp_cmdshell
↓
Windows Command Shell
↓
OS Command
注意:
xp_cmdshell
并不是:
直接把命令交给 PowerShell
查看当前执行身份
授权实验环境中,可以使用无破坏性的:
EXEC master..xp_cmdshell 'whoami';
观察:
SQL Server
通过 xp_cmdshell 执行系统命令时实际使用什么 Windows 身份。
二十七、MySQL UDF
UDF:
User Defined Function
中文:
用户自定义函数。
MySQL 可以通过动态库扩展函数。
基本关系:
MySQL
↓
UDF
↓
动态库
↓
扩展函数
如果同时存在:
数据库高权限
插件目录权限错误
MySQL服务账户权限过高
危险动态库
可能产生系统安全风险。
二十八、plugin_dir
查看 MySQL 插件目录:
SHOW VARIABLES LIKE 'plugin_dir';
它表示:
MySQL 插件所在目录。
UDF / Plugin 相关问题需要同时考虑:
plugin_dir
数据库权限
文件系统权限
MySQL版本
动态库格式
服务账户权限
二十九、secure_file_priv
查看:
SHOW VARIABLES LIKE 'secure_file_priv';
secure_file_priv 主要限制:
LOAD DATA
SELECT ... INTO OUTFILE
LOAD_FILE()
等文件相关操作。
如果:
secure_file_priv = NULL
通常表示:
禁止相关文件导入/导出功能。
如果指定:
/var/lib/mysql-files/
表示:
文件操作被限制在指定目录。
因此:
secure_file_priv
主要控制:
文件导入 / 导出
不能简单理解成:
UDF 开关
三十、数据库提权的正确理解
不要认为:
数据库管理员
=
操作系统 root/SYSTEM
更准确的是:
数据库权限
↓
数据库危险功能
↓
数据库服务账户
↓
操作系统权限
因此数据库安全测试时需要分别判断:
数据库用户权限
数据库功能
数据库配置
数据库服务账户
操作系统权限
三十一、哪些内容不属于提权?
以下内容虽然经常发生在提权之后,但严格来说不属于 Privilege Escalation:
添加隐藏账户
建立持久化
凭据提取
Pass-the-Hash
Golden Ticket
横向移动
Pivoting
内网穿透
它们分别更接近:
Persistence
Credential Access
Lateral Movement
Intranet Exploration
因此应该和“提权”分开学习。
三十二、蓝队如何防御提权
单纯禁止:
wget
curl
gcc
apt
yum
dnf
不能真正解决权限提升问题。
这些措施最多只是:
增加部分攻击操作成本。
真正应该关注:
最小权限原则
及时安装安全补丁
限制 sudo
检查 SUID / SGID
检查 Capabilities
服务使用低权限账户
保护计划任务
保护启动项
限制敏感目录写权限
限制服务文件修改权限
应用程序白名单
EDR
日志监控
网络出口控制
凭据保护
三十三、Privilege Escalation 最终总结
提权最重要的思维不是:
找 EXP
↓
运行
↓
root
而是:
Low Privilege Shell
↓
Enumeration
↓
┌───────────┼───────────┐
↓ ↓ ↓
配置错误 软件漏洞 权限错误
│ │ │
├── Service │ │
├── sudo │ │
├── SUID │ │
├── Task │ │
└── Files │ │
│ │ │
└───────────┼───────────┘
↓
验证
↓
Privilege Escalation
↓
root / Administrator
/ SYSTEM
一句话总结:
Privilege Escalation 研究的是当前主机上的权限边界:已经获得低权限访问后,通过枚举系统、服务、文件权限、特殊权限、配置和漏洞,寻找从低权限安全上下文进入更高权限安全上下文的路径。
浙公网安备 33010602011771号