Abusing Tokens
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Windowsアクセス・トークンが何か分からない場合は、続行する前にこのページを読んでください:
Access Tokens既に持っているトークンを悪用して特権を昇格できるかもしれません
これは、ハンドルを取得できる限り、任意のトークンの偽装(ただし作成は不可)を許可するプロセスが保持する特権です。特権トークンは、Windowsサービス(DCOM)からNTLM認証を行うように誘導することで取得でき、その後、SYSTEM特権でプロセスを実行することが可能になります。この脆弱性は、juicy-potato、RogueWinRM(winrmが無効である必要があります)、SweetPotato、およびPrintSpooferなどのさまざまなツールを使用して悪用できます。
RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotatoJuicyPotatoこれはSeImpersonatePrivilegeに非常に似ており、特権トークンを取得するために同じ方法を使用します。 次に、この特権は新しい/一時停止中のプロセスにプライマリトークンを割り当てることを許可します。特権の偽装トークンを使用してプライマリトークンを派生させることができます(DuplicateTokenEx)。 トークンを使用して、'CreateProcessAsUser'で新しいプロセスを作成するか、一時停止したプロセスを作成してトークンを設定できます(一般的に、実行中のプロセスのプライマリトークンを変更することはできません)。
このトークンが有効になっている場合、KERB_S4U_LOGONを使用して、資格情報を知らなくても他のユーザーの偽装トークンを取得でき、トークンに任意のグループ(管理者)を追加し、トークンの整合性レベルを「中」に設定し、このトークンを現在のスレッドに割り当てることができます(SetThreadToken)。
この特権により、システムは任意のファイルに対してすべての読み取りアクセス制御を付与します(読み取り操作に制限されます)。これは、レジストリからローカル管理者アカウントのパスワードハッシュを読み取るために利用され、その後、"psexec"や"wmiexec"などのツールをハッシュと共に使用できます(Pass-the-Hash技術)。ただし、この技術は、ローカル管理者アカウントが無効になっている場合や、リモート接続するローカル管理者から管理権限を削除するポリシーが適用されている場合に失敗します。 この特権を悪用することができます:
または、以下のバックアップオペレーターによる特権昇格セクションで説明されているように:
この特権により、ファイルのアクセス制御リスト(ACL)に関係なく、任意のシステムファイルへの書き込みアクセスが許可されます。これにより、サービスの変更、DLLハイジャックの実行、さまざまな技術の中でイメージファイル実行オプションを介してデバッガを設定するなど、特権昇格のための多くの可能性が開かれます。
SeCreateTokenPrivilegeは強力な権限であり、特にユーザーがトークンを偽装する能力を持っている場合に便利ですが、SeImpersonatePrivilegeがない場合にも有用です。この能力は、同じユーザーを表すトークンを偽装する能力に依存し、その整合性レベルが現在のプロセスの整合性レベルを超えないことが条件です。
重要なポイント:
SeImpersonatePrivilegeなしの偽装: 特定の条件下でトークンを偽装することで、EoPのためにSeCreateTokenPrivilegeを利用することが可能です。
トークン偽装の条件: 成功する偽装には、ターゲットトークンが同じユーザーに属し、整合性レベルが偽装を試みるプロセスの整合性レベル以下である必要があります。
偽装トークンの作成と変更: ユーザーは偽装トークンを作成し、特権グループのSID(セキュリティ識別子)を追加することで強化できます。
この特権により、特定の値を持つレジストリエントリを作成することでデバイスドライバをロードおよびアンロードできます。HKLM
(HKEY_LOCAL_MACHINE)への直接書き込みアクセスが制限されているため、HKCU
(HKEY_CURRENT_USER)を代わりに使用する必要があります。ただし、ドライバ設定のためにHKCU
をカーネルに認識させるには、特定のパスに従う必要があります。
このパスは\Registry\User\<RID>\System\CurrentControlSet\Services\DriverName
であり、<RID>
は現在のユーザーの相対識別子です。HKCU
内でこの全パスを作成し、2つの値を設定する必要があります:
ImagePath
、実行されるバイナリへのパス
Type
、値はSERVICE_KERNEL_DRIVER
(0x00000001
)。
従うべき手順:
制限された書き込みアクセスのためにHKLM
の代わりにHKCU
にアクセスします。
HKCU
内に\Registry\User\<RID>\System\CurrentControlSet\Services\DriverName
のパスを作成します。ここで、<RID>
は現在のユーザーの相対識別子を表します。
ImagePath
をバイナリの実行パスに設定します。
Type
をSERVICE_KERNEL_DRIVER
(0x00000001
)として割り当てます。
More ways to abuse this privilege in https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege
これはSeRestorePrivilegeに似ています。その主な機能は、プロセスがオブジェクトの所有権を引き受けることを可能にし、WRITE_OWNERアクセス権を提供することで明示的な裁量的アクセスの要件を回避します。このプロセスは、まず書き込み目的のために対象のレジストリキーの所有権を確保し、その後DACLを変更して書き込み操作を有効にすることを含みます。
この特権は、他のプロセスをデバッグすることを許可し、メモリの読み書きが可能です。この特権を使用して、ほとんどのアンチウイルスおよびホスト侵入防止ソリューションを回避できるメモリ注入のさまざまな戦略を実行できます。
ProcDumpを使用して、SysInternals Suiteからプロセスのメモリをキャプチャできます。具体的には、ユーザーがシステムに正常にログインした後にユーザーの資格情報を保存するローカルセキュリティ機関サブシステムサービス(LSASS**)**プロセスに適用できます。
その後、このダンプをmimikatzにロードしてパスワードを取得できます:
NT SYSTEM
シェルを取得したい場合は、次のものを使用できます:
無効として表示されるトークンは有効にすることができ、実際に_有効_および_無効_トークンを悪用することができます。
トークンが無効になっている場合は、スクリプトEnableAllTokenPrivs.ps1を使用してすべてのトークンを有効にすることができます:
Or the script embed in this post.
Full token privileges cheatsheet at https://github.com/gtworek/Priv2Admin, summary below will only list direct ways to exploit the privilege to obtain an admin session or read sensitive files.
SeAssignPrimaryToken
Admin
3rd party tool
"ユーザーがトークンを偽装し、potato.exe、rottenpotato.exe、juicypotato.exeなどのツールを使用してntシステムに昇格することを可能にします"
Thank you Aurélien Chalot for the update. I will try to re-phrase it to something more recipe-like soon.
SeBackup
Threat
Built-in commands
robocopy /b
を使用して機密ファイルを読み取る
- %WINDIR%\MEMORY.DMPを読み取ることができる場合、より興味深いかもしれません。
- SeBackupPrivilege
(およびrobocopy)は、オープンファイルに関しては役に立ちません。
- Robocopyは、/bパラメータで動作するためにSeBackupとSeRestoreの両方を必要とします。
SeCreateToken
Admin
3rd party tool
NtCreateToken
を使用してローカル管理者権限を含む任意のトークンを作成します。
SeLoadDriver
Admin
3rd party tool
1. szkg64.sys
のようなバグのあるカーネルドライバをロードします。
2. ドライバの脆弱性を悪用します。
または、この特権を使用して、ftlMC
ビルトインコマンドでセキュリティ関連のドライバをアンロードすることができます。例:fltMC sysmondrv
1. szkg64
の脆弱性はCVE-2018-15732としてリストされています。
2. szkg64
のエクスプロイトコードはParvez Anwarによって作成されました。
SeRestore
Admin
PowerShell
1. SeRestore特権を持つ状態でPowerShell/ISEを起動します。 2. Enable-SeRestorePrivilegeで特権を有効にします。 3. utilman.exeをutilman.oldに名前変更します。 4. cmd.exeをutilman.exeに名前変更します。 5. コンソールをロックし、Win+Uを押します。
攻撃は一部のAVソフトウェアによって検出される可能性があります。
代替方法は、同じ特権を使用して「Program Files」に保存されたサービスバイナリを置き換えることに依存します。
SeTakeOwnership
Admin
Built-in commands
1. takeown.exe /f "%windir%\system32"
2. icalcs.exe "%windir%\system32" /grant "%username%":F
3. cmd.exeをutilman.exeに名前変更します。
4. コンソールをロックし、Win+Uを押します。
攻撃は一部のAVソフトウェアによって検出される可能性があります。
代替方法は、同じ特権を使用して「Program Files」に保存されたサービスバイナリを置き換えることに依存します。
SeTcb
Admin
3rd party tool
トークンを操作してローカル管理者権限を含めます。SeImpersonateが必要な場合があります。
確認が必要です。
Take a look to this table defining Windows tokens: https://github.com/gtworek/Priv2Admin
Take a look to this paper about privesc with tokens.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)