トークンの悪用

Reading time: 16 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

トークン

もしWindows Access Tokensが何か分からない場合は、続ける前にこのページを読んでください:

Access Tokens

既に持っているトークンを悪用して特権を昇格できるかもしれません

SeImpersonatePrivilege

これは、ハンドルを取得できる限り、任意のトークンの偽装(ただし作成は不可)を許可するプロセスが保持する特権です。特権トークンは、Windowsサービス(DCOM)からNTLM認証を行うように誘導することで取得でき、その後、SYSTEM特権でプロセスを実行することが可能になります。この脆弱性は、juicy-potatoRogueWinRM(winrmが無効である必要があります)、SweetPotato、およびPrintSpooferなどのさまざまなツールを使用して悪用できます。

RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotato

JuicyPotato

SeAssignPrimaryPrivilege

これはSeImpersonatePrivilegeに非常に似ており、特権トークンを取得するために同じ方法を使用します。
この特権は、新しい/一時停止中のプロセスにプライマリトークンを割り当てることを許可します。特権の偽装トークンを使用してプライマリトークンを派生させることができます(DuplicateTokenEx)。
このトークンを使用して、'CreateProcessAsUser'で新しいプロセスを作成するか、一時停止したプロセスを作成してトークンを設定できます(一般的に、実行中のプロセスのプライマリトークンを変更することはできません)。

SeTcbPrivilege

このトークンが有効になっている場合、KERB_S4U_LOGONを使用して、資格情報を知らなくても他のユーザーの偽装トークンを取得でき、任意のグループ(管理者)をトークンに追加し、トークンの整合性レベルを「」に設定し、このトークンを現在のスレッドに割り当てることができます(SetThreadToken)。

SeBackupPrivilege

この特権により、システムは任意のファイルにすべての読み取りアクセス制御を付与します(読み取り操作に制限されます)。これは、レジストリからローカル管理者アカウントのパスワードハッシュを読み取るために利用され、その後、"psexec"や"wmiexec"などのツールをハッシュと共に使用できます(Pass-the-Hash技術)。ただし、この技術は、ローカル管理者アカウントが無効になっている場合や、リモート接続するローカル管理者から管理権限を削除するポリシーがある場合に失敗します。
この特権を悪用することができます:

Privileged Groups

SeRestorePrivilege

この特権は、ファイルのアクセス制御リスト(ACL)に関係なく、任意のシステムファイルへの書き込みアクセスを提供します。これにより、サービスの変更、DLLハイジャッキングの実行、さまざまな他の技術の中でImage File Execution Optionsを介してデバッガーを設定するなど、特権昇格のための多くの可能性が開かれます。

SeCreateTokenPrivilege

SeCreateTokenPrivilegeは強力な権限であり、特にユーザーがトークンを偽装する能力を持っている場合に便利ですが、SeImpersonatePrivilegeがない場合にも有用です。この能力は、同じユーザーを表すトークンを偽装する能力に依存し、その整合性レベルが現在のプロセスのそれを超えないことが条件です。

重要なポイント:

  • SeImpersonatePrivilegeなしの偽装: 特定の条件下でトークンを偽装することで、EoPのためにSeCreateTokenPrivilegeを利用することが可能です。
  • トークン偽装の条件: 成功する偽装には、ターゲットトークンが同じユーザーに属し、整合性レベルが偽装を試みるプロセスの整合性レベル以下である必要があります。
  • 偽装トークンの作成と変更: ユーザーは偽装トークンを作成し、特権グループのSID(セキュリティ識別子)を追加することで強化できます。

SeLoadDriverPrivilege

この特権は、特定の値を持つレジストリエントリを作成することでデバイスドライバをロードおよびアンロードすることを許可します。HKLM(HKEY_LOCAL_MACHINE)への直接書き込みアクセスが制限されているため、HKCU(HKEY_CURRENT_USER)を代わりに使用する必要があります。ただし、ドライバ構成のためにHKCUをカーネルに認識させるには、特定のパスに従う必要があります。

このパスは\Registry\User\<RID>\System\CurrentControlSet\Services\DriverNameであり、<RID>は現在のユーザーの相対識別子です。HKCU内でこの全パスを作成し、2つの値を設定する必要があります:

  • ImagePath、実行されるバイナリへのパス
  • Type、値はSERVICE_KERNEL_DRIVER0x00000001)。

従うべき手順:

  1. 制限された書き込みアクセスのためにHKLMの代わりにHKCUにアクセスします。
  2. HKCU内に\Registry\User\<RID>\System\CurrentControlSet\Services\DriverNameのパスを作成します。ここで<RID>は現在のユーザーの相対識別子を表します。
  3. ImagePathをバイナリの実行パスに設定します。
  4. TypeSERVICE_KERNEL_DRIVER0x00000001)として割り当てます。
python
# Example Python code to set the registry values
import winreg as reg

