ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

PowerSploit 提权审计实战:用 Invoke-PrivescAudit 一键排查 Windows 本地提权隐患

PowerSploit 提权审计实战:用 Invoke-PrivescAudit 一键排查 Windows 本地提权隐患 PowerSploit 提权审计实战用 Invoke-PrivescAudit 一键排查 Windows 本地提权隐患【免费下载链接】PowerSploitPowerSploit - A PowerShell Post-Exploitation Framework项目地址: https://gitcode.com/gh_mirrors/po/PowerSploit本文围绕 PowerSploit 项目 Privesc 模块中的Invoke-PrivescAudit命令展开讲解如何借助它一次性批量执行全部 Windows 本地提权机会检查服务配置、注册表、DLL 劫持、凭据缓存等 16 类检查项并掌握对象、列表与 HTML 三种报告输出方式。读完本文你将能够基于 Privesc/PowerUp.ps1 的源码理解每条检查的判定逻辑并在授权渗透测试或红队评估中直接复现完整审计流程。一、Invoke-PrivescAudit 是什么Invoke-PrivescAudit是 PowerSploit 提权模块Privesc中的一个聚合审计命令其官方定位是执行所有用于检查各类 Windows 权限提升机会的函数Executes all functions that check for various Windows privilege escalation opportunities。它由 Will Schroederharmj0y编写遵循 BSD 3-Clause 许可无强制依赖项功能载体是项目中的 Privesc/PowerUp.ps1。从源码结构看该命令相当于 PowerUp 工具集的总控开关它把分散的单项检查函数如Get-UnquotedService、Get-ModifiableServiceFile、Get-CachedGPPPassword等组织成一张检查清单然后逐项执行、汇总输出。你既可以在获得低权限立足点后用它快速评估横向/纵向提权面也可以在加固审计时用它核对目标主机是否存在已知的配置类提权漏洞。加载与调用方式Privesc 模块通过 Privesc/Privesc.psm1 以 dot-source 方式加载目录下全部.ps1脚本其中即包含 PowerUp.ps1 与 Get-System.ps1模块清单 Privesc/Privesc.psd1 声明导出Invoke-PrivescAudit等 30 个函数。有两种常见加载方式# 方式一导入整个 PowerSploit 框架会自动递归导入各子模块见 PowerSploit.psm1 Import-Module .\PowerSploit.psm1 # 方式二仅导入 Privesc 模块 Import-Module .\Privesc\Privesc.psd1模块清单要求最低 Windows PowerShell 2.0 引擎见 Privesc/Privesc.psd1 中的PowerShellVersion 2.0因此它可在较老版本的 PowerShell 环境中运行。此外PowerUp.ps1 在文件末尾为Invoke-PrivescAudit注册了一个历史别名Invoke-AllChecks见 Privesc/PowerUp.ps1#L4989二者可互换使用。二、语法与参数详解Invoke-PrivescAudit的完整语法如下引自 docs/Privesc/Invoke-PrivescAudit.mdInvoke-PrivescAudit [-HTMLReport]参数-HTMLReportSwitch项目说明类型SwitchParameter位置Named命名参数是否必填False默认值False管道输入不支持通配符不支持作用将审计报告以 HTML 形式写入磁盘当指定-HTMLReport时报告文件会以计算机名.用户名.html的格式命名并写入当前工作目录。具体到源码文件名的拼接逻辑是$($Env:ComputerName).$($Env:UserName).html见 Privesc/PowerUp.ps1#L4730。原文档示例中的SYSTEM.username.html即是对这一命名模式的抽象描述——例如在主机名为WIN10-PC、当前用户为john的机器上实际生成的文件是WIN10-PC.john.html。进阶参数-Format源码新增取代 HTMLReport值得注意的实现细节在 Privesc/PowerUp.ps1#L4717-L4727 中函数还定义了一个-Format参数取值集合为Object/List/HTML默认值为Object而-HTMLReport在源码注释中已明确标注为DEPRECATED已弃用其语义被-Format取代。源码中的兼容处理是if($HTMLReport){ $Format HTML }也就是说无论你写-HTMLReport还是-Format HTML最终都会走同一套 HTML 输出分支。三种取值对应的输出行为见后文输出格式一节。三、两种典型用法示例示例 1默认对象输出Invoke-PrivescAudit运行全部提权检查并针对发现的每一项问题输出包含详细字段的状态报告对象。这是最常用的用法结果可在管道中继续交给Where-Object、Format-List或Export-Csv等命令做二次处理。示例 2生成 HTML 报告Invoke-PrivescAudit -HTMLReport # 等价写法 Invoke-PrivescAudit -Format HTML运行全部提权检查并把结果写入系统名.用户名.html如WIN10-PC.john.html报告文件中便于归档或在浏览器中审阅。HTML 报告自带内嵌 CSS 样式源码中定义了BODY为 peachpuff 背景、表格使用 thistle 表头与 palegoldenrod 单元格等配色见 Privesc/PowerUp.ps1#L4731-L4737页首会输出PowerUp report for 计算机名.用户名标题。如果你只想逐项人眼审阅而不落盘还可以使用-Format List它会在终端中先打印[*] Checking for 检查项名称...提示再以Format-List形式展示该项的全部发现。四、16 类检查项全景源码级拆解Invoke-PrivescAudit的核心是函数体内维护的$Checks数组见 Privesc/PowerUp.ps1#L4742-L4815共注册了16 项检查。下表汇总了每项检查的类型名称、底层调用的检查函数以及源码中预置的滥用脚本AbuseScript#检查项类型底层调用函数预置滥用脚本1User Has Local Admin Privileges内联WindowsPrincipal.IsInRole(Administrator)无2User In Local Group with Admin PrivilegesGet-ProcessTokenGroup匹配 SIDS-1-5-32-544Invoke-WScriptUACBypass -Command ...3Process Token PrivilegesGet-ProcessTokenPrivilege -Special无4Unquoted Service PathsGet-UnquotedService无结果自带AbuseFunction字段5Modifiable Service FilesGet-ModifiableServiceFile无结果自带6Modifiable ServicesGet-ModifiableService无结果自带7%PATH% .dll HijacksFind-PathDLLHijackWrite-HijackDll -DllPath 路径\wlbsctrl.dll8AlwaysInstallElevated Registry KeyGet-RegistryAlwaysInstallElevatedWrite-UserAddMSI9Registry AutologonsGet-RegistryAutoLogon无10Modifiable Registry AutorunGet-ModifiableRegistryAutoRun无11Modifiable Scheduled Task FilesGet-ModifiableScheduledTaskFile无12Unattended Install FilesGet-UnattendedInstallFile无13Encrypted web.config StringsGet-WebConfig无14Encrypted Application Pool PasswordsGet-ApplicationHost无15McAfee SiteList.xml filesGet-SiteListPassword无16Cached GPP FilesGet-CachedGPPPassword无这些检查大致可分为五组理解分组有助于你在收到报告后快速定位问题4.1 初始权限与令牌检查第 13 项第 1 项通过 .NET 的WindowsPrincipal.IsInRole()直接判断当前进程令牌是否属于 Administrators 内置组第 2 项利用Get-ProcessTokenGroup枚举进程令牌中的组 SID若出现管理员组 SIDS-1-5-32-544即判定当前用户所属某本地组具备管理员权限此时即使当前会话不是完整管理员也可能借助Invoke-WScriptUACBypass进行 UAC 绕过提权第 3 项通过Get-ProcessTokenPrivilege -Special筛选进程令牌中的高价值特权如 SeDebugPrivilege、SeImpersonatePrivilege、SeBackupPrivilege 等。令牌类函数依赖 PSReflect 在内存中动态生成的 Win32 API 原型见 Privesc/PowerUp.ps1#L16-L22 及文件末尾的$FunctionDefinitions定义其中声明了OpenProcessToken、GetTokenInformation、LookupPrivilegeName、RtlAdjustPrivilege等原生函数无需磁盘落盘即可访问advapi32、kernel32、ntdll接口。4.2 服务配置类检查第 46 项Get-UnquotedService通过 WMI 查询win32_service筛选出二进制路径含空格且未加引号的服务并进一步用Get-ModifiablePath判断路径前缀段是否可写、用Test-ServiceDaclPermission -PermissionSet Restart判断当前用户是否具备重启该服务的权限实现见 Privesc/PowerUp.ps1#L2028-L2096。返回对象包含ServiceName、Path、ModifiablePath、StartName、AbuseFunction、CanRestart等字段其中AbuseFunction直接给出Write-ServiceBinary -Name 服务名 -Path 劫持路径的利用命令Get-ModifiableServiceFile与Get-ModifiableService分别从服务二进制/依赖文件可写和服务 DACL 允许当前用户修改配置两个角度枚举可滥用服务相关单项文档可参考 docs/Privesc/Get-UnquotedService.md、docs/Privesc/Get-ModifiableServiceFile.md、docs/Privesc/Get-ModifiableService.md。4.3 DLL 劫持检查第 7 项Find-PathDLLHijack检查%PATH%目录中是否存在当前用户可写、且可被系统进程按名加载如wlbsctrl.dll的 DLL 劫持点。命中后源码预置的滥用脚本会指导你用Write-HijackDll -DllPath 可写路径\wlbsctrl.dll植入恶意 DLL见 docs/Privesc/Write-HijackDll.md。4.4 注册表类检查第 810 项Get-RegistryAlwaysInstallElevated读取HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated与HKCU\...\AlwaysInstallElevated两个键是否同时存在并置位实现见 Privesc/PowerUp.ps1#L3402-L3441。若置位则任何 MSI 都会以 SYSTEM 权限安装可用Write-UserAddMSI构造恶意 MSI 直接添加管理员Get-RegistryAutoLogon枚举Winlogon下的 AutoAdminLogon 相关键值尝试提取明文/可恢复的自动登录凭据Get-ModifiableRegistryAutoRun查找 HKCU/HKLM 启动项中当前用户可写的键可用于植入持久化或提权载荷。4.5 凭据与配置文件检查第 1116 项Get-ModifiableScheduledTaskFile查找当前用户可修改的计划任务文件Get-UnattendedInstallFile扫描常见无人值守安装应答文件如sysprep.xml、unattend.xml等遗留路径Get-WebConfig与Get-ApplicationHost检查 IIS 站点web.config与applicationHost.config中加密的配置字符串/应用程序池密码Get-SiteListPassword针对 McAfee SiteList.xml 中经静态密钥加密的凭据进行解密检查源码注释明确指出该函数利用了 McAfee 静态密钥加密的弱点见 Privesc/PowerUp.ps1#L4145Get-CachedGPPPassword搜索并尝试解密缓存的组策略首选项GPP凭据。五、执行流程与结果字段Invoke-PrivescAudit的执行主循环位于 Privesc/PowerUp.ps1#L4817-L4831逻辑如下ForEach($Check in $Checks){ Write-Verbose Checking for $($Check.Type)... $Results . $Check.Command $Results | Where-Object {$_} | ForEach-Object { $_ | Add-Member Noteproperty Check $Check.Type if ($Check.AbuseScript){ $_ | Add-Member Noteproperty AbuseFunction (. $Check.AbuseScript) } } # 依据 -Format 分发到 Object / List / HTML 三种输出分支 }几个关键点只保留有效结果每项检查的原始输出会先经Where-Object {$_}过滤空结果$null、$false、空集合不会出现在报告中因此没问题的检查项不会产生噪音统一附加Check字段每个结果对象都会被追加一个Check属性标明它来自哪一类检查方便在混合输出中按来源过滤AbuseFunction字段对于预置了滥用脚本的检查项第 2、7、8 项结果还会附带AbuseFunction属性直接给出下一步可利用的命令模板——这是 PowerUp 强调发现即利用的体现。而第 46 项服务类检查的结果对象本身在底层函数中就已生成了各自的AbuseFunction字段Verbose 调试函数全程支持-Verbose会逐项打印Checking for 类型...便于审计中途观察进度。六、输出格式Object / List / HTML对应-Format参数的三种取值输出行为如下-Format输出行为适用场景Object默认逐项输出结果对象可继续走管道自动化处理、导出 CSV、二次过滤List每项先打印[*] Checking for ...再以Format-List排版终端人工逐项审阅HTML每项用ConvertTo-HTML追加写入计算机名.用户名.html归档、写报告、跨端审阅在 HTML 模式下报告文件会在审计开始前先写入带样式的H1页首随后每个检查项以H2小节追加见 Privesc/PowerUp.ps1#L4829全部执行完毕后通过Write-Verbose打印报告落盘路径Privesc/PowerUp.ps1#L4833-L4835。七、验证与测试仓库提供了针对 Privesc 模块的 Pester 测试套件 Tests/Privesc.tests.ps1。该套件会先导入 Privesc/Privesc.psd1 模块清单再单独导入 PowerUp.ps1 以暴露全部辅助函数见测试文件头部随后对Get-ModifiablePath、Get-ProcessTokenGroup、Get-ProcessTokenPrivilege、Get-UnquotedService、Get-ModifiableServiceFile、Invoke-ServiceAbuse、Install-ServiceBinary、Find-ProcessDLLHijack等底层函数逐一断言字段完整性与行为正确性。例如Get-UnquotedService的测试会通过sc.exe create临时注册一个含空格且未加引号的服务来验证检测命中再注册引号包裹路径的服务验证不误报。需要特别说明测试套件中相当一部分用例如令牌枚举、服务 DACL 修改、服务滥用要求以本地管理员权限运行测试本身会实际创建/删除服务与用户如john测试用户因此只应在受控的测试环境中执行。八、使用注意事项授权前提Invoke-PrivescAudit及其配套的滥用函数属于后渗透/提权工具仅在获得明确授权的渗透测试、红队评估或自身环境加固检查中使用请遵守当地法律法规运行环境目标为 Windows 主机模块要求 Windows PowerShell 2.0 及以上Get-WmiObject、sc.exe、注册表与 IIS 配置读取等操作受目标系统组件影响权限差异部分检查项如令牌特权枚举、服务 DACL 评估在低权限与管理员会话下结果不同建议在不同权限上下文中分别审计结果解读报告中的AbuseFunction是自动生成的利用建议模板执行前需结合目标环境核实路径、服务名等占位符切勿盲目复制执行相关资源更多单项函数的详细文档位于 docs/Privesc/index.md 索引中每个提权向量服务、DLL、注册表、GPP 等都有独立页面模块整体说明可参考 Privesc/README.md。九、小结Invoke-PrivescAudit把 PowerUp 工具集中的全部本地提权检查收敛为一条命令覆盖管理员权限确认、令牌特权、服务配置、DLL 劫持、注册表配置与凭据缓存等 16 类常见提权面并通过统一的Check/AbuseFunction字段让发现问题与给出利用路径无缝衔接。无论是快速评估一台新拿下的主机还是系统性加固检查它都是一份高性价比的起点清单。【免费下载链接】PowerSploitPowerSploit - A PowerShell Post-Exploitation Framework项目地址: https://gitcode.com/gh_mirrors/po/PowerSploit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表