
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
Include all "extended" checks in the scan.
-Audit
Include all "audit" checks in the scan.
-Risky
Include all "risky" checks in the scan. Those are checks that are
likely to trigger active EDR counter measures due to their behavior.
-Report <FORMAT>[,...]
Specify output report file formats (TXT, HTML, CSV, XML). Use alias
'ALL' to generate all report files. By default, the output filename
is automatically generated. Use option '-FilePath' to specify one
explicitly.
-FilePath <PREFIX>
Specify the output report file name or directory. The file extension
is automatically appended. If a directory path is supplied, the
filename is automatically generated at runtime.
-Silent
Suppress terminal output. This can be useful if you want to run the
script as part of a batch file, in a scheduled task for instance.
-Force
Force execution and ignore warnings. Typically, the script stops if
it is executed with administrator privileges. Use this option to
execute it anyway.
レポートファイル形式
レポートファイル形式 > TXT
オプション -Report TXT を使用して 生テキストレポート を生成します。出力はターミナル出力と似ていますが、テキストエディタとの互換性を高めるため、ASCII 文字のみが含まれます。

レポートファイル形式 > HTML
オプション -Report HTML を使用して HTML レポート を生成します。出力ファイルは Web ブラウザで開くことができます。外部依存関係がないため、インターネット接続は不要です。生テキストレポートよりもデータの可視化に便利です。さらに、ソート および フィルタリング 機能も提供します!

レポートファイル形式 > 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 では依然としてデフォルトで有効になっています(PowerShell 2.0 removal from Windows) が、手動インストールが必要な .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"
クレジット
- Word list - CBHue/PyFuscation
- Known vulnerable driver list - https://www.loldrivers.io/