WFuzz es una herramienta y biblioteca de fuzzer de seguridad.聽
Es una herramienta enfocada en evaluar aplicaciones WEB. Se basa en un concepto simple, es decir, difuminar con una carga 煤til determinada. Permite inyectar cualquier valor de entrada en la solicitud HTTP y realizar m煤ltiples ataques complejos contra diferentes componentes de aplicaciones WEB. Por ejemplo: par谩metros, autenticaci贸n, formularios, directorios / archivos, encabezados, etc.
Esta herramienta viene en distribuciones聽 como Kali o Parrot.
Wfuzz se basa en un concepto simple: reemplaza cualquier referencia a la palabra clave FUZZ por el valor de una carga 煤til determinada.
Una carga 煤til en Wfuzz es una fuente de datos (m谩s conocidos como diccionarios de fuerza bruta, estos diccionarios pueden ser nombres, cabeceras, listas de archivos, etc).
Este concepto simple permite inyectar cualquier entrada en cualquier campo de una solicitud HTTP, lo que permite realizar complejos ataques de seguridad web en diferentes componentes de la aplicaci贸n web, como: par谩metros, autenticaci贸n, formularios, directorios/archivos, encabezados, etc.
En caso de utilizar Kali Linux o ParroOS suelen tener incluidos el repositorio Wordlists el cual incluye una variedad de diccionarios o listas de palabras de distintos tama帽os. Este repositorio se encuentra en el directorio /usr/share/wordlists.
Para descargar el repositorio con todos los diccionarios simplemente ejecutamos lo siguiente:
sudo apt install wordlists
Wfuzz se basa en un concepto simple: reemplaza cualquier referencia a la palabra clave FUZZ por el valor de una carga 煤til determinada. Una carga 煤til m谩s conocida como payload en Wfuzz es una fuente de datos de entrada y se especifica mediante la opci贸n -z:
wfuzz -e payloads
Se puede obtener informaci贸n detallada sobre las cargas 煤tiles ejecutando:
wfuzz -z help
Este 煤ltimo se puede filtrar usando el par谩metro –slice:
wfuzz -z help --slice "dirwalk"
Use el interruptor 鈥揾 y 鈥揾elp para obtener el uso de ayuda b谩sica y avanzada respectivamente.
Wfuzz es un marco completamente modular, puede verificar los m贸dulos disponibles usando el interruptor -e iterators:
聽
Las categor铆as v谩lidas son:
聽
Una ejecuci贸n de l铆nea de comando t铆pica de Wfuzz, que especifica una carga de diccionario y una URL, se ve as铆:
wfuzz -w [Ruta del Diccionario] [Url V铆ctima]/FUZZ
wfuzz -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ
Podemos ver los siguientes par谩metros en la respuesta:
La salida de Wfuzz permite analizar las respuestas del servidor web y filtrar los resultados deseados en funci贸n del mensaje de respuesta HTTP obtenido, por ejemplo, c贸digos de respuesta, longitud de respuesta, etc.
Cada l铆nea proporciona la siguiente informaci贸n:
聽
Cada palabra clave FUZZ debe tener su carga 煤til (payload) correspondiente. Hay varias formas equivalentes de especificar un payload:
聽
Para ejecutar wfuzz de la forma m谩s b谩sica simplemente especificamos el diccionario, la URL y colocamos FUZZ donde queramos introducir el payload.
wfuzz -w [Ruta del Diccionario] [Url V铆ctima]/FUZZ
聽
wfuzz -z [Ruta del Diccionario] [Url V铆ctima]/FUZZ
Filtrar resultados en Wfuzz es primordial.
Los diccionarios grandes pueden generar una gran cantidad de resultados y pueden ahogar f谩cilmente los resultados v谩lidos leg铆timos.
La clasificaci贸n de las respuestas HTTP es clave para realizar algunos ataques, por ejemplo, para verificar la presencia de una vulnerabilidad de inyecci贸n SQL, debemos distinguir una respuesta leg铆tima de la que genera un error o datos diferentes.
Wfuzz permite filtrar seg煤n el c贸digo de respuesta HTTP y la longitud de la informaci贸n recibida (en forma de palabras, caracteres o l铆neas). Tambi茅n se pueden utilizar expresiones regulares. Se pueden tomar dos enfoques: mostrar u ocultar los resultados que coinciden con un filtro determinado.
Los siguientes par谩metros de la l铆nea de comandos se pueden usar para ocultar ciertas respuestas HTTP:
El comando –hc filtra los recursos web en funci贸n al c贸digo de estado. Un c贸digo de estado HTTP es un mensaje que el servidor de un sitio env铆a al navegador para indicar si una solicitud puede ser cumplida o no.
Por ejemplo, si un servidor nos devuelve un c贸digo de estado 200, quiere decir que la respuesta para est谩聽 petici贸n es correcta. En caso de mostrar un c贸digo de estado 404 (Not Found), quiere decir que no se ha encontrado el servidor buscado.
En internet podemos encontrar listas que contienen todos los c贸digos de estado para saber que tipo de tr谩fico debemos filtrar.
Veamos un ejemplo en el que queramos eliminar de nuestros resultados, todas aquellas peticiones que nos reporten un c贸digo de estado 404:
wfuzz -w wordlist/general/common.txt --hc 404 http://testphp.vulnweb.com/FUZZ
Se pueden especificar m煤ltiples valores, por ejemplo, la siguiente ejecuci贸n de wfuzz agrega los recursos prohibidos al filtro:
wfuzz -w wordlist/general/common.txt --hc 404,403 http://testphp.vulnweb.com/FUZZ
Las l铆neas, palabras o caracteres son 煤tiles cuando buscamos recursos con el mismo c贸digo de estado HTTP.
Por ejemplo, es un comportamiento com煤n (a veces debido a una configuraci贸n incorrecta) que los servidores web devuelvan una p谩gina de error personalizada con un c贸digo de respuesta 200, esto se conoce como soft 404.
聽
En algunas ocasiones al ejecutar Wfuzz veremos como empieza a reportar resultados inconcluyentes con el mismo n煤mero de caracteres. Al igual que los servicios web estos resultados pueden ser filtrados para que sean omitidos y que solo nos devuelva los resultados que nos interesan.
Para omitir los caracteres o chars espec铆ficos se usa la instrucci贸n –hh=[N潞 Chars].
Veamos como ser铆a su sintaxis:
wfuzz --hh=[N潞 Chars] -w [Ruta del Diccionario] [URL V铆ctima]
Vamos a ver un ejemplo para que quede m谩s claro, para ello primero vamos a realizar un escaneo simple sin filtrar ning煤n resultado para que ve谩is como se repiten las peticiones con el mismo n煤mero de caracteres.
Para este ejemplo usaremos la m谩quina Nunchucks de HTB con la Ip 10.10.11.122 y como diccionario utilizaremos uno de la librer铆a Seclists.
wfuzz -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -H "Host: FUZZ.nunchucks.htb" http://nunchucks.htb
Como pod茅is ver nos reporta un mont贸n de resultados con el mismo n煤mero de chars:
Vamos a intentar aplicar el filtro –hh=30587 para ocultar todos los resultados con ese n煤mero de caracteres:
wfuzz --hh=30587 -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -H "Host: FUZZ.nunchucks.htb" http://nunchucks.htb
Una vez especificado, solo nos muestra los resultados con un n煤mero de caracteres diferente a 30587.
wfuzz -w [Ruta del Diccionario] [Url V铆ctima]/FUZZ