首页/新闻资讯/正文详情

PowerSploit Privesc 模块 Get-ApplicationHost:从 IIS applicationHost.config 解密恢复应用池与虚拟目录密码

发布时间:2026/9/23 1:57:43 来源:云帆数科 栏目:资讯中心
PowerSploit Privesc 模块 Get-ApplicationHost:从 IIS applicationHost.config 解密恢复应用池与虚拟目录密码
PowerSploit Privesc 模块 Get-ApplicationHost从 IIS applicationHost.config 解密恢复应用池与虚拟目录密码【免费下载链接】PowerSploitPowerSploit - A PowerShell Post-Exploitation Framework项目地址: https://gitcode.com/gh_mirrors/po/PowerSploit导读Get-ApplicationHost是 PowerSploit 项目 Privesc 模块 中提供的一个无参数 PowerShell 函数用于从目标系统的 IISapplicationHost.config配置文件中恢复解密应用程序池Application Pool与虚拟目录Virtual Directory中存储的加密凭据。它面向 Windows 上 IIS 6 及以上版本利用 IIS 自带的appcmd.exe命令行工具读取并解密配置项并把结果输出为可直接流入管道的结构化数据便于后续格式化与审计。读完本文你将掌握该函数的调用方式、输出结构、底层实现原理包括 DataTable 构建与 appcmd.exe 调用链以及它在提权/凭据收集场景中的定位与适用边界。函数概览Get-ApplicationHost的完整实现位于 Privesc/PowerUp.ps1其注释文档comment-based help与独立文档 docs/Privesc/Get-ApplicationHost.md 完全对应是 PowerUp 中杂项检查Miscellaneous Checks的一员。核心元信息如下项目内容功能从系统上的applicationHost.config恢复加密的应用池与虚拟目录密码作者Scott Sutherland2014NetSPI版本Get-ApplicationHost v1.0许可证BSD 3-Clause依赖无Required Dependencies: None兼容性IIS 6 及以上Should work on IIS 6 and Above输出类型System.Data.DataTable/System.Boolean参数无Param()为空[CmdletBinding()]函数通过 Privesc/Privesc.psd1 的FunctionsToExport导出同时也在顶层 PowerSploit.psd1 的导出清单中模块加载时由 Privesc/Privesc.psm1 以点源dot-source方式引入PowerUp.ps1等脚本文件。使用场景与威胁模型在 Windows 服务器提权与横向移动评估中IIS 站点管理员常常在applicationHost.config中为应用池进程身份process model identity和虚拟目录访问配置独立的域账号/本地账号。这些凭据会被 IIS 以机器级密钥加密保存普通文本查看applicationHost.config只能看到密文。Get-ApplicationHost的价值在于它借用 IIS 官方工具appcmd.exe的解密后输出能力把密文还原为明文从而让审计人员发现隐藏的高权限账号。该函数与 PowerUp 中的姊妹函数Get-WebConfig检查web.config中的加密连接字符串互补两者常配合用于完整收集 IIS 凭据面。语法与参数函数无参数语法极简Get-ApplicationHost从源码看Param()为空块仅声明了[CmdletBinding()]见 Privesc/PowerUp.ps1因此函数本身不接受位置参数或命名参数同时通过SuppressMessageAttribute压制了PSShouldProcess与PSAvoidUsingInvokeExpression两条 PSScriptAnalyzer 规则警告因为实现中使用了Invoke-Expression来构造 appcmd 命令见 Privesc/PowerUp.ps1。环境前提目标系统必须存在%SystemRoot%\System32\inetsrv\appcmd.exe即安装了 IIS 管理工具。源码在函数入口处用Test-Path检查该文件是否存在见 Privesc/PowerUp.ps1不存在时输出Write-Verbose Appcmd.exe does not exist in the default location.并返回$False。函数内部将$ErrorActionPreference临时设为SilentlyContinue并在结尾恢复见 Privesc/PowerUp.ps1因此即使某个池/目录读取失败也不会中断整体执行。输出结构详解函数将所有结果汇总到一张System.Data.DataTable中表结构在源码中通过$DataTable.Columns.Add(...)显式创建见 Privesc/PowerUp.ps1共 5 列列名含义应用池记录取值虚拟目录记录取值user凭据用户名processmodel.usernameuserNamepass明文密码processmodel.passwordpasswordtype记录类型Application PoolVirtual Directoryvdir虚拟目录名NAvdir.nameapppool应用池名池名称NA结果在返回前会经过Sort-Object type,user,pass,vdir,apppool排序并用Select-Object ... -Unique去重见 Privesc/PowerUp.ps1。若解析到至少一条凭据输出 DataTable 记录管道友好若未发现任何密码输出Write-Verbose No application pool or virtual directory passwords were found.并返回布尔值$False见 Privesc/PowerUp.ps1若appcmd.exe不存在返回$False。这也是文档中OUTPUTS同时列出System.Data.DataTable与System.Boolean两种类型的原因。使用示例示例 1默认列表视图输出直接运行即可返回所有应用池与虚拟目录凭据Get-ApplicationHost文档给出的典型输出如下字段以冒号分隔的列表形式呈现user : PoolUser1 pass : PoolParty1! type : Application Pool vdir : NA apppool : ApplicationPool1 user : PoolUser2 pass : PoolParty2! type : Application Pool vdir : NA apppool : ApplicationPool2 user : VdirUser1 pass : VdirPassword1! type : Virtual Directory vdir : site1/vdir1/ apppool : NA user : VdirUser2 pass : VdirPassword2! type : Virtual Directory vdir : site2/ apppool : NA示例 2管道 Format-Table 美化由于输出支持管道可将其导入Format-Table生成对齐表格Get-ApplicationHost | Format-Table -Autosize输出形如user pass type vdir apppool ---- ---- ---- ---- ------- PoolUser1 PoolParty1! Application Pool NA ApplicationPool1 PoolUser2 PoolParty2! Application Pool NA ApplicationPool2 VdirUser1 VdirPassword1! Virtual Directory site1/vdir1/ NA VdirUser2 VdirPassword2! Virtual Directory site2/ NA示例 3与 Web 配置检查组合使用Get-ApplicationHost专注于applicationHost.config中的应用池/虚拟目录凭据而Get-WebConfig负责扫描各站点的web.config连接字符串两者结果均为表格型数据可一并导出用于审计报告$AppHost Get-ApplicationHost $WebConfigs Get-WebConfig $AppHost $WebConfigs | Format-Table -Autosize底层实现原理第一步定位并调用 appcmd.exe函数首先检查%SystemRoot%\System32\inetsrv\appcmd.exe是否存在。appcmd.exe是 IIS 7 自带的命令行管理工具支持以/text:参数直接输出指定配置项的解密后值——这正是本函数能够恢复明文密码的关键能力来源。第二步枚举应用池并提取凭据Invoke-Expression $Env:SystemRoot\System32\inetsrv\appcmd.exe list apppools /text:name | ForEach-Object { $PoolName $_ $PoolUserCmd $Env:SystemRoot\System32\inetsrv\appcmd.exe list apppool $PoolName /text:processmodel.username $PoolUser Invoke-Expression $PoolUserCmd $PoolPasswordCmd $Env:SystemRoot\System32\inetsrv\appcmd.exe list apppool $PoolName /text:processmodel.password $PoolPassword Invoke-Expression $PoolPasswordCmd ... }实现细节见 Privesc/PowerUp.ps1用list apppools /text:name拿到所有应用池名称对每个池执行list apppool name /text:processmodel.username与/text:processmodel.password读取进程模型process model中配置的身份账号与密码过滤条件$PoolPassword -ne 且$PoolPassword -isnot [system.array]——后者用于排除该属性配置了多条值的异常情形确保只把单值密码加入结果写入 DataTableRows.Add($PoolUser, $PoolPassword, Application Pool, NA, $PoolName)。第三步枚举虚拟目录并提取凭据Invoke-Expression $Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir /text:vdir.name | ForEach-Object { $VdirName $_ $VdirUserCmd $Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir $VdirName /text:userName $VdirUser Invoke-Expression $VdirUserCmd $VdirPasswordCmd $Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir $VdirName /text:password $VdirPassword Invoke-Expression $VdirPasswordCmd ... }实现细节见 Privesc/PowerUp.ps1用list vdir /text:vdir.name枚举全部虚拟目录对每个目录执行list vdir name /text:userName与/text:password同样的空值与数组过滤后写入 DataTableRows.Add($VdirUser, $VdirPassword, Virtual Directory, $VdirName, NA)。第四步结果汇总与返回DataTable 记录数大于 0 时先按type,user,pass,vdir,apppool排序再-Unique去重后输出否则返回$False。测试验证仓库在 Tests/Privesc.tests.ps1 中为该函数提供了 Pester 测试用例Describe Get-ApplicationHost { It Should not throw. { {Get-ApplicationHost} | Should Not Throw } }该用例验证函数在任意环境即使appcmd.exe不存在下调用都不会抛出异常——得益于$ErrorActionPreference SilentlyContinue与Test-Path前置检查函数总能以优雅方式返回有数据返回 DataTable无环境/无数据返回$False。注意事项与适用边界权限要求读取并解密applicationHost.config中的凭据需要相应权限通常需管理员/高权限上下文。函数本身不包含提权逻辑它属于凭据收集而非漏洞利用工具。适用版本文档注释明确说明 Should work on IIS 6 and Above但appcmd.exe自 IIS 7 起才成为标准组件因此在较老的 IIS 6 环境中可能因缺少该工具而返回$False可加-Verbose查看具体原因。依赖系统工具函数强依赖appcmd.exe的存在与行为若 IIS 未安装或工具被加固移除将无法工作。脚本加载方式在 PowerSploit 环境中可通过导入模块使用Import-Module .\Privesc\Privesc.psd1由 Privesc/Privesc.psm1 点源加载PowerUp.ps1或直接点源脚本文件. .\Privesc\PowerUp.ps1后调用。输出语义DataTable 的-Unique去重基于排序后的全部五列理论上会消除完全重复的记录如只需用户/密码对可自行Select-Object user,pass -Unique进一步收敛。【免费下载链接】PowerSploitPowerSploit - A PowerShell Post-Exploitation Framework项目地址: https://gitcode.com/gh_mirrors/po/PowerSploit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