# Define the path and values
path = r'Software\YourPath\System\CurrentControlSet\Services\DriverName' # Adjust 'YourPath' as needed
key = reg.OpenKey(reg.HKEY_CURRENT_USER, path, 0, reg.KEY_WRITE)
reg.SetValueEx(key, "ImagePath", 0, reg.REG_SZ, "path_to_binary")
reg.SetValueEx(key, "Type", 0, reg.REG_DWORD, 0x00000001)
reg.CloseKey(key)

より多くの方法でこの特権を悪用することができます https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege

SeTakeOwnershipPrivilege

これは SeRestorePrivilege に似ています。その主な機能は、プロセスが オブジェクトの所有権を引き受ける ことを可能にし、WRITE_OWNER アクセス権を提供することで明示的な裁量的アクセスの要件を回避します。このプロセスは、まず書き込み目的のために対象のレジストリキーの所有権を確保し、その後 DACL を変更して書き込み操作を有効にすることを含みます。

bash
takeown /f 'C:\some\file.txt' #Now the file is owned by you
icacls 'C:\some\file.txt' /grant <your_username>:F #Now you have full access
# Use this with files that might contain credentials such as
%WINDIR%\repair\sam
%WINDIR%\repair\system
%WINDIR%\repair\software
%WINDIR%\repair\security
%WINDIR%\system32\config\security.sav
%WINDIR%\system32\config\software.sav
%WINDIR%\system32\config\system.sav
%WINDIR%\system32\config\SecEvent.Evt
%WINDIR%\system32\config\default.sav
c:\inetpub\wwwwroot\web.config

SeDebugPrivilege

この特権は、他のプロセスをデバッグすることを許可し、メモリの読み書きが可能です。この特権を使用して、ほとんどのアンチウイルスおよびホスト侵入防止ソリューションを回避できるメモリ注入のさまざまな戦略を採用できます。

メモリのダンプ

ProcDumpを使用して、SysInternals Suiteからプロセスのメモリをキャプチャできます。具体的には、ユーザーがシステムに正常にログインした後にユーザーの資格情報を保存するローカル セキュリティ認証サブシステム サービス(LSASS**)**プロセスに適用できます。

その後、このダンプをmimikatzにロードしてパスワードを取得できます:

mimikatz.exe
mimikatz # log
mimikatz # sekurlsa::minidump lsass.dmp
mimikatz # sekurlsa::logonpasswords

RCE

NT SYSTEM シェルを取得したい場合は、次のものを使用できます:

bash
# Get the PID of a process running as NT SYSTEM
import-module psgetsys.ps1; [MyProcess]::CreateProcessFromParent(<system_pid>,<command_to_execute>)

権限を確認する

whoami /priv

無効として表示されるトークンは有効にすることができ、実際に_有効_および_無効_トークンを悪用することができます。

すべてのトークンを有効にする

トークンが無効になっている場合、スクリプトEnableAllTokenPrivs.ps1を使用してすべてのトークンを有効にすることができます:

bash
.\EnableAllTokenPrivs.ps1
whoami /priv

Or the script embed in this post.

Table

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.

PrivilegeImpactToolExecution pathRemarks
SeAssignPrimaryTokenAdmin3rd 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.
SeBackupThreatBuilt-in commandsrobocopy /bを使用して機密ファイルを読み取る

- %WINDIR%\MEMORY.DMPを読み取ることができる場合、より興味深いかもしれません。

- SeBackupPrivilege(およびrobocopy)は、オープンファイルに関しては役に立ちません。

- Robocopyは、/bパラメータで動作するためにSeBackupとSeRestoreの両方を必要とします。

SeCreateTokenAdmin3rd party toolNtCreateTokenを使用してローカル管理者権限を含む任意のトークンを作成します。
SeDebugAdminPowerShelllsass.exeトークンを複製します。Script to be found at FuzzySecurity
SeLoadDriverAdmin3rd party tool

1. szkg64.sysのようなバグのあるカーネルドライバーをロードします。
2. ドライバの脆弱性を悪用します。

または、ftlMCビルトインコマンドを使用してセキュリティ関連のドライバーをアンロードするためにこの特権を使用できます。すなわち:fltMC sysmondrv

1. szkg64の脆弱性はCVE-2018-15732としてリストされています。
2. szkg64エクスプロイトコードParvez Anwarによって作成されました。

SeRestoreAdminPowerShell

1. SeRestore特権を持ってPowerShell/ISEを起動します。
2. Enable-SeRestorePrivilegeで特権を有効にします。
3. utilman.exeをutilman.oldに名前変更します。
4. cmd.exeをutilman.exeに名前変更します。
5. コンソールをロックし、Win+Uを押します。

攻撃は一部のAVソフトウェアによって検出される可能性があります。

代替手法は、同じ特権を使用して「Program Files」に保存されたサービスバイナリを置き換えることに依存します。

SeTakeOwnershipAdminBuilt-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」に保存されたサービスバイナリを置き換えることに依存します。

SeTcbAdmin3rd party tool

トークンを操作してローカル管理者権限を含めることができます。SeImpersonateが必要な場合があります。

確認が必要です。

Reference

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする