Tokensの悪用
Reading time: 17 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を提出してハッキングトリックを共有してください。
Tokens
もし Windows Access Tokens が何か分からない 場合は、先にこのページを読んでください:
既に持っている Tokens を悪用して権限昇格できる可能性があります
SeImpersonatePrivilege
この特権は、プロセスがそのトークンへのハンドルを取得できる場合に、任意のトークンのインパーソネーション(作成ではない)を許可します。特権付きトークンは、Windows サービス(DCOM)に対して NTLM 認証を行わせ、それをエクスプロイトに向けさせることで取得でき、結果として SYSTEM 権限でプロセスを実行できます。この脆弱性は juicy-potato、RogueWinRM(winrm を無効化している必要があります)、SweetPotato、PrintSpoofer などのツールで悪用可能です。
RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotato
SeAssignPrimaryPrivilege
SeImpersonatePrivilege と非常に似ており、同じ手法で特権トークンを取得します。
その後、この特権は 新規/サスペンドされたプロセスに primary token を割り当てる ことを許可します。特権的なインパーソネーショントークンから primary token を派生(DuplicateTokenEx)できます。
取得したトークンを使い、'CreateProcessAsUser' で 新しいプロセス を作成するか、プロセスをサスペンドして トークンを設定 できます(一般に、実行中のプロセスの primary token を変更することはできません)。
SeTcbPrivilege
このトークンが有効であれば、KERB_S4U_LOGON を使って資格情報を知らなくても任意のユーザの インパーソネーショントークン を取得し、トークンに任意のグループ(admins)を 追加 し、トークンの integrity level を "medium" に設定し、そのトークンを 現在のスレッド に割り当てる(SetThreadToken)ことができます。
SeBackupPrivilege
この特権はシステムに対して任意のファイルに対する すべての読み取りアクセス を付与させます(読み取り操作に限定)。レジストリからローカル Administrator のパスワードハッシュを 読み取る のに利用され、その後ハッシュを使って "psexec" や "wmiexec" のようなツールを使う(Pass-the-Hash 技術)ことができます。ただし、この手法はローカル Administrator アカウントが無効化されている場合、またはリモート接続時にローカル Administrators から管理権限を削除するポリシーがある場合には失敗します。
この特権は以下で 悪用 できます:
- https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1
- https://github.com/giuliano108/SeBackupPrivilege/tree/master/SeBackupPrivilegeCmdLets/bin/Debug
- IppSec の以下の解説に従う: https://www.youtube.com/watch?v=IfCysW0Od8w&t=2610&ab_channel=IppSec
- または、次の「escalating privileges with Backup Operators」セクションで説明されている方法:
SeRestorePrivilege
この特権はファイルの Access Control List (ACL) に関係なく、任意のシステムファイルへの 書き込みアクセス を許可します。これにより、サービスの 変更、DLL Hijacking の実行、Image File Execution Options を利用した デバッガ設定 など、さまざまな昇格手法が可能になります。
SeCreateTokenPrivilege
SeCreateTokenPrivilege は強力な権限で、特にユーザがトークンをインパーソネートできる場合に有用ですが、SeImpersonatePrivilege が無い状況でも役立ちます。この機能は、同じユーザを表すトークンで、かつそのトークンの integrity level が現在のプロセスのものを超えない場合にインパーソネートできることに依存します。
要点:
- SeImpersonatePrivilege が無くてもインパーソネーション: 特定の条件下でトークンをインパーソネートすることで、SeCreateTokenPrivilege を使った EoP が可能です。
- トークンインパーソネーションの条件: 成功するには、対象トークンが同一ユーザに属し、かつその integrity level がインパーソネートを試みるプロセスの integrity level 以下である必要があります。
- インパーソネーショントークンの作成・修正: インパーソネーショントークンを作成し、特権グループの SID(Security Identifier)を追加して拡張することが可能です。
SeLoadDriverPrivilege
この特権は ImagePath と Type に特定の値を持つレジストリエントリを作成することで、デバイスドライバを ロード/アンロード することを可能にします。HKLM (HKEY_LOCAL_MACHINE) への直接書き込みが制限されているため、代わりに HKCU (HKEY_CURRENT_USER) を使用する必要があります。しかし、カーネルがドライバ構成のために HKCU を認識するようにするには、特定のパスを辿る必要があります。
このパスは \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName で、<RID> は現在のユーザの Relative Identifier です。HKCU 内にこの全パスを作成し、次の二つの値を設定する必要があります:
ImagePath— 実行するバイナリへのパスType—SERVICE_KERNEL_DRIVER(0x00000001) の値
手順:
- 書き込みが制限されているため
HKLMではなくHKCUにアクセスする。 HKCU内に\Registry\User\<RID>\System\CurrentControlSet\Services\DriverNameを作成する(<RID>は現在のユーザの Relative Identifier)。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
この特権は、debug other processes(メモリの読み書きを含む)を許可します。ほとんどのアンチウイルスやホスト侵入防止ソリューションを回避できるような、様々なメモリ注入の手法をこの特権で実行できます。
Dump memory
ProcDump from the SysInternals Suite を使用して capture the memory of a process することができます。特に、これは Local Security Authority Subsystem Service (LSASS) プロセスに適用されます。このプロセスは、ユーザーがシステムに正常にログインした後にユーザー資格情報を格納する役割があります。
そのダンプをmimikatzに読み込ませてパスワードを取得できます:
mimikatz.exe
mimikatz # log
mimikatz # sekurlsa::minidump lsass.dmp
mimikatz # sekurlsa::logonpasswords
RCE
NT SYSTEM shell を取得したい場合は、次を使用できます:
# Get the PID of a process running as NT SYSTEM
import-module psgetsys.ps1; [MyProcess]::CreateProcessFromParent(<system_pid>,<command_to_execute>)
SeManageVolumePrivilege
この権利 (Perform volume maintenance tasks) により、NTFS ACLs をバイパスして生のボリュームデバイスハンドル(例: \.\C:)を開き、直接ディスクI/O を行うことができます。これを使うと、基底ブロックを読み取ることでボリューム上の任意のファイルのバイトをコピーでき、機械の秘密鍵(%ProgramData%\Microsoft\Crypto\、レジストリハイブ、VSS 経由の SAM/NTDS など)といった機密データの任意読み取りが可能になります。CA サーバーでは特に影響が大きく、CA の秘密鍵を持ち出すことで Golden Certificate を偽造し任意のプリンシパルになりすますことができます。
See detailed techniques and mitigations:
Semanagevolume Perform Volume Maintenance Tasks
権限の確認
whoami /priv
The 無効と表示されているトークンは有効化できます。実際に、有効 および 無効 トークンの両方を悪用できます。
すべてのトークンを有効化
トークンが無効化されている場合は、スクリプト EnableAllTokenPrivs.ps1 を使用してすべてのトークンを有効化できます:
.\EnableAllTokenPrivs.ps1
whoami /priv
またはこのpostに埋め込まれたscript。
表
Full token privileges cheatsheet は https://github.com/gtworek/Priv2Admin を参照。以下の要約は、特権を悪用して管理者セッションを取得する、または機密ファイルを読み取るための直接的な方法のみを列挙しています。
| Privilege | Impact | Tool | Execution path | Remarks |
|---|---|---|---|---|
SeAssignPrimaryToken | Admin | 3rd party tool | "It would allow a user to impersonate tokens and privesc to nt system using tools such as potato.exe, rottenpotato.exe and juicypotato.exe" | ありがとうございました Aurélien Chalot。近日中にもっとレシピ風に言い換えてみます。 |
SeBackup | Threat | Built-in commands | robocopy /b を使用して機密ファイルを読み取る | - %WINDIR%\MEMORY.DMP を読み取れるならより興味深い可能性があります |
SeCreateToken | Admin | 3rd party tool | NtCreateToken を用いてローカル管理者権限を含む任意のトークンを作成する。 | |
SeDebug | Admin | PowerShell | lsass.exe のトークンを複製する。 | スクリプトは 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 を必要とする場合があります。 確認中。 |
参考
- Windows tokens を定義したこの表を参照: https://github.com/gtworek/Priv2Admin
- トークンを用いた privesc に関する this paper を参照してください。
- Microsoft – Perform volume maintenance tasks (SeManageVolumePrivilege): https://learn.microsoft.com/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/perform-volume-maintenance-tasks
- 0xdf – HTB: Certificate (SeManageVolumePrivilege → CA key exfil → Golden Certificate): https://0xdf.gitlab.io/2025/10/04/htb-certificate.html
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を提出してハッキングトリックを共有してください。
HackTricks