Manager empieza realizando fuerza bruta sobre Kerberos para encontrar usuarios en el dominio, y luego haciendo un spray de contraseñas usando el nombre de usuario de cada usuario como contraseña. Una vez tenemos las primeras credenciales podemos acceder a la instancia de base de datos MSSQL y utilizar la función xp_dirtree para explorar el sistema de archivos. Gracias a una copia de seguridad del servidor web, obtenemos unas credenciales de usuario que nos dan acceso al sistema mediante el servicio WINRM. Una vez dentro del sistema escalamos privilegios gracias la vulnerabilidad ESC7 obtenida mediante una configuración errónea.
Enumeración
En primer lugar, realizamos la enumeración básica de puertos con Nmap:
A continuación, realizamos el escaneo de servicios/versión y scripts de los puertos que hemos encontrado abiertos:
> nmap -sCV -oN scans/targetTCPPorts $target -p 53,80,88,135,139,389,445,464,593,1433,3268,3269,5985,9389,49667,49669,49670,49671,49731,56082,60677,62324
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-15 17:07 CET
Nmap scan report for 10.10.11.236
Host is up (0.25s latency).
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
| http-methods:
|_ Potentially risky methods: TRACE
|_http-title: Manager
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2024-03-15 23:06:40Z)
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: manager.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=dc01.manager.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:dc01.manager.htb
| Not valid before: 2023-07-30T13:51:28
|_Not valid after: 2024-07-29T13:51:28
|_ssl-date: 2024-03-15T23:08:13+00:00; +6h58m52s from scanner time.
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
1433/tcp open ms-sql-s Microsoft SQL Server 2019 15.00.2000.00; RTM
| ms-sql-ntlm-info:
| 10.10.11.236:1433:
| Target_Name: MANAGER
| NetBIOS_Domain_Name: MANAGER
| NetBIOS_Computer_Name: DC01
| DNS_Domain_Name: manager.htb
| DNS_Computer_Name: dc01.manager.htb
| DNS_Tree_Name: manager.htb
|_ Product_Version: 10.0.17763
| ms-sql-info:
| 10.10.11.236:1433:
| Version:
| name: Microsoft SQL Server 2019 RTM
| number: 15.00.2000.00
| Product: Microsoft SQL Server 2019
| Service pack level: RTM
| Post-SP patches applied: false
|_ TCP port: 1433
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2024-02-28T12:02:32
|_Not valid after: 2054-02-28T12:02:32
|_ssl-date: 2024-03-15T23:08:15+00:00; +6h58m51s from scanner time.
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: manager.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2024-03-15T23:08:13+00:00; +6h58m52s from scanner time.
| ssl-cert: Subject: commonName=dc01.manager.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:dc01.manager.htb
| Not valid before: 2023-07-30T13:51:28
|_Not valid after: 2024-07-29T13:51:28
3269/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: manager.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=dc01.manager.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:dc01.manager.htb
| Not valid before: 2023-07-30T13:51:28
|_Not valid after: 2024-07-29T13:51:28
|_ssl-date: 2024-03-15T23:08:13+00:00; +6h58m52s from scanner time.
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp open mc-nmf .NET Message Framing
49667/tcp open msrpc Microsoft Windows RPC
49669/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49670/tcp open msrpc Microsoft Windows RPC
49671/tcp open msrpc Microsoft Windows RPC
49731/tcp open msrpc Microsoft Windows RPC
56082/tcp open msrpc Microsoft Windows RPC
60677/tcp open msrpc Microsoft Windows RPC
62324/tcp open msrpc Microsoft Windows RPC
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
| smb2-time:
| date: 2024-03-15T23:07:36
|_ start_date: N/A
|_clock-skew: mean: 6h58m51s, deviation: 0s, median: 6h58m51s
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 103.00 seconds
Con esta información podemos observar puertos abiertos con servicios DNS, HTTP, LDAP, SMB, WINRM o MSSQL. Por lo tanto, podemos concretar que nos encontramos enfrente de un entorno Active Directory de Windows.
Además, nmap también nos ha brindado dos dominios, manager.htb y dc01.manager.htb. Así que los añadimos en el fichero /etc/hosts.
Ahora probemos a enumerar usuarios usando la herramienta Kerbrute:
Depuremos la lista:
Ahora es momento de realizar una pulverización de contraseñas con cuidado de no vulnerar la política de contraseñas mediante la herramienta Crackmapexec:
Por suerte nos encontramos que el usuario operator tiene acceso a SMB con la contraseña operator. Inspeccionemos SMB y averigüemos que podemos encontrar allí:
Nada interesante…
Acceso como Raven
No obstante, descubrimos que el usuario operator también puede acceder a MSSQL:
Después de enumerar el servicio MSSQL y probar diferentes técnicas de forma fallida, descubrimos que podemos leer archivos y en especial vemos una copia de seguridad del sitio del cual podemos acceder a través del protocolo HTTP:
Descomprimimos el fichero descargado y visualizamos el fichero .old-conf.xml que nos arroja las credenciales del usuario raven:
Es hora de probar estas credenciales en el servicio WINRM:
Una vez dentro nos hacemos con la bandera user.txt:
Escalada de priviliegios
En ese mismo directorio y en el directorio Documents, el cual fue el punto de acceso al sistema, nos encontramos el fichero certify.exe:
Esta repetición genera curiosidad y nos da una señal de que la escalada de privilegios podía estar relacionada con certificados, por lo tanto, investiguemos un poco.
Ejecutamos el siguiente comando:
El resultado nos arroja mucha información, pero lo más importante aquí son los dos derechos principales ManageCA
y ManageCertificates
.
Si un atacante obtiene control sobre ManageCA
(que tiene Raven), puede obtener remotamente el derecho ManageCertificates
, aprobar solicitudes de certificado pendientes, subvirtiendo la protección de «aprobación del administrador de certificados de CA». Esta vulnerabilidad se denomina ESC7. Podemos encontrar más información en https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation
Asimismo, la plantilla del certificado SubCA
es vulnerable a ESC1, pero solo los administradores pueden inscribirse en la plantilla. Así, un usuario puede solicitar registrarse en el SubCA
(lo cual será denegado) pero que después será expedida por el gestor.
Requisitos previos:
- Solo derecho
ManageCA
. - Derecho
Manage Certificates
(se puede otorgar desdeManageCA
) - La plantilla de certificado
SubCA
debe estar habilitado (se puede habilitar desdeManageCA
)
Abuso
Para poder abusar de esta vulnerabilidad vamos a usar la utilidad certipy.
Concedemos el derecho Manage Certificates
agregando al usuario rave como nuevo oficial:
Habilitamos una plantilla de certificado específica y solicitamos un certificado con privilegios elevados:
Emitimos el certificado solicitado:
Nos autenticamos con el certificado obtenido y obtenemos el hash del administrador del sistema:
Durante el proceso, me encontré un error relacionado con el desfase del reloj. Este error, conocido como ‘KRB_AP_ERR_SKEW’ , ocurre cuando hay una diferencia horaria significativa entre el sistema local y el servidor remoto.
Para sincronizar la hora del sistema con el servidor manager.htb, utilice el siguiente comando:
ntpdate -u manager.htb
Además, la introducción de los comandos debe de hacerse de forma rápida, ya que el servidor se reinicia periódicamente.
Finalmente, iniciamos sesión mediante WINRM y leemos la bandera root.txt: