viernes, 16 de diciembre de 2011

Uso de Burp Intruder para ataques de diccionario y fuerza bruta


Existen múltiples herramientas para ejecutar ataques de fuerza bruta contra aplicaciones web. Vamos a ver una forma de realizar esta operativa con una bastante potente, Burp Intruder, incluida en BurpSuite. Con ella se pueden automatizar varios procesos, como el de obtención de credenciales de acceso de una aplicación, búsqueda de valores aceptados en los parámetros de una petición (vayan por GET o por POST), ataques de inyección de código, descubrimiento de directorios... vamos, en general, un completo fuzzer para web. Para mostrar su uso, la explicación se centrará en hacer un ataque de diccionario, utilizando como víctima el panel de identificación de DVWA.

Para empezar, se debe activar el Burp Proxy, también incluido en la suite, así como preparar el navegador para ir a través del proxy. Una vez se tenga seleccionada la petición que contiene los parámetros, bien por intercepción (intercept) o desde el histórico (history), habrá que pulsar el botón derecho y pinchar en “send to intruder”, cuya pestaña se pondrá en color rojo.

Menú contextual que aparece al hacer clic con el botón
derecho en la petición que contiene los parámetros

Situándose en la pestaña intruder, se observan debajo 4 nuevas pestañas, que son las que se deberán personalizar para cada tipo de ataque. Generalmente, no es necesario modificar nada en la pestaña target en el que viene especificado el objetivo. En positions, habrá que indicar dos aspectos: el tipo de ataque que se desea realizar y sobre qué parámetros se aplicará.


Los parámetros se eligen con los botones de la parte derecha (add, clear, auto y refresh). Por defecto suelen marcarse algunos. Lo mejor es hacer click en clear e ir seleccionando uno a uno los que interesen cada vez.

Los tipos de ataque (attack type) posibles son:
  • Sniper
  • Battering ram
  • Pitchfork
  • Cluster bomb
Sniper: En este tipo de ataque, se fijarán todos los parámetros excepto uno, en el que se probarán todas las opciones posibles del payload seleccionado. Una vez finalizado para ese parámetro, tomará el valor que recibió en la petición original e irá variando el siguiente parámetro. Así hasta haber completado el proceso para todos los parámetros seleccionados.

En position se indica el parámetro sobre el que se está aplicando el payload.
En este ejemplo, el parámetro 1 es username y el 2 password.

Battering ram: Permite la carga de un único payload por lo que, si hay más de un parámetro, se utilizarán los mismos datos en todas las posiciones simultáneamente.

Ejemplo de uso del mismo payload en ambos parámetros.

Pitchfork: Se prueba cada entrada del payload con su correspondiente en orden del resto de bloques de datos, es decir, el primer elemento del payload de la primera posición con el primer elemento del de la segunda posición marcada, el segundo con el segundo, y así sucesivamente.


Cluster bomb: En este caso, teniendo varias posiciones en las que automatizar el proceso, el ataque se realizará de manera que se prueben todos los valores de un parámetro contra todas las posibles combinaciones de valores del resto.


Como se puede intuir, en caso de tener una sola posición que automatizar, dará lo mismo el tipo de ataque seleccionado, ya que en todos los casos se permitirá elegir un solo payload con el que ejecutar el ataque.

La selección del payload dependerá del tipo de dato que se quiera utilizar. Las opciones que ofrece Intruder son amplias: desde la carga de diccionarios, hasta la selección de caracteres para efectuar una fuerza bruta clásica, pasando por fechas o generador en base a una cadena dada. Además, pueden realizarse operaciones sobre los datos seleccionados, como codificación en Base64 o aplicación de funciones hash.

Desde "payload set" se selecciona el tipo de dato que se utilizará como entrada, dinámico o diccionario.
En "payload processing rules" se puede seleccionar la operación a realizar sobre el tipo de dato.
Normalmente, se sabrá que el ataque ha tenido éxito por alguno de los siguientes aspectos:
  1. La respuesta del servidor (status): el servidor devuelve distintos códigos en función de tener éxito o no tenerlo.
  2. La longitud de la respuesta cuando el status no varía (length): Los casos de éxito tienen un longitud de respuesta diferente al resto.
  3. Otros factores.
En este ejemplo, aplica el tercer caso, ya que hasta que no se envía la petición que se había interceptado con el proxy (una vez ya finalizado el ataque), no se muestra el contenido de las respuestas, teniendo que retornar a la ventana del ataque, para ver qué posición ocupa la petición exitosa, algo incómodo, todo sea dicho de paso.


Pero lo normal es que salga algo similar a esto donde tanto la respuesta del servidor como la longitud varían respecto al resto de opciones:


BurpSuite ofrece dos versiones, una gratuita y otra de pago. Las diferencias entre ellas las podéis ver en la página oficial: http://portswigger.net/burp/download.html, pero os avanzo que para el intruder la diferencia radica en la velocidad de ejecución del ataque, ralentizado para la versión free.

No hay comentarios:

Publicar un comentario