Swamp
Introducción
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

Reconocimiento
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
Analizamos 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.
DNS Zone Transfer - axfr
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.
¿Qué es una transferencia de zona?
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
En esta máquina obviamente ha sido exagerado para que funcione el 100% de la transferencia (es super vulnerable 😄).
Prevención y explicación detallada
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 dominioswamp.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, ys/\.$//
lo reemplaza con nada.

Web Recon
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.
JavaScript Deobfuscation - Password Leakage
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.

Privilege Escalation
Method 1 : Bypass parameter via Command Injection
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:

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

Method 2: Deleting binary
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:

Despedida
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.
Chao 😄
Last updated