Índice

¿Qué es Wfuzz?

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.

¿Cómo funciona Wfuzz?

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.

Diccionarios y Listas de Palabras:

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
				
			

Payloads/Cargas Útiles:

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"
				
			

Obtener ayuda:

Use el interruptor –h y –help 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:

  • Cargas útiles
  • Codificadores
  • Iteradores
  • Impresoras
  • Scripts

Ejecución Básica:

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
				
			
  • -w: Especifica un diccionario (Lista de palabras).
				
					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:

  • ID: El número de solicitud en el orden en que se realizó.
  • Response (Respuesta): muestra el código de respuesta HTTP.
  • Lines (Líneas): Muestra el número de líneas en la respuesta HTTP.
  • Word (Palabra): Muestra el número de palabras en la respuesta HTTP.
  • Chars (Caracteres): Muestra el número de caracteres en la respuesta HTTP.
  • Payload (Carga útil): Muestra la carga útil utilizada.

Ejecución de una Carga Útil:

Cada palabra clave FUZZ debe tener su carga útil (payload) correspondiente. Hay varias formas equivalentes de especificar un payload:

Ejecución Básica:

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
				
			
  • -w : Especifica un diccionario (Lista de palabras).

Ejecución definiendo el valor del Payload:

				
					wfuzz -z [Ruta del Diccionario] [URL Víctima]/FUZZ
				
			
  • -z : Especifica el valor del parámetro predeterminado del payload.

Filtros:

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.

Ocultar respuestas

Los siguientes parámetros de la línea de comandos se pueden usar para ocultar ciertas respuestas HTTP:

  • –hc: Ocultar resultados en función al código de estado. 
  • –hl: Oculta resultados en función del número de líneas.
  • –hw: Oculta resultados en fucción del número de palabras.
  • –hh:  Oculta resultados en función del número de caracteres.

Ocultar respuestas en función al código de estado.

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:

Ejecución filtrada omitiendo servicios web desconocidos:

				
					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.

Ejecución filtrada omitiendo servicios con caracteres repetidos:

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.

[ultimatemember form_id="17973"]

Formulario de Registro

[user_registration_form id=»20865″]