Abusing 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 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
Tokens
Windows Access Tokens이 무엇인지 모르신다면 계속 진행하기 전에 이 페이지를 읽어보세요:
{{#ref}} ../access-tokens.md {{#endref}}
이미 가지고 있는 토큰을 악용하여 권한 상승을 할 수 있을지도 모릅니다.
SeImpersonatePrivilege
이 권한은 어떤 프로세스가 토큰을 생성하지 않고도 임시로 사용할 수 있도록 허용합니다. 핸들을 얻을 수 있는 경우, Windows 서비스(DCOM)에서 특권 토큰을 획득할 수 있으며, 이를 통해 NTLM 인증을 수행하게 하여 SYSTEM 권한으로 프로세스를 실행할 수 있습니다. 이 취약점은 juicy-potato, RogueWinRM (winrm이 비활성화되어 있어야 함), SweetPotato, EfsPotato, DCOMPotato 및 PrintSpoofer와 같은 다양한 도구를 사용하여 악용할 수 있습니다.
{{#ref}} ../roguepotato-and-printspoofer.md {{#endref}}
{{#ref}} ../juicypotato.md {{#endref}}
SeAssignPrimaryPrivilege
이 권한은 SeImpersonatePrivilege와 매우 유사하며, 특권 토큰을 얻기 위해 같은 방법을 사용합니다.
그 후, 이 권한은 새로운/중단된 프로세스에 기본 토큰을 할당할 수 있도록 허용합니다. 특권 임시 토큰을 사용하여 기본 토큰을 파생할 수 있습니다(DuplicateTokenEx).
이 토큰을 사용하여 'CreateProcessAsUser'로 새 프로세스를 생성하거나 중단된 프로세스를 생성하고 토큰을 설정할 수 있습니다(일반적으로 실행 중인 프로세스의 기본 토큰을 수정할 수는 없습니다).
SeTcbPrivilege
이 토큰이 활성화되어 있으면 KERB_S4U_LOGON을 사용하여 자격 증명을 알지 못한 채 다른 사용자에 대한 임시 토큰을 얻을 수 있으며, 임의의 그룹(관리자)을 토큰에 추가하고, 토큰의 무결성 수준을 "중간"으로 설정하고, 이 토큰을 현재 스레드에 할당할 수 있습니다(SetThreadToken).
SeBackupPrivilege
이 권한은 시스템이 모든 파일에 대해 모든 읽기 접근 제어를 부여하도록 합니다(읽기 작업에 한정됨). 이는 레지스트리에서 로컬 관리자 계정의 비밀번호 해시를 읽는 데 사용되며, 이후 "psexec" 또는 "wmiexec"와 같은 도구를 해시와 함께 사용할 수 있습니다(패스-더-해시 기법). 그러나 이 기법은 두 가지 조건에서 실패합니다: 로컬 관리자 계정이 비활성화되어 있거나, 원격으로 연결하는 로컬 관리자에게 관리 권한을 제거하는 정책이 시행될 때입니다.
이 권한을 악용할 수 있는 방법은 다음과 같습니다:
- 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를 따르기
- 또는 다음의 Backup Operators로 권한 상승 섹션에서 설명된 대로:
{{#ref}} ../../active-directory-methodology/privileged-groups-and-token-privileges.md {{#endref}}
SeRestorePrivilege
이 권한은 파일의 접근 제어 목록(ACL)에 관계없이 모든 시스템 파일에 대한 쓰기 접근 권한을 제공합니다. 이는 서비스 수정, DLL 하이재킹 및 이미지 파일 실행 옵션을 통한 디버거 설정 등 다양한 권한 상승 가능성을 열어줍니다.
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
내에서 이 전체 경로를 생성하고 두 값을 설정해야 합니다:
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
이 권한은 다른 프로세스를 디버그할 수 있게 하며, 메모리에서 읽고 쓸 수 있습니다. 대부분의 안티바이러스 및 호스트 침입 방지 솔루션을 회피할 수 있는 다양한 메모리 주입 전략을 이 권한으로 사용할 수 있습니다.
Dump memory
ProcDump 또는 SharpDump를 사용하여 프로세스의 메모리를 캡처할 수 있습니다. 특히, 이는 사용자가 시스템에 성공적으로 로그인한 후 사용자 자격 증명을 저장하는 로컬 보안 권한 하위 시스템 서비스 (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>)
SeManageVolumePrivilege
SeManageVolumePrivilege
는 사용자가 디스크 볼륨을 관리할 수 있도록 허용하는 Windows 사용자 권한으로, 볼륨을 생성하고 삭제하는 것을 포함합니다. 관리자를 위해 설계되었지만, 비관리자 사용자에게 부여될 경우 권한 상승을 위해 악용될 수 있습니다.
이 권한을 활용하여 볼륨을 조작할 수 있으며, 이는 전체 볼륨 접근으로 이어질 수 있습니다. SeManageVolumeExploit를 사용하여 C:\에 대한 모든 사용자에게 전체 접근 권한을 부여할 수 있습니다.
또한, 이 Medium 기사에서 설명하는 프로세스는 SeManageVolumePrivilege
와 함께 DLL 하이재킹을 사용하여 권한을 상승시키는 방법을 설명합니다. 페이로드 DLL C:\Windows\System32\wbem\tzres.dll
를 배치하고 systeminfo
를 호출하면 DLL이 실행됩니다.
Check privileges
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 | "사용자가 토큰을 가장하고 nt 시스템으로 권한 상승을 허용합니다. potato.exe, rottenpotato.exe 및 juicypotato.exe와 같은 도구를 사용합니다." | 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 | Read sensitve files with robocopy /b | - %WINDIR%\MEMORY.DMP를 읽을 수 있다면 더 흥미로울 수 있습니다. |
SeCreateToken | Admin | 3rd party tool | Create arbitrary token including local admin rights with NtCreateToken . | |
SeDebug | Admin | PowerShell | Duplicate the lsass.exe token. | 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 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.