深度强化学习求解动态图最短路径:DQN实战指南
深度强化学习求解动态图最短路径:DQN实战指南

简介:这是一份面向人工智能与算法学习者的深度强化学习实践代码包,聚焦于使用Deep Q-Network(DQN)求解图结构中的最短路径问题,适用于具备Python基础与强化学习入门知识的开发者、高校学生及算法爱好者。资源包含8个文… · 2026/9/23 1:57:43

PowerSploit PowerView 的 Find-InterestingFile 深度指南:按关键词递归搜索敏感文件的侦察利器
PowerSploit PowerView 的 Find-InterestingFile 深度指南:按关键词递归搜索敏感文件的侦察利器

PowerSploit PowerView 的 Find-InterestingFile 深度指南:按关键词递归搜索敏感文件的侦察利器 【免费下载链接】PowerSploit PowerSploit - A PowerShell Post-Exploitation Framework 项目地址: https://gitcode.com/gh_mirrors/po/PowerSploit 导读 Fin… · 2026/9/23 1:57:43

Gel CLI `gel extension uninstall` 命令详解:扩展卸载与生命周期管理
Gel CLI `gel extension uninstall` 命令详解:扩展卸载与生命周期管理

数据库图数据库关系型数据库 【免费下载链接】edgedb Gel supercharges Postgres with a modern data model, graph queries, Auth & AI solutions, and much more. 项目地址: https://gitcode.com/gh_mirrors/ed/edgedb 点击查看 免费下载 gel extension unin… · 2026/9/23 1:57:36

