토큰 악용

Reading time: 9 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기

토큰

Windows Access Tokens가 무엇인지 모른다면 계속하기 전에 이 페이지를 읽어보세요:

Access Tokens

이미 가지고 있는 토큰을 악용하여 권한을 상승시킬 수 있을지도 모릅니다.

SeImpersonatePrivilege

이 권한은 어떤 프로세스가 토큰을 생성하지 않고도 임시로 사용할 수 있도록 허용합니다. 핸들을 얻을 수 있는 경우, Windows 서비스(DCOM)에서 특권 토큰을 획득하여 NTLM 인증을 유도함으로써 SYSTEM 권한으로 프로세스를 실행할 수 있습니다. 이 취약점은 juicy-potato, RogueWinRM (winrm이 비활성화되어 있어야 함), SweetPotato, PrintSpoofer와 같은 다양한 도구를 사용하여 악용할 수 있습니다.

RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotato

JuicyPotato

SeAssignPrimaryPrivilege

이 권한은 SeImpersonatePrivilege와 매우 유사하며, 특권 토큰을 얻기 위해 같은 방법을 사용합니다.
그 후, 이 권한은 새로운/중단된 프로세스에 기본 토큰을 할당할 수 있게 해줍니다. 특권 임시 토큰을 사용하여 기본 토큰을 파생할 수 있습니다(DuplicateTokenEx).
이 토큰을 사용하여 'CreateProcessAsUser'로 새 프로세스를 생성하거나 중단된 프로세스를 생성하고 토큰을 설정할 수 있습니다(일반적으로 실행 중인 프로세스의 기본 토큰을 수정할 수는 없습니다).

SeTcbPrivilege

이 토큰이 활성화되어 있으면 KERB_S4U_LOGON을 사용하여 자격 증명을 알지 못한 채 다른 사용자에 대한 임시 토큰을 얻을 수 있으며, 임의의 그룹(관리자)을 토큰에 추가하고, 토큰의 무결성 수준을 "중간"으로 설정하고, 이 토큰을 현재 스레드에 할당할 수 있습니다(SetThreadToken).

SeBackupPrivilege

이 권한에 의해 시스템은 모든 파일에 대한 읽기 접근 제어를 부여받습니다(읽기 작업에 한정됨). 이는 레지스트리에서 로컬 관리자 계정의 비밀번호 해시를 읽기 위해 사용되며, 이후 "psexec" 또는 "wmiexec"와 같은 도구를 해시와 함께 사용할 수 있습니다(패스-더-해시 기법). 그러나 이 기법은 두 가지 조건에서 실패합니다: 로컬 관리자 계정이 비활성화되어 있거나, 원격으로 연결하는 로컬 관리자에게 관리 권한을 제거하는 정책이 시행될 때입니다.
이 권한을 악용할 수 있습니다:

Privileged Groups

SeRestorePrivilege

이 권한은 파일의 접근 제어 목록(ACL)에 관계없이 모든 시스템 파일에 대한 쓰기 접근을 제공합니다. 이는 서비스 수정, DLL 하이재킹, 이미지 파일 실행 옵션을 통한 디버거 설정 등 다양한 권한 상승 가능성을 열어줍니다.

SeCreateTokenPrivilege

SeCreateTokenPrivilege는 강력한 권한으로, 사용자가 토큰을 임시로 사용할 수 있는 능력을 가질 때 특히 유용하지만, SeImpersonatePrivilege가 없는 경우에도 유용합니다. 이 기능은 동일한 사용자를 나타내는 토큰을 임시로 사용할 수 있는 능력에 의존하며, 이 토큰의 무결성 수준이 현재 프로세스의 무결성 수준을 초과하지 않아야 합니다.

주요 사항:

  • SeImpersonatePrivilege 없이 임시 사용: 특정 조건에서 토큰을 임시로 사용하여 EoP를 위해 SeCreateTokenPrivilege를 활용할 수 있습니다.
  • 토큰 임시 사용 조건: 성공적인 임시 사용은 대상 토큰이 동일한 사용자에 속하고, 임시 사용을 시도하는 프로세스의 무결성 수준보다 낮거나 같은 무결성 수준을 가져야 합니다.
  • 임시 토큰의 생성 및 수정: 사용자는 임시 토큰을 생성하고 특권 그룹의 SID(보안 식별자)를 추가하여 이를 향상시킬 수 있습니다.

SeLoadDriverPrivilege

