尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

PowerSploit 权限提升检测:Get-RegistryAlwaysInstallElevated 注册表 AlwaysInstallElevated 漏洞探测实战

PowerSploit 权限提升检测:Get-RegistryAlwaysInstallElevated 注册表 AlwaysInstallElevated 漏洞探测实战 PowerSploit 权限提升检测Get-RegistryAlwaysInstallElevated 注册表 AlwaysInstallElevated 漏洞探测实战【免费下载链接】PowerSploitPowerSploit - A PowerShell Post-Exploitation Framework项目地址: https://gitcode.com/gh_mirrors/po/PowerSploit导读Get-RegistryAlwaysInstallElevated是 PowerSploit 框架 Privesc权限提升模块中的一个注册表检测函数用于判断目标主机是否配置了 Windows Installer 的AlwaysInstallElevated策略。读完本文你将掌握AlwaysInstallElevated 特权配置的利用原理、该函数的准确用法与输出含义、其源码级检测逻辑含 HKLM/HKCU 双键校验细节以及如何与Write-UserAddMSI、Invoke-PrivescAudit联动完成一次完整的检测 → 提权操作。AlwaysInstallElevated让所有 MSI 都以最高权限运行的配置AlwaysInstallElevated 是 Windows Installer 的一项组策略设置。当该策略被启用后任何用户包括标准权限用户双击或通过命令行启动的 .MSI 安装包都会以 SYSTEM最高权限静默执行。这正是其危险所在攻击者只需将一个恶意 .MSI 包投放到目标机器并触发运行就能获得系统级代码执行。这一策略由注册表中两个值共同控制注册表路径值名称说明HKLM:\SOFTWARE\Policies\Microsoft\Windows\InstallerAlwaysInstallElevated计算机级HKLM策略开关HKCU:\SOFTWARE\Policies\Microsoft\Windows\InstallerAlwaysInstallElevated当前用户级HKCU策略开关按 Windows 官方策略定义只有当 HKLM 与 HKCU 两个值同时被设置为 1时AlwaysInstallElevated 才真正生效。这也是下文实现逻辑要求双键同时命中的原因。函数功能与语法Get-RegistryAlwaysInstallElevated由 PowerSploit 作者 Will Schroederharmj0y编写遵循 BSD 3-Clause 协议无任何依赖项Required Dependencies: None可在 PowerShell 2.0 及以上环境直接使用。Get-RegistryAlwaysInstallElevated该函数不接受任何参数直接执行即可。其返回值为System.Boolean类型返回$TrueAlwaysInstallElevated 策略已启用存在可利用条件返回$False策略未启用或相关注册表项不存在。使用示例在已导入 PowerSploit 模块或点源dot-sourcePowerUp.ps1 的会话中直接调用PS C:\ Get-RegistryAlwaysInstallElevated True当返回$True时表示当前机器上任何 .MSI 文件都会以提升后的权限运行与当前用户的实际权限无关——这正是本函数作为提权前置检查的核心价值所在。如需获取更详细的检测过程可结合-Verbose参数观察每一步的诊断输出源码通过Write-Verbose输出键值状态PS C:\ Get-RegistryAlwaysInstallElevated -Verbose源码级实现原理双键同时命中才返回 True函数完整实现位于 Privesc/PowerUp.ps1属于文件中 Registry Checks注册表检查功能区。其检测流程如下第一步隔离错误处理$OrigError $ErrorActionPreference $ErrorActionPreference SilentlyContinue函数先保存原始$ErrorActionPreference再将其切换为SilentlyContinue。这样即使目标注册表项/值不存在在未配置策略的机器上是常态Get-ItemProperty抛出的找不到项类错误也不会刷屏中断脚本函数末尾会恢复原始设置不影响调用者上下文。第二步检查 HKLM 策略键if (Test-Path HKLM:SOFTWARE\Policies\Microsoft\Windows\Installer) { $HKLMval (Get-ItemProperty -Path HKLM:SOFTWARE\Policies\Microsoft\Windows\Installer -Name AlwaysInstallElevated -ErrorAction SilentlyContinue) Write-Verbose HKLMval: $($HKLMval.AlwaysInstallElevated) if ($HKLMval.AlwaysInstallElevated -and ($HKLMval.AlwaysInstallElevated -ne 0)){先用Test-Path确认 HKLM 策略目录存在然后读取AlwaysInstallElevated值只有当值非空且非 0时才继续。可见源码对值为 1与值非 0 但被显式写出的情况都做了兼容。第三步追加校验 HKCU 策略键$HKCUval (Get-ItemProperty -Path HKCU:SOFTWARE\Policies\Microsoft\Windows\Installer -Name AlwaysInstallElevated -ErrorAction SilentlyContinue) Write-Verbose HKCUval: $($HKCUval.AlwaysInstallElevated) if ($HKCUval.AlwaysInstallElevated -and ($HKCUval.AlwaysInstallElevated -ne 0)){ Write-Verbose AlwaysInstallElevated enabled on this machine! $True }只有HKLM 与 HKCU 两侧的AlwaysInstallElevated同时为真时函数才输出$True与 AlwaysInstallElevated enabled on this machine! 的详细输出否则在各级 else 分支中输出$False及对应的未启用提示如 AlwaysInstallElevated not enabled on this machine. / HKLM:SOFTWARE\Policies\Microsoft\Windows\Installer does not exist。这一双键同时为真的判定与 Windows 官方策略语义严格一致也纠正了文档字面上 the HKLM ... or the HKCU ... keys are set 可能带来的歧义实际生效条件是两个键都已被设置。若策略只写了一半安装包并不会以提升权限运行。函数在模块中的定位与导出Get-RegistryAlwaysInstallElevated是 PowerSploit 的 Privesc 模块 导出函数之一见 Privesc.psd1 的FunctionsToExport列表模块最低支持 PowerShell 2.0。在 Privesc/README.md 中它与Get-RegistryAutoLogon、Get-ModifiableRegistryAutoRun一起被归类于 Registry Checks注册表检查工具集是常规提权审计的第一步。两种加载方式任选其一# 方式一导入完整模块Windows PowerShell 2.0 Import-Module .\Privesc\Privesc.psm1 # 方式二直接点源 PowerUp.ps1脚本方式含全部 Privesc 工具 . .\Privesc\PowerUp.ps1实战联动检测到漏洞后如何提权方案一结合 Write-UserAddMSI 写入添加用户的 MSIPowerUp.ps1 中专门准备了与Get-RegistryAlwaysInstallElevated配套的利用函数Write-UserAddMSI见 Privesc/PowerUp.ps1。其注释明确写道Writes out a precompiled MSI installer that prompts for a user/group addition. This function can be used to abuse Get-RegistryAlwaysInstallElevated.# 先确认漏洞存在 if (Get-RegistryAlwaysInstallElevated) { # 生成本地目录下的 UserAdd.msi该 MSI 将当前用户加入本地 Administrators 组 Write-UserAddMSI # 借助 AlwaysInstallElevated 策略以 SYSTEM 权限执行 MSI msiexec /quiet /qn /i UserAdd.msi }Write-UserAddMSI内嵌了一个 Base64 编码的预编译 MSI源码中的$Binary变量通过[System.Convert]::FromBase64String()解码后以字节流写入磁盘默认输出文件为UserAdd.msi可通过-Path参数自定义返回带OutputPath属性的PowerUp.UserAddMSI类型对象。由于 AlwaysInstallElevated 生效标准用户也能触发该 MSI 完成管理员账户添加实现本地提权。方案二纳入 Invoke-PrivescAudit 自动化审计Get-RegistryAlwaysInstallElevated也是 PowerSploit 全量提权审计函数Invoke-PrivescAudit的检查项之一见 Privesc/PowerUp.ps1Command { if (Get-RegistryAlwaysInstallElevated){ New-Object PSObject } }运行Invoke-PrivescAudit时若本函数返回$True审计报告即会将该机器标记为存在 MSI 提权风险方便一次性排查全部常见提权路径。测试与质量保证仓库测试套件 Tests/Privesc.tests.ps1 中包含针对该函数的 Pester 用例Describe Get-RegistryAlwaysInstallElevated { # TODO: set registry key, ensure it retrieves It Should not throw. { {Get-RegistryAlwaysInstallElevated} | Should Not Throw } }该用例验证在**未配置策略注册表项缺失**的环境下函数不会抛异常——这正依赖前面提到的SilentlyContinue错误隔离设计。源码注释中的 TODO 提示完整行为验证写入测试键后断言返回值留给具备管理员权限的测试环境补充这也从侧面说明本函数在无漏洞主机上应安静地返回$False而非报错。注意事项与局限判定口径函数返回$True的前提是 HKLM 与 HKCU 两个AlwaysInstallElevated值同时非空且非 0单侧设置不构成可利用条件权限要求读取 HKLM 策略键通常需要管理员权限在标准用户会话中若 HKLM 键不可读函数会因错误被静默而返回$False可能产生漏报审计时应尽量在具备读取权限的上下文中执行适用平台AlwaysInstallElevated 策略主要存在于 Windows 域/组策略管理的机器上个人工作站默认不配置合法边界该工具属于后渗透post-exploitation检测类函数请仅在获得授权的渗透测试、红队演练或安全评估环境中使用。【免费下载链接】PowerSploitPowerSploit - A PowerShell Post-Exploitation Framework项目地址: https://gitcode.com/gh_mirrors/po/PowerSploit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表