トークンの悪用
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
トークン
もしWindows Access Tokensが何か分からない場合は、続ける前にこのページを読んでください:
既に持っているトークンを悪用して特権を昇格できるかもしれません
SeImpersonatePrivilege
これは、ハンドルを取得できる限り、任意のトークンの偽装(ただし作成は不可)を許可するプロセスが保持する特権です。特権トークンは、Windowsサービス(DCOM)からNTLM認証を行うように誘導することで取得でき、その後、SYSTEM特権でプロセスを実行することが可能になります。この脆弱性は、juicy-potato、RogueWinRM(winrmが無効である必要があります)、SweetPotato、およびPrintSpooferなどのさまざまなツールを使用して悪用できます。
RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotato
SeAssignPrimaryPrivilege
これはSeImpersonatePrivilegeに非常に似ており、特権トークンを取得するために同じ方法を使用します。
この特権は、新しい/一時停止中のプロセスにプライマリトークンを割り当てることを許可します。特権の偽装トークンを使用してプライマリトークンを派生させることができます(DuplicateTokenEx)。
このトークンを使用して、'CreateProcessAsUser'で新しいプロセスを作成するか、一時停止したプロセスを作成してトークンを設定できます(一般的に、実行中のプロセスのプライマリトークンを変更することはできません)。
SeTcbPrivilege
このトークンが有効になっている場合、KERB_S4U_LOGONを使用して、資格情報を知らなくても他のユーザーの偽装トークンを取得でき、任意のグループ(管理者)をトークンに追加し、トークンの整合性レベルを「中」に設定し、このトークンを現在のスレッドに割り当てることができます(SetThreadToken)。
SeBackupPrivilege
この特権により、システムは任意のファイルにすべての読み取りアクセス制御を付与します(読み取り操作に制限されます)。これは、レジストリからローカル管理者アカウントのパスワードハッシュを読み取るために利用され、その後、"psexec"や"wmiexec"などのツールをハッシュと共に使用できます(Pass-the-Hash技術)。ただし、この技術は、ローカル管理者アカウントが無効になっている場合や、リモート接続するローカル管理者から管理権限を削除するポリシーがある場合に失敗します。
この特権を悪用することができます:
- https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1
- https://github.com/giuliano108/SeBackupPrivilege/tree/master/SeBackupPrivilegeCmdLets/bin/Debug
- https://www.youtube.com/watch?v=IfCysW0Od8w&t=2610&ab_channel=IppSecのIppSecをフォローする
- または、以下のセクションのバックアップオペレーターによる特権の昇格で説明されているように:
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_DRIVER
(0x00000001
)。
従うべき手順:
- 制限された書き込みアクセスのために
HKLM
の代わりにHKCU
にアクセスします。 HKCU
内に\Registry\User\<RID>\System\CurrentControlSet\Services\DriverName
のパスを作成します。ここで<RID>
は現在のユーザーの相対識別子を表します。ImagePath
をバイナリの実行パスに設定します。Type
をSERVICE_KERNEL_DRIVER
(0x00000001
)として割り当てます。
# 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 を変更して書き込み操作を有効にすることを含みます。
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
シェルを取得したい場合は、次のものを使用できます:
# 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を使用してすべてのトークンを有効にすることができます:
.\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.
Privilege | Impact | Tool | Execution path | Remarks |
---|---|---|---|---|
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を読み取ることができる場合、より興味深いかもしれません。 |
SeCreateToken | Admin | 3rd party tool | NtCreateToken を使用してローカル管理者権限を含む任意のトークンを作成します。 | |
SeDebug | Admin | PowerShell | lsass.exe トークンを複製します。 | Script to be found at FuzzySecurity |
SeLoadDriver | Admin | 3rd party tool | 1. | 1. |
SeRestore | Admin | PowerShell | 1. SeRestore特権を持ってPowerShell/ISEを起動します。 | 攻撃は一部のAVソフトウェアによって検出される可能性があります。 代替手法は、同じ特権を使用して「Program Files」に保存されたサービスバイナリを置き換えることに依存します。 |
SeTakeOwnership | Admin | Built-in commands | 1. | 攻撃は一部のAVソフトウェアによって検出される可能性があります。 代替手法は、同じ特権を使用して「Program Files」に保存されたサービスバイナリを置き換えることに依存します。 |
SeTcb | Admin | 3rd party tool | トークンを操作してローカル管理者権限を含めることができます。SeImpersonateが必要な場合があります。 確認が必要です。 |
Reference
- Take a look to this table defining Windows tokens: https://github.com/gtworek/Priv2Admin
- Take a look to this paper about privesc with tokens.
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。