Waffi, DockerLabs
Herramientas y recursos
En este reto de DockerLabs practicamos.
| Tecnicas | Herramientas |
|---|---|
| scan de puertos | nmap |
| fuzzing ficheros y dirs | feroxbuster |
| bypass waf | manual |
Reconocimiento y enumeracion
Lo primero como siempre le tiramos un nmap con los parámetros de costumbre.
1
sudo nmap -p- -sS -sC -sV --min-rate=5000 -n -Pn -oX waffi 172.17.0.3
Como vemos tenemos el 80 http, el 22 ssh, sin mas demora revisamos la web y lanzamos un feroxbuster para ver que directorios y ficheros que hay.
1
feroxbuster --url http://172.17.0.3 -w /usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt -x txt,bk,php
Con ferox tampoco obtenemos mucho un fichero de admin que redireciona al login si no te has logeado
Llamandose waffi y con un login dos cosas inyeccion sql y bypass waf asi que vamos a realizar unas comprobaciuones antes , trataremos de averiguar que waf tiene y si se permite la inyeccion
A mi wafwoof no me aporto ningun dato acerca del waf , tampoco hay ninguna marca en las cabeceras si revisamos las respuesta con curl , wapalizer si que me indica seguridad basic por lo tanto podria ser modsecurity de apache. Lo que esta claro es que algo hay.Lanzo es siguiente payload y me lo urlencodea por tanto aunque pase el waf la consulta a la base de datos se realiza con todos los caracteres que aparecen en la url.
El waf no actua como lo hace por ejemplo hmtlspecialchar en php que filtra ciertos caracteres , parace que lo que filtre sean consultas comunes como si fuesen funciones porque hay veces que el payload pasa y otras no aun sustituyendo el 1 por un one me cambia la codificacion de lo que envia. Nos podemos romper los cuernos tratando buscar consultas que no tenga espacios para evitar el urlencode pero repito la solucion pasa por buscar funcionalidades nuevas que tengas las bases de datos y no esten añadidas al waf.
Despues de unas cuantas horas pruebas manuales me acerco a la solucion
1
' OR JSON_CONTAINS('[1, 2, 3]', '1')- --
Seguimos jugando con ese payload porque en realidad llega donde queremos , de hecho nos responde con erro de sintaxis.
Probe eliminado el comentario tipico añadiendo un # que es un comentario especifico de mysql y mariadb en vez de la titpicas rayitas – que es lo estandar, es decir el waf ni reconocio la funcion que use ni el comentario para romper la consulta.
Basicamente lo que hemos hecho ha sido buscar una alternativsa para el payload tipico de ’ or 1=1 , hemos usado una funcion interna de mysql ’ OR JSON_CONTAINS(‘[1, 2, 3]’, ‘1’)# para que JSON_CONTAINS(‘[1, 2, 3]’, ‘1’) deveuelva 1 lo que es verdadero en sql , suerte que salio porque ya hiba a crearme un diccionarios con todos los usarios y contraseñas usada por el creador de la maquina El Pinguino de MArio , balu cholate pinguinaso etc….. pero bueno tenemos credenciales.
Aqui doy las gracias a no recuerdo que usario que creo una maquina en la quie aprendimos a explotar udf sql , no es lo mismo pero me hizo memoria de funciones.
Infiltracion y escalada
Nos logueamos por ssh con las credenciales obtenidas y ejecutamos los comandos de costumbre y en el history hay dos comandos de ejecuciones anteriores.
1
find / -perm -4000 2>/dev/null
Nos han dejado env asi que.
1
env /bin/sh -p
Somos root , la verdad esta linda para entender principios basicos del waf , ahoara toca armar algo en local para entender mejor.
Disfruten y difundan
Muchas gracias poor leerme, espero que te haya gustado y que te sirva de ayuda.







Comments powered by Disqus.