返回更新列表
新发布Sep 22, 2026

PrivescCheck v2026.09.21-1

Windows 权限提升枚举脚本

分享

PrivescCheck

快速识别常见的 Windows 漏洞配置问题,这些问题不一定被公共安全标准所覆盖,并收集用于利用和后利用任务的有用信息。

[!IMPORTANT] 使用此工具时需要注意的一个重要方面是,所有访问控制检查都是在当前用户的上下文中完成的。因此,如果以管理员权限运行,许多漏洞检查会被跳过,以避免生成错误的发现结果。

快速开始

在此处下载脚本:PrivescCheck.ps1

[!TIP] 上面的链接也可以直接在 PowerShell 终端中使用 (New-Object Net.WebClient).DownloadString(...) 来使用。

用例 1:快速评估

powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Report TXT,HTML"

用例 2:扩展评估

powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Report TXT,HTML"

用例 3:全面评估

powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Audit -Report ALL"

详细用法

Invoke-PrivescCheck [-Extended] [-Audit] [-Risky] [-Report <FORMAT>[,...]]
    [-FilePath <PREFIX>]  [-Silent] [-Force]

    -Extended
        在扫描中包含所有“扩展”检查。

    -Audit
        在扫描中包含所有“审计”检查。

    -Risky
        在扫描中包含所有“高风险”检查。这些检查由于其行为,
        很可能会触发主动的 EDR 反制措施。

    -Report <FORMAT>[,...]
        指定输出报告文件格式(TXT、HTML、CSV、XML)。使用别名
        'ALL' 生成所有报告文件。默认情况下,输出文件名
        会自动生成。使用选项 '-FilePath' 显式指定
        文件名。

    -FilePath <PREFIX>
        指定输出报告文件名或目录。文件扩展名
        会自动附加。如果提供的是目录路径,
        文件名会在运行时自动生成。

    -Silent
        抑制终端输出。如果你想将脚本作为批处理文件的一部分运行,
        例如在计划任务中,这会很有用。

    -Force
        强制运行并忽略警告。通常,如果脚本以管理员权限执行,
        它会停止。使用此选项可以
        无论如何都执行它。

报告文件格式

报告文件格式 > TXT

使用选项 -Report TXT 生成 原始文本报告。输出与终端输出类似,不同之处在于它只包含 ASCII 字符,以便更好地兼容文本编辑器。

PrivescCheck 生成的原始文本报告截图

报告文件格式 > HTML

使用选项 -Report HTML 生成 HTML 报告。输出文件可以在 Web 浏览器中打开。不需要 Internet 连接,因为它没有外部依赖项。与原始文本报告相比,它更便于可视化数据。此外,它还提供 排序筛选 功能!

PrivescCheck 生成的 HTML 报告截图

报告文件格式 > CSV 或 XML

使用选项 -Report CSV-Report XML 生成 CSV 或 XML 报告。输出文件旨在便于自动化报告工具解析结果。

[!NOTE] 尽管输出格式(目前)尚未文档化,但你可以通过分析已生成文件的结构轻松弄清楚它。你可以将每个检查的 Id 值用作唯一标识符。

检查类型

检查类型 > Base

类型为 Base 的检查将始终执行,除非脚本以管理员身份运行。它们主要用于识别权限提升漏洞或其他重要问题。

检查类型 > Extended

类型为 Extended 的检查只有在命令行中指定了选项 -Extended 时才能执行。它们主要用于提供可能对漏洞利用开发或后利用有用的附加信息。

检查类型 > 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

绕过 Constrained Language Mode 的一种常见方法是使用 PSv2,因为它没有实现此保护。因此,相当一部分开发工作都用于维护这种向后兼容性。

[!NOTE] 尽管 PowerShell 版本 2 在最近的 Windows 版本中仍默认启用从 Windows 中移除 PowerShell 2.0),但如果没有 .Net framework 版本 2.0,它就无法运行,而后者需要手动安装。

Metasploit 超时

如果你在 Meterpreter 会话中运行此脚本,你很可能会遇到“超时”错误。这是因为 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"

构建脚本使用带有随机生成的 seed 的伪随机数生成器为每个模块选择变量名。如果你想在多次构建之间生成可重现的结果,可以使用选项 -NoNewSeed 选择重用先前生成的 seed

powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewSeed"

构建脚本使用带有随机生成的 key 的 AES 加密来混淆每个模块的内容。如果你想在多次构建之间生成可重现的结果,可以使用选项 -NoNewKey 选择重用先前生成的 key

powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewKey"

致谢

分类