ARTICLE DETAIL

资讯详情

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

PowerSploit Privesc 模块 Get-UnattendedInstallFile:利用无人值守安装残留文件检测部署凭据泄露

PowerSploit Privesc 模块 Get-UnattendedInstallFile:利用无人值守安装残留文件检测部署凭据泄露 PowerSploit Privesc 模块 Get-UnattendedInstallFile利用无人值守安装残留文件检测部署凭据泄露【免费下载链接】PowerSploitPowerSploit - A PowerShell Post-Exploitation Framework项目地址: https://gitcode.com/gh_mirrors/po/PowerSploit导读本篇文章聚焦 PowerSploit 项目 Privesc 模块PowerUp中的Get-UnattendedInstallFile函数介绍它在 Windows 权限提升Privilege Escalation场景中的核心价值检测系统上残留的无人值守安装文件Unattended Installation Files这些文件可能包含部署账号的明文凭据。读完本文你将掌握该函数的完整原理、全部 9 个检测路径、输出对象结构以及如何单独运行或通过Invoke-PrivescAudit集成调用它完成一次快速的凭据泄漏排查。函数定位PowerUp 中的凭据泄漏侦察工具Get-UnattendedInstallFile由 Will Schroederharmj0y编写隶属于 PowerSploit 的 Privesc 模块其核心实现位于 Privesc/PowerUp.ps1。该函数在 PowerUp 中属于 Miscellaneous Checks杂项检查类别与Get-Webconfig、Get-ApplicationHost、Get-SiteListPassword、Get-CachedGPPPassword等并列专门针对部署/配置阶段遗留的敏感文件进行侦察。PowerUp 的定位是常见 Windows 权限提升向量的集散地专注于依赖错误配置的攻击向量见 Privesc/README.md。无人值守安装文件正是这类错误配置的典型代表系统管理员或 OSD操作系统部署工具在批量装机时使用sysprep/unattend.xml注入本地管理员账号与密码装机完成后这些文件常常被遗忘在磁盘上成为低权限攻击者可读的明文凭据来源。从依赖关系看函数声明为Required Dependencies: None无必需依赖License 为 BSD 3-Clause不依赖任何外部模块或内置命令以外的组件可以独立加载、独立执行。语法与用法函数语法极简无任何参数Get-UnattendedInstallFile使用方式同样简单直接在 PowerShell 中执行即可Get-UnattendedInstallFile示例输出UnattendPath属性为找到的残留文件完整路径UnattendPath ------------ C:\Windows\Panther\Unattend.xml从源码结构看函数通过[CmdletBinding()]声明为高级函数支持-Verbose、-ErrorAction等通用参数[OutputType(PowerUp.UnattendedInstallFile)]声明了输出类型便于管道下游按类型约束处理结果。核心原理9 个检测路径逐一解析函数的核心逻辑是一个固定路径列表遍历逐一用Test-Path判断文件是否存在存在即输出。其搜索范围覆盖 Windows 部署工具 Sysprep 与 Windows 安装程序Windows Setup的标准输出目录序号检测路径源码原文来源/用途说明1c:\sysprep\sysprep.xmlSysprep 应答文件新版 XML 格式2c:\sysprep\sysprep.infSysprep 应答文件旧版 INI 格式3c:\sysprep.inf系统根目录下的旧版 Sysprep 应答文件4%WinDir%\Panther\Unattended.xmlWindows 安装程序留下的应答文件5%WinDir%\Panther\Unattend\Unattended.xml子目录变体6%WinDir%\Panther\Unattend.xmlWindows 安装程序应答文件最常见位置7%WinDir%\Panther\Unattend\Unattend.xml子目录变体8%WinDir%\System32\Sysprep\unattend.xml新版 Sysprep 输出目录9%WinDir%\System32\Sysprep\Panther\unattend.xmlSysprep 子目录变体实现要点对应 Privesc/PowerUp.ps1路径动态拼接%WinDir%相关路径使用Join-Path $Env:WinDir拼接保证在不同系统盘符/目录环境下均正确解析而不是硬编码C:\Windows。静默错误处理函数先保存当前$ErrorActionPreference再临时切换为SilentlyContinue源码第 3726-3727 行确保对不存在路径执行Test-Path时不会向控制台抛错执行完毕在finally语义下恢复原值第 3749 行不影响调用方上下文。管道式过滤$SearchLocations | Where-Object { Test-Path $_ } | ForEach-Object { ... }直接复用 PowerShell 管道逐个输出命中的文件。输出对象PowerUp.UnattendedInstallFile每个命中的文件都会包装成一个自定义 PSObject类型名为PowerUp.UnattendedInstallFile源码第 3742-3746 行UnattendPathNoteproperty命中文件的完整路径NameAliaspropertyUnattendPath的别名属性便于交互式阅读。类型名通过$Out.PSObject.TypeNames.Insert(0, PowerUp.UnattendedInstallFile)注入到类型链最前端。这意味着下游可以直接用Where-Object { $_ -is [PowerUp.UnattendedInstallFile] }或-PipelineVariable进行类型筛选同时该类型名也与官方文档 docs/Privesc/Get-UnattendedInstallFile.md 中 OUTPUTS 章节声明的PowerUp.UnattendedInstallFile一致方便脚本按类型消费结果。在真实利用中找到路径后通常配合Get-Content读取文件内容从中提取AutoLogon、Credentials或LocalAccounts节点中的明文密码。测试用例验证仓库 Tests/Privesc.tests.ps1 为函数提供了 Pester 测试包含两个用例Should not throw直接调用Get-UnattendedInstallFile不应抛出异常对不存在路径也能安全返回空结果。Should return a leftover autorun在%WinDir%\System32\Sysprep\unattend.xml即第 8 号检测路径临时创建空文件调用函数应返回非空结果验证路径检测逻辑真实生效测试用try/finally保证无论断言成败都会清理临时文件。两个用例都要求本地管理员权限Test-IsAdmin检查见测试第 1220-1222 行因此在非管理员会话下运行测试会直接跳过该 Describe 块。这也侧面说明虽然函数本身只需要读取权限即可工作但完整的回归测试需要提权环境。集成调用作为 Invoke-PrivescAudit 的一项检查Get-UnattendedInstallFile已被注册进 PowerUp 的审计聚合函数Invoke-PrivescAudit位于 Privesc/PowerUp.ps1作为名为Unattended Install Files的检查项{ Type Unattended Install Files Command { Get-UnattendedInstallFile } }这意味着你可以通过一条命令完成全量特权提升检查其中自动包含本函数Invoke-PrivescAudit输出报告会以Unattended Install Files为分组标题列出所有命中路径。Invoke-PrivescAudit还支持-HTMLReport生成COMPUTER.username.html格式的网页报告见 Privesc/README.md。加载方式与适用前提Get-UnattendedInstallFile位于 Privesc 模块内有以下三种加载方式模块化加载将整个Privesc目录放入$Env:PSModulePath中的任一模块目录如$Env:windir\System32\WindowsPowerShell\v1.0\Modules然后执行Import-Module Privesc通过Get-Command -Module Privesc可确认函数已导入。Get-UnattendedInstallFile已在 Privesc/Privesc.psd1 的FunctionsToExport中显式导出。直接点源Import-Module背后实际由 Privesc/Privesc.psm1 通过Get-ChildItem (Join-Path $PSScriptRoot *.ps1) | % { . $_.FullName}将目录下所有.ps1逐一点源你也可以手动执行. .\Privesc\PowerUp.ps1单独加载整个 PowerUp 脚本。单函数复用从源码结构看该函数无外部依赖仅依赖Test-Path、Join-Path、New-Object等内置 cmdlet可以拷贝函数体独立运行。适用前提与限制以当前仓库实际内容为准仅支持 Windows 平台且目标路径均为 Windows 部署工具标准输出位置非 Windows 或非标准部署流程的系统将返回空结果。函数本身只需对这些路径具备读取权限但实际读取文件内容、利用其中凭据时需要结合目标文件 ACL 判断。检查范围固定为 9 个路径若组织使用自定义部署目录可参照源码自行扩展$SearchLocations数组。该模块面向安全测试/渗透测试场景PowerSploit 定位为 post-exploitation 框架请仅在获得授权的主机上使用。关联阅读函数源码Privesc/PowerUp.ps1官方文档docs/Privesc/Get-UnattendedInstallFile.md测试用例Tests/Privesc.tests.ps1模块清单Privesc/Privesc.psd1模块加载器Privesc/Privesc.psm1模块说明Privesc/README.md同级凭据检查函数Get-WebConfig、Get-ApplicationHost、Get-SiteListPassword、Get-CachedGPPPassword见 Privesc/PowerUp.ps1【免费下载链接】PowerSploitPowerSploit - A PowerShell Post-Exploitation Framework项目地址: https://gitcode.com/gh_mirrors/po/PowerSploit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表