栈数据结构深度解析:从函数调用到堆栈溢出实战
栈数据结构深度解析:从函数调用到堆栈溢出实战

1. 堆栈究竟是什么:从生活场景到核心抽象如果你接触过数据结构,哪怕只是刚开始准备考研、刷LeetCode,或者在学校里正在为《数据结构》实验报告发愁,那“堆栈”这个词你一定不陌生。它还有个别名叫“栈”,英文叫Stack。… · 2026/9/23 5:39:44

management缩写避坑指南:3个常见误区+完整示例
management缩写避坑指南:3个常见误区+完整示例

management缩写避坑指南:3个常见误区+完整示例 官方文档翻了三遍还是记不住 management 的缩写?别慌,这不是你笨,是文档写法反人类。我见过太多开发者在配置 API 或解析日志时,因为搞混 mgmt 、 mgt 、… · 2026/9/23 5:39:44

SpringBoot+Vue箱包仓储管理系统全栈开发实践
SpringBoot+Vue箱包仓储管理系统全栈开发实践

1. 项目概述:箱包存储系统信息管理解决方案箱包存储系统信息管理系统是一套针对仓储物流行业设计的全栈解决方案,它完美结合了SpringBoot后端的高效稳定、Vue前端的灵活交互以及MySQL的数据可靠性。这个开箱即用的系统特别适合中小型物流企业、电商仓库以… · 2026/9/23 5:39:44

搞定n代表什么数:附完整示例与性能优化实战
搞定n代表什么数:附完整示例与性能优化实战

搞定n代表什么数:附完整示例与性能优化实战 你复制来的代码跑不通,是不是经常卡在这里?别急,今天我们不聊虚的,直接上 完整示例 ,带你彻底搞懂循环变量 n 在性能优化里的坑。很多老手都栽在这上面,以为 n 只是个数,其实它决定了你的算法是… · 2026/9/23 5:39:44

从拟声词到网络热词:cua如何成为全网通用梗
从拟声词到网络热词:cua如何成为全网通用梗

最近不管是刷短视频,还是混在各种聊天群里,你大概率都见过这个词:cua。别看它只有三个字母,现在它已经不是一个简单的拟声词了,而是一种状态、一种情绪、一种“事情就这么发生了”的叙述方式。今天想好好聊聊它&#x… · 2026/9/23 5:39:37

QEMU ACPI PCI 热插拔接口规范:从 IO 端口协议到 AML 生成的完整解析
QEMU ACPI PCI 热插拔接口规范:从 IO 端口协议到 AML 生成的完整解析

QEMU ACPI PCI 热插拔接口规范:从 IO 端口协议到 AML 生成的完整解析 【免费下载链接】qemu Official QEMU mirror. Please see https://www.qemu.org/contribute/ for how to submit changes to QEMU. Pull Requests are disabled. Please only use release tarbal… · 2026/9/23 5:39:37

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码