hacktricks/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md
2024-04-06 18:36:04 +00:00

21 KiB
Raw Blame History

Abusing Tokens

htARTEHackTricks AWS Red Team Expert でAWSハッキングをゼロからヒーローまで学ぶ

トークン

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

{% content-ref url="access-tokens.md" %} access-tokens.md {% endcontent-ref %}

おそらく、すでに持っているトークンを悪用して特権を昇格させることができるかもしれません

SeImpersonatePrivilege

これは、任意のプロセスが任意のトークンを模倣作成ではなくできる権限であり、それにハンドルを取得できれば、そのトークンを取得できます。特権のあるトークンは、WindowsサービスDCOMから取得でき、それをエクスプロイトに対してNTLM認証を実行させることで、SYSTEM権限でプロセスを実行できるようになります。この脆弱性は、juicy-potatoRogueWinRMwinrmを無効にする必要がありますSweetPotatoPrintSpooferなどのさまざまなツールを使用して悪用できます。

{% content-ref url="roguepotato-and-printspoofer.md" %} roguepotato-and-printspoofer.md {% endcontent-ref %}

{% content-ref url="juicypotato.md" %} juicypotato.md {% endcontent-ref %}

SeAssignPrimaryPrivilege

SeImpersonatePrivilegeと非常に似ており、特権の取得には同じ方法が使用されます。
その後、この特権は、新しい/中断されたプロセスに主要トークンを割り当てることを可能にします。特権のある模倣トークンを使用して、主要トークンDuplicateTokenExを派生させることができます。
トークンを使用して、'CreateProcessAsUser'で新しいプロセスを作成したり、プロセスを中断してトークンを設定したりできます(一般的に、実行中のプロセスの主要トークンを変更することはできません)。

SeTcbPrivilege

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

SeBackupPrivilege

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

{% content-ref url="../active-directory-methodology/privileged-groups-and-token-privileges.md" %} privileged-groups-and-token-privileges.md {% endcontent-ref %}

SeRestorePrivilege

この特権により、ファイルの書き込みアクセス権限が、ファイルのアクセス制御リストACLに関係なく提供されます。これにより、サービスの変更、DLLハイジャック、およびイメージファイル実行オプションを介したデバッガーの設定など、さまざまなテクニックを使用して昇格する可能性が開かれます。

SeCreateTokenPrivilege

SeCreateTokenPrivilegeは、ユーザーがトークンを模倣できる能力を持っている場合に特に有用な権限ですが、SeImpersonatePrivilegeがない場合でも有用です。この機能は、同じユーザーを表すトークンを模倣し、その整合性レベルが現在のプロセスの整合性レベルを超えない場合に依存しています。

主なポイント:

  • SeImpersonatePrivilegeなしでの模倣: 特定の条件下でSeCreateTokenPrivilegeを使用して、特権昇格を行うことが可能です。
  • トークン模倣の条件: 成功した模倣には、対象のトークンが同じユーザーに属し、模倣を試みるプロセスの整合性レベルがそのトークンの整合性レベル以下である必要があります。
  • 模倣トークンの作成と変更: ユーザーは模倣トークンを作成し、特権グループのSIDセキュリティ識別子を追加して強化することができます。

SeLoadDriverPrivilege

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

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

  • 実行されるバイナリのパスであるImagePath
  • SERVICE_KERNEL_DRIVER0x00000001)の値を持つType

手順:

  1. HKLMへの書き込みアクセスが制限されているため、HKCUにアクセスします。
  2. HKCU内に、<RID>が現在のユーザーのRelative Identifierを表すパス\Registry\User\<RID>\System\CurrentControlSet\Services\DriverNameを作成します。
  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)

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

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

メモリのダンプ

SysInternals SuiteからProcDumpを使用して、プロセスのメモリをキャプチャできます。具体的には、これはユーザーがシステムに正常にログインした後にユーザーの資格情報を格納する**Local Security Authority Subsystem Service (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

無効になっているトークンは有効にできます。実際には、EnabledDisabled トークンを悪用することができます。

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

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

.\EnableAllTokenPrivs.ps1
whoami /priv

または、この投稿に埋め込まれたスクリプト

テーブル

完全なトークン特権チートシートはhttps://github.com/gtworek/Priv2Adminにあり、以下の要約は管理者セッションを取得したり機密ファイルを読むための特権を悪用する直接的な方法のみをリストします。

特権 影響 ツール 実行パス 備考
SeAssignPrimaryToken Admin サードパーティーツール "ユーザーがトークンを偽装し、potato.exe、rottenpotato.exe、juicypotato.exeなどのツールを使用してntシステムに昇格できるようにします" 更新情報を提供してくれたAurélien Chalotに感謝します。近々、もう少しレシピのような表現に言い換えてみます。
SeBackup 脅威 組み込みコマンド robocopy /bで機密ファイルを読む

- %WINDIR%\MEMORY.DMPを読むことができるかもしれません

- SeBackupPrivilegeおよびrobocopyは、ファイルを開く際には役立ちません。

- Robocopyは/bパラメータを使用するためにはSeBackupとSeRestoreの両方が必要です。

SeCreateToken Admin サードパーティーツール NtCreateTokenを使用してローカル管理者権限を含む任意のトークンを作成します。
SeDebug Admin PowerShell lsass.exeトークンを複製します。 スクリプトはFuzzySecurityで見つけることができます。
SeLoadDriver Admin サードパーティーツール

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 組み込みコマンド

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 サードパーティーツール

ローカル管理者権限を含むトークンを操作します。SeImpersonateが必要な場合があります。

検証する必要があります。

参考