Abusing Tokens
Last updated
Last updated
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
Windows Access Tokens가 무엇인지 모른다면 계속하기 전에 이 페이지를 읽어보세요:
이미 가지고 있는 토큰을 남용하여 권한 상승을 할 수 있을지도 모릅니다.
이 권한은 어떤 프로세스가 토큰을 생성하지 않고도 임시로 사용할 수 있도록 허용합니다. 핸들을 얻을 수 있는 경우, Windows 서비스(DCOM)에서 NTLM 인증을 유도하여 특권 토큰을 획득할 수 있으며, 이후 SYSTEM 권한으로 프로세스를 실행할 수 있습니다. 이 취약점은 juicy-potato, RogueWinRM (winrm 비활성화 필요), SweetPotato, PrintSpoofer와 같은 다양한 도구를 사용하여 악용할 수 있습니다.
이 권한은 SeImpersonatePrivilege와 매우 유사하며, 특권 토큰을 얻기 위해 같은 방법을 사용합니다. 그 후, 이 권한은 새로운/중단된 프로세스에 기본 토큰을 할당할 수 있게 해줍니다. 특권 임시 토큰을 사용하여 기본 토큰을 파생할 수 있습니다(DuplicateTokenEx). 이 토큰을 사용하여 'CreateProcessAsUser'로 새 프로세스를 생성하거나 프로세스를 중단 상태로 만들고 토큰을 설정할 수 있습니다(일반적으로 실행 중인 프로세스의 기본 토큰을 수정할 수는 없습니다).
이 토큰이 활성화되어 있다면, KERB_S4U_LOGON을 사용하여 자격 증명 없이 다른 사용자의 임시 토큰을 얻을 수 있으며, 임의의 그룹(관리자)을 토큰에 추가하고, 토큰의 무결성 수준을 "중간"으로 설정하고, 이 토큰을 현재 스레드에 할당할 수 있습니다(SetThreadToken).
이 권한은 시스템이 모든 파일에 대한 읽기 접근 제어를 부여하도록 합니다(읽기 작업으로 제한됨). 이는 레지스트리에서 로컬 관리자 계정의 비밀번호 해시를 읽는 데 사용되며, 이후 "psexec" 또는 "wmiexec"와 같은 도구를 해시와 함께 사용할 수 있습니다(패스-더-해시 기법). 그러나 이 기법은 두 가지 조건에서 실패합니다: 로컬 관리자 계정이 비활성화되어 있거나, 원격으로 연결하는 로컬 관리자에게 관리 권한을 제거하는 정책이 시행될 때입니다. 이 권한을 남용할 수 있는 방법은 다음과 같습니다:
또는 다음의 백업 운영자를 통한 권한 상승 섹션에서 설명된 대로:
이 권한은 파일의 접근 제어 목록(ACL)에 관계없이 모든 시스템 파일에 대한 쓰기 접근 권한을 제공합니다. 이는 서비스 수정, DLL 하이재킹, 이미지 파일 실행 옵션을 통한 디버거 설정 등 다양한 권한 상승 가능성을 열어줍니다.
SeCreateTokenPrivilege는 강력한 권한으로, 사용자가 토큰을 임시로 사용할 수 있는 능력을 가질 때 특히 유용하지만, SeImpersonatePrivilege가 없는 경우에도 유용합니다. 이 기능은 동일한 사용자를 나타내는 토큰을 임시로 사용할 수 있는 능력에 의존하며, 이 토큰의 무결성 수준은 현재 프로세스의 무결성 수준을 초과하지 않아야 합니다.
주요 사항:
SeImpersonatePrivilege 없이 임시 사용: 특정 조건에서 토큰을 임시로 사용하여 EoP를 위해 SeCreateTokenPrivilege를 활용할 수 있습니다.
토큰 임시 사용 조건: 성공적인 임시 사용은 대상 토큰이 동일한 사용자에 속하고, 임시 사용을 시도하는 프로세스의 무결성 수준보다 낮거나 같은 무결성 수준을 가져야 합니다.
임시 토큰의 생성 및 수정: 사용자는 임시 토큰을 생성하고 특권 그룹의 SID(보안 식별자)를 추가하여 이를 향상시킬 수 있습니다.
이 권한은 특정 값이 있는 레지스트리 항목을 생성하여 장치 드라이버를 로드하고 언로드할 수 있도록 합니다. 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
)로 설정합니다.
더 많은 방법은 https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege에서 확인할 수 있습니다.
이는 SeRestorePrivilege와 유사합니다. 이 특권의 주요 기능은 프로세스가 객체의 소유권을 가정할 수 있도록 하여, WRITE_OWNER 접근 권한을 제공함으로써 명시적인 재량적 접근 요구 사항을 우회하는 것입니다. 이 과정은 먼저 쓰기 목적으로 의도된 레지스트리 키의 소유권을 확보한 다음, DACL을 변경하여 쓰기 작업을 가능하게 하는 것입니다.
이 권한은 다른 프로세스를 디버그할 수 있게 하며, 메모리에서 읽고 쓸 수 있습니다. 대부분의 안티바이러스 및 호스트 침입 방지 솔루션을 회피할 수 있는 메모리 주입을 위한 다양한 전략을 이 권한으로 사용할 수 있습니다.
ProcDump를 SysInternals Suite에서 사용하여 프로세스의 메모리를 캡처할 수 있습니다. 특히, 이는 사용자가 시스템에 성공적으로 로그인한 후 사용자 자격 증명을 저장하는 로컬 보안 권한 하위 시스템 서비스 (LSASS) 프로세스에 적용될 수 있습니다.
그런 다음 이 덤프를 mimikatz에 로드하여 비밀번호를 얻을 수 있습니다:
NT SYSTEM
셸을 얻고 싶다면 다음을 사용할 수 있습니다:
비활성화된 것으로 나타나는 토큰은 활성화할 수 있으며, 실제로 활성화된 및 비활성화된 토큰을 악용할 수 있습니다.
비활성화된 토큰이 있는 경우, 스크립트 EnableAllTokenPrivs.ps1를 사용하여 모든 토큰을 활성화할 수 있습니다:
Or the script embed in this post.
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.
SeAssignPrimaryToken
Admin
3rd party tool
"사용자가 토큰을 가장하고 nt 시스템으로 권한 상승을 허용합니다. 도구로는 potato.exe, rottenpotato.exe 및 juicypotato.exe가 있습니다."
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
토큰 복제.
SeLoadDriver
Admin
3rd party tool
1. szkg64.sys
와 같은 결함이 있는 커널 드라이버 로드
2. 드라이버 취약점 악용
또는, 이 권한을 사용하여 ftlMC
내장 명령으로 보안 관련 드라이버를 언로드할 수 있습니다. 예: fltMC sysmondrv
SeRestore
Admin
PowerShell
공격은 일부 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가 필요할 수 있습니다.
확인 필요.
Take a look to this table defining Windows tokens: https://github.com/gtworek/Priv2Admin
Take a look to this paper about privesc with tokens.
Thank you for the update. I will try to re-phrase it to something more recipe-like soon.
Script to be found at
1. szkg64
취약점은 로 나열되어 있습니다.
2. szkg64
는 에 의해 작성되었습니다.
1. SeRestore 권한이 있는 상태에서 PowerShell/ISE 시작. 2. 로 권한 활성화. 3. utilman.exe를 utilman.old로 이름 변경 4. cmd.exe를 utilman.exe로 이름 변경 5. 콘솔 잠그고 Win+U 누르기
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)