
PrivescCheck v2026.08.19-1
Windows 权限提升枚举脚本
PrivescCheck
快速识别常见的 Windows 漏洞和配置问题,这些问题不一定被公共安全标准所覆盖,并收集可用于利用和后渗透任务的有用信息。
[!IMPORTANT] 使用此工具时需要了解的一个主要方面是,所有访问控制检查都是在当前用户的上下文中执行的。因此,如果以管理员权限运行,许多漏洞检查实际上会被跳过,以避免产生错误的发现结果。
🚀 快速开始
在此处下载脚本:PrivescCheck.ps1
[!TIP] 上述链接也可以在 PowerShell 终端中直接使用,配合
(New-Object Net.WebClient).DownloadString(...)。
用例 1(渗透测试):仅运行基本检查
是否存在明显的本地提权方式?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck"
用例 2(研究):运行扩展检查 + 生成人类可读报告
是否存在可用于后渗透或发现第三方软件漏洞的额外信息?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Report PrivescCheck_$($env:COMPUTERNAME) -Format TXT,HTML"
用例 3(审计):运行所有检查 + 生成所有报告
是否存在公共安全标准未覆盖的配置问题?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Audit -Report PrivescCheck_$($env:COMPUTERNAME) -Format TXT,HTML,CSV,XML"
📖 详细用法
Invoke-PrivescCheck [-Extended] [-Audit] [-Experimental] [-Report <PREFIX>]
[-Format <FORMAT>[,...]] [-Risky] [-Silent] [-Force]
-Extended
在扫描中包含所有"扩展"检查(参见 README)。
-Audit
在扫描中包含所有"审计"检查。
-Experimental
在扫描中包含所有"实验性"检查。仅在您了解其用途时使用。
-Report <PREFIX>
生成至少一个报告文件。默认输出文件名为
"PREFIX.txt"。扩展名会根据报告格式自动追加
(参见 "-Format <FORMAT>[,...]")。
-Format <FORMAT>[,...]
指定输出报告文件的格式。如果未设置,默认值为
"TXT"。支持的格式包括:"TXT"、"HTML"、"CSV" 和 "XML"。
-Risky
包含标记为"高风险"的检查,即可能触发端点保护解决方案
阻止操作的检查。请谨慎使用。
-Silent
抑制终端输出。如果您希望将脚本作为批处理文件的一部分运行,
例如在计划任务中,此选项非常有用。
-Force
强制执行并忽略警告。通常,如果以管理员权限执行,
脚本会停止运行。使用此选项可强制继续执行。
报告格式 > TXT(-Format TXT)
使用选项 -Report <PREFIX>(配合 -Format TXT)来指定生成纯文本报告。输出内容与终端中看到的内容类似,但仅包含 ASCII 字符,以便更好地兼容所有文本编辑器。

报告格式 > HTML(-Format HTML)
使用选项 -Report <PREFIX> 配合 -Format HTML 来指定生成 HTML 报告。输出文件可以在 Web 浏览器中打开。与纯文本报告相比,它更便于数据可视化。此外,它还提供排序和筛选功能!

报告格式 > CSV(-Format CSV)和 XML(-Format XML)
使用选项 -Report <PREFIX> 配合 -Format CSV 或 -Format XML 来指定生成 CSV 或 XML 报告。输出文件旨在方便自动化报告工具解析结果。
[!NOTE] 尽管输出格式尚未文档化(目前),但您可以通过分析已生成文件的结构轻松了解其格式。您可以使用每个检查的
Id值来唯一标识它们。
检查类型 > 基础(Base)
Base 类型的检查将始终执行,除非脚本以管理员身份运行。它们主要用于识别提权漏洞或其他重要问题。
检查类型 > 扩展(Extended)(-Extended)
Extended 类型的检查仅在命令行中指定 -Extended 选项时才会执行。它们主要用于提供可能对漏洞利用开发或后渗透有用的额外信息。
检查类型 > 审计(Audit)(-Audit)
Audit 类型的检查仅在命令行中指定 -Audit 选项时才会执行。它们主要用于提供与配置审计相关的信息。
💡 提示与技巧
PowerShell 执行策略
默认情况下,当启动新的 powershell.exe 进程时,PowerShell 执行策略在客户端上设置为 Restricted,在服务器上设置为 RemoteSigned。这些策略会阻止(未签名)脚本的执行,但可以在当前作用域内按如下方式覆盖。
Set-ExecutionPolicy Bypass -Scope Process -Force
. .\PrivescCheck.ps1
但是,当执行策略通过 GPO 强制执行时,此技巧无效。在这种情况下,启动新的 PowerShell 会话后,可以按如下方式加载脚本。
Get-Content .\PrivescCheck.ps1 | Out-String | Invoke-Expression
PowerShell 版本 2
绕过受限语言模式的一种常见方法是使用 PSv2,因为它不实现此保护机制。因此,开发工作中有很大一部分用于维护这种向后兼容性。
[!NOTE] 尽管 PowerShell 版本 2
在较新版本的 Windows 上仍默认启用(从 Windows 中移除 PowerShell 2.0),但它无法在没有 .Net Framework 版本 2.0 的情况下运行,而后者需要手动安装。
Metasploit 超时
如果您在 Meterpreter 会话中运行此脚本,很可能会遇到"timeout"错误。这是因为 Metasploit 使用默认的 15 秒超时值,而脚本的典型执行时间不足以在此时限内完成。
meterpreter > load powershell
Loading extension powershell...Success.
meterpreter > powershell_import /local/path/to/PrivescCheck.ps1
[+] File successfully imported. No result was returned.
meterpreter > powershell_execute "Invoke-PrivescCheck"
[-] Error running command powershell_execute: Rex::TimeoutError Operation timed out.
可以通过 sessions 命令的 -t 选项设置不同的超时值(文档)。在以下示例中,为 ID 为 1 的会话设置了 2 分钟的超时,但您可能需要设置更高的值。
msf6 exploit(multi/handler) > sessions -t 120 -i 1
[*] Starting interaction with 1...
meterpreter > powershell_execute "Invoke-PrivescCheck"
🏗️ 构建
更新数据
某些检查依赖于在线数据(例如 LOL 驱动程序数据库),但脚本旨在离线运行。为解决此问题,数据被嵌入到脚本中,因此需要定期更新。此过程在官方发布中完全自动化,但如果您想在本地构建脚本,也可以手动执行此操作。
powershell -ep bypass ". .\build\Build.ps1; Update-LolDriverFile"
构建脚本
构建脚本只需运行以下命令即可。输出文件将保存在 .\dist\ 文件夹中。
powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck"
构建脚本使用带有随机生成种子的伪随机数生成器来为每个模块选择变量名。如果您希望在多次构建之间生成可重现的结果,可以使用 -NoNewSeed 选项来复用先前生成的种子。
powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewSeed"
构建脚本使用带有随机生成密钥的 AES 加密来混淆每个模块的内容。如果您希望在多次构建之间生成可重现的结果,可以使用 -NoNewKey 选项来复用先前生成的密钥。
powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewKey"
📑 致谢
- 单词列表 - CBHue/PyFuscation
- 已知易受攻击的驱动程序列表 - https://www.loldrivers.io/