이 권한은 특정 값으로 ImagePathType을 가진 레지스트리 항목을 생성하여 장치 드라이버를 로드하고 언로드할 수 있게 해줍니다. HKLM(HKEY_LOCAL_MACHINE)에 대한 직접 쓰기 접근이 제한되므로 대신 HKCU(HKEY_CURRENT_USER)를 사용해야 합니다. 그러나 드라이버 구성을 위해 HKCU를 커널이 인식할 수 있도록 하려면 특정 경로를 따라야 합니다.

이 경로는 \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName이며, 여기서 <RID>는 현재 사용자의 상대 식별자입니다. HKCU 내에서 이 전체 경로를 생성하고 두 가지 값을 설정해야 합니다:

  • ImagePath, 실행할 이진 파일의 경로
  • Type, 값은 SERVICE_KERNEL_DRIVER(0x00000001).

따라야 할 단계:

  1. 제한된 쓰기 접근으로 인해 HKLM 대신 HKCU에 접근합니다.
  2. HKCU 내에 \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName 경로를 생성합니다. 여기서 <RID>는 현재 사용자의 상대 식별자를 나타냅니다.
  3. ImagePath를 이진 파일의 실행 경로로 설정합니다.
  4. TypeSERVICE_KERNEL_DRIVER(0x00000001)로 할당합니다.
python
# 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을 변경하는 것을 포함합니다.

bash
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

ProcDumpSysInternals Suite에서 사용하여 프로세스의 메모리를 캡처할 수 있습니다. 특히, 이는 사용자가 시스템에 성공적으로 로그인한 후 사용자 자격 증명을 저장하는 로컬 보안 권한 하위 시스템 서비스 (LSASS) 프로세스에 적용될 수 있습니다.

그런 다음 이 덤프를 mimikatz에 로드하여 비밀번호를 얻을 수 있습니다:

mimikatz.exe
mimikatz # log
mimikatz # sekurlsa::minidump lsass.dmp
mimikatz # sekurlsa::logonpasswords

RCE

NT SYSTEM 셸을 얻고 싶다면 다음을 사용할 수 있습니다:

powershell
# 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를 사용하여 모든 토큰을 활성화할 수 있습니다:

powershell
.\EnableAllTokenPrivs.ps1
whoami /priv

또는 이 게시물에 포함된 스크립트.

전체 토큰 권한 요약은 https://github.com/gtworek/Priv2Admin에서 확인할 수 있으며, 아래 요약은 관리자 세션을 얻거나 민감한 파일을 읽기 위해 권한을 악용하는 직접적인 방법만 나열합니다.

권한영향도구실행 경로비고
SeAssignPrimaryToken관리자3rd party tool"사용자가 토큰을 가장하고 potato.exe, rottenpotato.exe 및 juicypotato.exe와 같은 도구를 사용하여 nt 시스템으로 권한 상승을 허용합니다."업데이트해 주신 Aurélien Chalot에게 감사드립니다. 곧 더 레시피 같은 것으로 다시 표현해 보겠습니다.
SeBackup위협내장 명령robocopy /b로 민감한 파일 읽기

- %WINDIR%\MEMORY.DMP를 읽을 수 있다면 더 흥미로울 수 있습니다.

- SeBackupPrivilege (및 robocopy)는 열린 파일에 대해서는 도움이 되지 않습니다.

- Robocopy는 /b 매개변수로 작동하려면 SeBackup과 SeRestore가 모두 필요합니다.

SeCreateToken관리자3rd party toolNtCreateToken으로 임의의 토큰 생성, 로컬 관리자 권한 포함.
SeDebug관리자PowerShelllsass.exe 토큰 복제.FuzzySecurity에서 스크립트를 찾을 수 있습니다.
SeLoadDriver관리자3rd party tool

1. szkg64.sys와 같은 결함이 있는 커널 드라이버 로드
2. 드라이버 취약점 악용

또는 이 권한을 사용하여 ftlMC 내장 명령으로 보안 관련 드라이버를 언로드할 수 있습니다. 예: fltMC sysmondrv

1. szkg64 취약점은 CVE-2018-15732로 나열되어 있습니다.
2. szkg64 악용 코드Parvez Anwar에 의해 작성되었습니다.

SeRestore관리자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관리자내장 명령

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관리자3rd party tool

토큰을 조작하여 로컬 관리자 권한 포함. SeImpersonate가 필요할 수 있습니다.

확인 필요.

참고

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기