
PrivescCheck v2026.09.02-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文字のみが含まれます。

レポートファイル形式 > 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では依然としてデフォルトで有効になっています(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"
クレジット
- ワードリスト - CBHue/PyFuscation
- 既知の脆弱なドライバリスト - https://www.loldrivers.io/