Swamp
Last updated
Last updated
Muy buenas y bienvenidos a la resolución de la máquina Swamp de VulNyx, esta es otra de las máquinas que hago para la plataforma de VulNyx, en este caso estaremos haciendo una máquina de nivel Low, quería hacer una máquina accesible para gente que empieza pero con algun detallito para no ir con el piloto automatico.
A continuación veremos las técnicas que nos encontraremos, vamos a poner todas las que hay, como si fuera un pentest:
DNS Zone Transfer - axfr
Javascript Deobfuscation - Password Leakage
Sudo binary bypass
Method 1: Command Injection
Method 2: Deleting binary
Lo primero que tenemos que hacer es buscar la IP de la máquina swamp, hay varias maneras de hacerlo, en este caso lo haré con la herramienta fping
que me gusta mucho para hacer el primer recon de IP, se pueda hacer con nmap
,arp-scan
y varias herramientas más...
Mi IP es la 130, así que al realizar el primer escaneo para encontrar las IPs que hay en mi rango, encontramos la 131, que es la de la máquina Swamp.
Le realizamos un escaneo básico de nmap
Tenemos que hacer un analisis bueno del nmap cuando nos enfrentamos a una máquina, vamos a separarlo por puerto, versión y con lo que nos ha sacado de información
Añadimos al /etc/hosts el swamp.nyx
Ahora si accedemos a la página web que ponia que rederigia a swamp.nyx y que no podía acceder, veremos lo siguiente:
Veremos en profundidad está sección más a delante, ahora vamos a centrarnos en que tenemos un nombre de dominio enumerado y sabiendo que hay un DNS corriendo, lo siguiente sería comprobar que hay montado.
Uno de los primeros checks que hay que hacer es comprobar es si el DNS está mal configurado la transferencia de zona, antes de seguir vamos a entender que es una Transferencia de Zona y que sucede cuando no esta bien configurada.
Esta se suele llamar axfr
, este nombre se le da por el tipo de solicitud, el cual se utiliza para cuando el DNS principal tiene que replicar la base de datos en los siguientes escenarios:
Al iniciar el servicio DNS al servidor secundario.
Cuando caduca el tiempo de actualización
Cuando se guardan los cambios en el archivo de zona principal y hay una notificación lista.
Ahora que entendemos como funciona, si esta transferencia de datos ha sido mal configurada podemos intentar hacer una solicitud axfr
al dominio swamp.nyx
y obtener toda la configuración de dominio DNS.
Como podemos ver, hemos sacado la información del DNS principal y obtenido subdominios.
Pero antes de avanzar, voy a mostrar el por qué esto sucede en términos técnicos (configuración interna del servidor).
Esta configuración es encontrada en el path /etc/bind/named.conf
Pero aquí muestro como debería configurarse y las query clave para que sea segura.
La clave es la primera parte, estamos creando una sección de servidores a los que podemos fiarnos, es decir los DNS secundarios que van a recibir la petición axfr, y la otra parte más importante es la query allow-transfer { trusted-nameservers; };
que antes estaba en any
y ahora en los nameservers que hayamos puesto arriba, si otra petición axfr es solicitada y no es uno de esos nameservers, esta no funcionara.
Cogemos los subdominios y los ponemos en el /etc/hosts
Para sacarlo más fácil utilizamos la siguiente query
dig axfr swamp.nyx @192.168.93.131
:
Ejecuta una transferencia de zona (AXFR) desde el servidor DNS con dirección 192.168.93.131
para el dominio swamp.nyx
.
awk '{print $1}'
:
Extrae solo la primera columna de la salida, que usualmente contiene los nombres de dominio (subdominios incluidos).
grep -E '^[a-zA-Z0-9.-]+\.$'
:
Filtra las líneas que parecen nombres de dominio válidos. El patrón regular asegura que se seleccionen solo líneas que tengan caracteres alfanuméricos, guiones o puntos, y terminen con un punto.
sed 's/\.$//'
:
Elimina el punto final (.
) de cada línea. La expresión regular \.$
busca un punto al final de la línea, y s/\.$//
lo reemplaza con nada.
Ahora vamos a acceder a cada uno de ellos, antes de eso abrimos el BurpSuite y mi recomendación es hacerlo con el navegador que te da el mismo programa, a mi al menos se me hace más fácil que tener que utilizar el FoxyProxy.
Al ser un writeup vamos un poco a saco en esta parte, porque todos los subdominios son un poco de ambientación de la pelicula Shrek, el subdominio importante es farfaraway.swamp.nyx que es el que encontraremos el path para avanzar, no obstante comentar que mientras tenemos el BurpSuite abierto, entrar en cada subdominio, BurpSuite por defecto hace el crawling básico a la página mostrando los directorios - archivos que se cargan por defecto en la página, o si la trasteamos un poco irá apareciendo en el Target > Sitemap
:
De hecho, esto lo comento porque si os dais cuenta el subdominio farfaraway
simplemente por acceder a la página ya nos aparece el archivo que vamos a analizar.
Accedemos desde la página web y entramos al script.min.js
Cuando entramos realmente no podemos leer nada del script ni entenderlo:
Lo cogemos y vamos a la página https://beautifier.io/ que nos permitirá ver un poco mejor el script, esta te lo pone "bonito" para que sea más leíble.
Seguimos sin entender mucha cosa, esto es porque ha sido ofuscado, si nos fijamos, los ofuscadores suelen dejar un rastro al principio del script:
Buscamos en google Unpacker Javascript: https://matthewfl.com/unPacker.html
Ponemos el JavaScript y lo deobfuscamos y lo ponemos en el beautify para ver si podemos leer algo mejor.
En la línea 105 encontramos un Password: c2hyZWs6cHV0b3Blc2FvZWxhc25v;
que parece un base64.
Cogemos la query c2hyZWs6cHV0b3Blc2FvZWxhc25v
y la podemos desencriptar con:
Obtenemos la contraseña de un usuario Shrek : putopesaoelasno
.
Intentamos hacer login con la contraseña obtenida.
Estando en el directorio /home/shrek
tenemos un binario con SUID.
Viéndolo así a muchos os puede venir a la cabeza que si este binario ejecuta de alguna manera algun comando del sistema y este comando a la hora de programarlo ha sido escrito de manera relativa y no absoluta, podría haber un Path Hijacking
.
Absoluta --> /usr/bin/curl
Relativa --> curl
Vamos a ver que se ejecuta de manera básica:
Abajo nos pone un ejemplo de como podríamos hacer una petición a las cabeceras de X página web, probamos a ver que hace:
Tenemos que ver el sudo de usuario Shrek.
Podemos ejecutar sin poner contraseña el binario /home/shrek/header_checker
como root, tenemos que ver si alguno de los parámetros pueda ser abusado de alguna manera que nos pueda dar root.
Ninguno de los parámetros parece ser posible abusarlo para nuestra ventaja, una de las opciones que podemos hacer es que sabiendo que ejecuta el comando curl por detrás, es bypassear con algun operador el comando e inyectar un comando después del curl, ya que por detrás realmente esta haciendo esto:
Nosotros podríamos inyectar después de este comando un whoami para ver si el comando curl ha sido sanitizado y no permite este tipo de inyecciones:
Por detrás sería:
Comando en el binario:
Por detrás en el binario se ha representado de la siguiente manera:
Nosotros nos aprovechamos que no ha sido sanitizado correctamente y permite inyectar un comando después del curl, esto se arreglaría con una blacklist y whitlist vetando los operadores comunes.
Ejemplo
Ahora sería tan fácil como mandarnos una reverse shell, en vez de poner el whoami ponemos la vieja confiable busybox
y recibimos la shell.
Nosotros al ser usuario Shrek y tener en posesión total de la carpeta /home/shrek
, aunque haya un archivo que lo haya creado root, tenemos los permisos para borrarlo sin problemas.
Aquí viene el segundo método de escalar privilegios, sabemos que podemos ejecutar como root sin proporcionar el binario /home/shrek/header_checker
, así que si lo eliminamos y ponemos un archivo que se llame exactamente igual que este y ponemos lo que queramos, podemos hacer que ese header_checker nuevo tenga por ejemplo chmod u+s /bin/bash
o una bash -p
, esto nos daría acceso directo a root.
Creamos el nuevo:
Aquí acaba el writeup de la máquina Swamp, espero que la hayáis disfrutado y sobretodo hayáis aprendido mucho que siempre es mi intención.
En esta máquina obviamente ha sido exagerado para que funcione el 100% de la transferencia (es super vulnerable ).
Parece que lo que está haciendo es un curl, lo dicho, si el curl estuviera curl
en vez de /usr/bin/curl
se podría hacer, pero en este caso no, ya que simplemente puse que fuera SUID para engañar un poquito y perdierais el tiempo con el Path Hijacking, ya que es Low .
Chao