渗透测试中的提权漏洞:从低权限到系统控制的全解析

渗透测试中的提权漏洞:从低权限到系统控制的全解析

作为一名天天和权限打交道的一线渗透测试工程师,我经常遇到这样的情况:费尽心思拿下了一个webshell,结果发现是www-dataIUSR这种低权限账户,想读个敏感文件都提示"拒绝访问"。这时候就需要提权了。

一、提权到底是什么

简单来说,提权就是把一个普通用户(比如Windows的普通账号、Linux的www-data)的权限,提升到系统最高权限(Windows的SYSTEM、Linux的root)。没有提权,渗透测试就只能停留在表面,无法真正评估系统的安全性

在实际工作中,我遇到的提权漏洞主要分两类:

  • 本地提权漏洞:我现在的低权限账户在本地利用系统缺陷提升权限
  • 远程提权漏洞:直接远程获取高权限(如永恒之蓝),但这类漏洞现在越来越难碰到了

实战经验 :不要总想着找一个"一击必杀"的0day,真正的渗透测试中,配置类漏洞的检出率远高于内核漏洞


二、Windows系统提权实战

2.1 服务权限配置错误(我最爱用的"捡漏"漏洞)

这是什么:Windows服务需要以特定账户运行(通常是SYSTEM)。如果管理员把服务的可执行文件权限设置成"Everyone可修改",那就等于给我们开了一扇门。

实战案例 :有次渗透某政府网站,拿下一个Tomcat权限,发现MySQL服务的mysqld.exe文件权限竟然是Everyone可写。我直接替换成添加管理员账户的恶意程序,等服务器重启后,MySQL服务自动以SYSTEM权限执行了我的程序,直接拿下服务器权限。

排查思路

cmd 复制代码
# 查看所有服务的可执行文件路径
sc query type= service state= all | findstr "NAME PATH"

# 或用AccessChk批量检测
accesschk.exe -uwcqv "Everyone" *

利用步骤

  1. 找到可被当前用户修改的服务文件
  2. 备份原文件,替换成恶意程序(保持同名)
  3. 重启服务(sc restart 服务名)或等待系统重启
  4. 获得SYSTEM权限

注意事项 :选择非核心业务、启动频率低的服务,避免服务无法启动被管理员发现。

2.2 注册表键值劫持

这是什么 :Windows启动时会读取注册表中的RunRunOnce等键值,以SYSTEM权限执行指定的程序。如果这些键值可被普通用户修改,我们就可以"劫持"系统启动流程。

实战场景 :某次内网渗透,发现一台Server 2008的HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run键值权限配置错误,普通用户可以写入。我在键值中添加了恶意程序路径,第二天管理员登录时,程序自动以SYSTEM权限执行,成功提权。

常用劫持位置

  • Run:系统启动自动执行
  • RunOnce:启动执行一次后自动删除(更隐蔽)
  • Winlogon:用户登录时执行

利用命令

cmd 复制代码
# 添加恶意程序到启动项
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v SecurityScan /t REG_SZ /d "C:\temp\backdoor.exe"

# 提权后删除痕迹
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v SecurityScan /f

2.3 内核漏洞提权(需要碰运气的)

CVE-2021-1732(Win32k提权)

适用版本:Windows 10 1903-20H2、Server 2019对应版本

实战流程

  1. systeminfo查看补丁,确认未安装KB5000802
  2. 上传适配的EXP(注意32位/64位区别)
  3. 执行EXP,获得SYSTEM shell

血泪教训一定要确认系统版本和EXP的兼容性,不然很容易蓝屏。在正式环境测试前,最好先和客户确认是否可以接受可能的重启。

CVE-2025-24076(Windows 11 DLL劫持)

适用版本:启用"移动设备"功能的Windows 11(未安装2025年3月补丁)

利用特点 :攻击窗口只有300毫秒,需要用到机会锁技术控制替换时机。这个漏洞告诉我们:系统的新功能往往也是新的攻击面

2.4 DLL劫持提权(通用型)

原理:软件加载DLL时按顺序搜索(当前目录→System32→PATH),如果搜索路径可写,我们就能植入恶意DLL,让高权限程序加载。

实战排查

  • 用Process Monitor监控程序启动时加载的DLL
  • 找未使用绝对路径的DLL
  • 确认当前目录或PATH目录可写

关键点 :恶意DLL要保留原DLL的功能,避免程序崩溃。优先选无数字签名校验的软件。


三、Linux系统提权实战

3.1 SUID/SGID权限滥用(Linux版"捡漏王")

这是什么:SUID文件允许普通用户临时获得文件所有者的权限。如果root用户的文件设置了SUID且可被利用,我们就可能获得root权限。

实战案例 :某次渗透测试,发现目标系统上find命令竟然设置了SUID(权限为-rwsr-xr-x)。直接执行:

bash 复制代码
find / -name test -exec /bin/bash \;
# 或者用AutoSUID自动化检测

瞬间获得root shell。事后分析,是管理员为了方便备份,给find加了SUID。

高危SUID文件清单

  • find:可通过-exec执行命令
  • bash:执行/bin/bash -p获得root shell
  • cp:可复制/etc/shadow
  • /usr/bin/env:可通过env /bin/sh执行shell

排查命令

bash 复制代码
# 查找所有SUID文件
find / -perm -u=s -type f 2>/dev/null

# 查找root用户的SUID文件
find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null

3.2 sudo配置错误

常见错误配置(在实际环境中屡见不鲜):

bash 复制代码
# 允许用户无需密码执行所有命令(这是最离谱的)
testuser ALL=(ALL) NOPASSWD: ALL

# 允许执行高危命令
testuser ALL=(ALL) NOPASSWD: /bin/bash, /usr/bin/python

利用方式

bash 复制代码
# 查看当前用户可执行的sudo命令
sudo -l

# 如果发现可以执行bash
sudo /bin/bash

# 如果发现可以执行python
sudo python -c 'import os; os.system("/bin/bash")'
CVE-2025-32463(Sudo版本漏洞)

适用版本:sudo 1.9.14-1.9.17

利用思路 :滥用--chroot选项劫持共享库加载,无需sudo权限即可提权。提醒我们:不仅要关注系统漏洞,还要关注工具本身的漏洞

3.3 内核漏洞:CVE-2022-0847(Dirty Pipe)

适用版本:Linux内核5.8-5.16.11、5.15.25、5.10.92及以下

和脏牛的区别:利用更简单,无需ROP、无需知道内核基址,不会导致系统崩溃。

实战流程

bash 复制代码
# 检查内核版本
uname -r

# 执行EXP(会修改/etc/passwd添加root用户)
./dirtypipe

# 用新添加的用户登录
su newuser

原理 :利用pipe机制的内存未初始化缺陷,修改只读文件内容。这告诉我们:即使是最基础的系统机制,也可能存在致命漏洞

3.4 计划任务(Cron)漏洞

常见错误配置

  • Cron执行的脚本权限为777(所有人都可写)
  • 使用相对路径(如./backup.sh
  • 脚本中调用命令未用绝对路径

实战案例 :发现/etc/crontab中有一条root执行的备份任务:*/5 * * * * root /home/user/backup.sh,而backup.sh权限是-rwxrwxrwx。直接追加提权代码:

bash 复制代码
echo "echo 'hack::0:0:::/bin/bash' >> /etc/passwd" >> /home/user/backup.sh

5分钟后,root权限执行脚本,直接添加了root用户。

3.5 其他实用场景

/etc/passwd文件可写
bash 复制代码
# 检查权限
ls -l /etc/passwd

# 如果可写,直接添加root用户(密码需加密)
echo "hack:加密密码:0:0:hack:/root:/bin/bash" >> /etc/passwd
su hack
Docker容器逃逸
bash 复制代码
# 检查是否为特权模式
docker inspect --format '{{.HostConfig.Privileged}}' 容器ID

# 如果是true,挂载宿主机磁盘
mount /dev/sda1 /mnt
chroot /mnt

四、我的日常防御实践

作为渗透测试工程师,我不仅要知道怎么"攻",更要懂得怎么"防"。以下是我给客户做安全加固时必提的建议:

4.1 权限最小化原则(最核心的防御)

Windows系统

  • 检查服务权限:EveryoneUsers组不应该有修改权限
  • 注册表关键键值(Run、RunOnce)只允许管理员写入
  • 软件目录禁止普通用户写入

Linux系统

  • 定期检查SUID/SGID文件,删除不必要的SUID权限
  • 严格控制sudo配置,禁止普通用户执行高危命令
  • Cron任务脚本权限设为700,禁止普通用户修改
  • 敏感文件(/etc/passwd/etc/shadow)设为644或600

4.2 及时更新(不要成为漏洞的活靶子)

  • 建立补丁管理流程,每月定期更新系统补丁
  • 关注高危漏洞公告(如Dirty Pipe、CVE-2021-1732)
  • 不要使用已停止维护的系统(Win Server 2003、CentOS 6)

4.3 安全审计(发现异常才能阻止入侵)

  • 启用Windows注册表审计、Linux的auditd
  • 监控敏感操作:修改服务、添加启动项、修改/etc/passwd
  • 定期查看日志,发现异常行为及时排查

4.4 减少攻击面

  • 关闭不必要的系统服务
  • 卸载未使用的软件
  • 禁用不必要的系统功能(如Windows的"移动设备"功能)

五、总结与思考

在我从事渗透测试的这些年里,我发现一个规律:真正的安全隐患往往不是0day,而是那些看似"不重要"的配置错误

  • 服务权限配置错误SUID滥用sudo配置不当------这些"配置类漏洞"占了提权漏洞的60%以上
  • 而内核漏洞虽然"看起来很厉害",但在实际环境中的检出率反而不高

所以我的建议是:做渗透测试时,先从最简单的配置类漏洞开始排查;做系统加固时,先把基础权限配置规范好。这样不仅能发现最多的问题,也能防范最多的攻击。

最后想说的是,安全不是一劳永逸的事,需要持续关注、持续改进。希望这篇文章能帮助你在渗透测试中少走弯路,也能在日常运维中更好地保护你的系统。


文中提到的工具和方法仅供授权的安全测试使用,请勿用于非法用途。

相关推荐
用户962377954483 天前
VulnHub DC-3 靶机渗透测试笔记
安全
叶落阁主4 天前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
用户962377954486 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机6 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机6 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954486 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star6 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954486 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
阿白的白日梦6 天前
winget基础管理---更新/修改源为国内源
windows
cipher8 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全