Abusing Tokens

HackTricksをサポートする

トークン

Windowsアクセス・トークンが何か分からない場合は、続行する前にこのページを読んでください:

Access Tokens

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

SeImpersonatePrivilege

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

RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotatoJuicyPotato

SeAssignPrimaryPrivilege

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

SeTcbPrivilege

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

SeBackupPrivilege

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

Privileged Groups

SeRestorePrivilege

この特権により、ファイルのアクセス制御リスト(ACL)に関係なく、任意のシステムファイルへの書き込みアクセスが許可されます。これにより、サービスの変更、DLLハイジャックの実行、さまざまな他の技術の中で、イメージファイル実行オプションを介してデバッガを設定するなど、特権昇格の可能性が広がります。

SeCreateTokenPrivilege

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

重要なポイント:

  • SeImpersonatePrivilegeなしの偽装: 特定の条件下でトークンを偽装するために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)として割り当てます。

# 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)

More ways to abuse this privilege in 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.

PrivilegeImpactToolExecution pathRemarks

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を使用してローカル管理者権限を含む任意のトークンを作成する。

SeDebug

Admin

PowerShell

lsass.exeトークンを複製する。

Script to be found at FuzzySecurity

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が必要な場合があります。

確認が必要です。

Reference

Support HackTricks

Last updated