En muchas ocasiones, a la hora de realizar algún test de penetración web, nos hemos encontrado con la necesidad de realizar algún tipo de ataque de fuerza bruta o de diccionario contra alguna web para poder obtener algún tipo de información, como pueden ser listas de usuarios o archivos específicos por ejemplo. En este tipo de situaciones, realizar un ataque manual (consulta por consulta) puede ser muy tedioso y largo, así que existen diferentes herramientas que nos pueden ayudar a hacerlo de una manera mucho más llevadera.
Burp Suite, como muchos de los lectores ya sabréis, es una potente herramienta que nos ayuda a realizar auditorías web, funcionando como proxy entre nuestro navegador e Internet. Pero además de esta funcionalidad tiene otras muchas, como puede ser un spider o un repetidor por ejemplo.
En este artículo, únicamente nos centraremos en intruder, el cual nos ayudará a realizar diferentes consultas a un mismo host de manera automática, modificando el payload utilizado sin necesidad de la interacción del usuario en cada una de las peticiones.
Imaginémonos la web www.xxxx.com, en la que hemos descubierto que su panel de login (/login.php) dispone de dos campos para la validación del usuario (“user” y “password”) y que al intoducir los datos, devuelve un mensaje u otro en función de si el usuario existe o no en la base de datos y de si la contraseña es válida o no. En este escenario, se podría realizar un ataque de fuerza bruta para poder obtener la lista de todos los usuarios de la aplicación, pero, cómo hacer eso de una forma automática sin necesidad de modificar a mano los parámetros “user” y “password” y obteniendo además de una manera clara las respuestas por parte del servidor?
Para ello, lo primero que deberemos hacer es ejecutar el programa desde consola con la siguiente instrucción java -jar nombre_del_archivo_.jar. Una vez abierto, nos situaremos en la pestaña “intruder” y ya lo tendremos todo listo para empezar nuestro ataque.
Una vez aquí, en la pestaña “target”, indicaremos el host sobre el cual queremos realizar el ataque, en este caso www.xxxx.com, indicando si se trata de una conexión HTTP (puerto 80) o HTTPS (puerto 443).
En la siguiente pestaña, “positions”, indicaremos la consulta a realizar, donde en nuestro caso sería algo así:
POST /login.php HTTP/1.1 Host: www.xxxx.com Content-Type: application/x-www-form-urlencoded Content-Length: 27 username=user&password=XXXX
Y seleccionaremos aquellos parámetros que deseamos modificar, en este caso el parámetro POST “username”. Para ello, nos situaremos en el inicio del contenido “username”, le daremos al botón de “add §”, y volveremos a hacer lo mismo en el final del contenido. Indicando entre los dos § donde se deberá realizar la modificación del payload. Hay que destacar, que no debemos preocuparnos por el campo “Content-Length”, ya que Burp ofrece la posibilidad de actualizarlo automáticamente marcando la casilla correspondiente en “options”.
Una vez realizado esto, en la pestaña “payloads” indicaremos el contenido del payload que utilizaremos. Burp nos facilita diferentes opciones para la modificación de los parámetros, como puede ser una lista predefinida de opciones, el contenido de un fichero, un incrementador de números o un ataque por fuerza bruta entre otras. Todas las opciones disponibles las encontraremos en el campo de “payload set”. En la imagen mostrada, se ha decidido utilizar el contenido del fichero “nombres_usuario.txt”, el cual contiene una lista con posibles nombres de usuarios.
En la última pestaña (“options”), encontraremos diferentes opciones sobre el tratamiento de las consultas y respuestas. Dentro de ellas, la función “grep” nos ayudará a seleccionar aquellas consultas con el resultado esperado, por ejemplo haciendo “match” con una cadena deseada.
En el ejemplo dado, cuando se introducía un usuario que no existía en la base de datos, se mostraba la cadena “El usuario introducido no existe”, y en cambio, cuando el usuario sí existía pero la contraseña era inválida, se mostraba el mensaje “Password incorrecto”. De esta forma, podemos hacer que Burp compruebe si la respuesta del servidor contiene la cadena “Password incorrecto”, ya que de ser así significará que el usuario introducido es un usuario válido.
Por último, solo nos queda lanzar el ataque y esperar los resultados. Para ello, seleccionaremos “intruder” y “start attack”.
Como se puede observar en la imagen, se muestran todas las consultas realizadas, y marcadas con un check aquellas en que la respuesta por parte del servidor contiene la cadena “Password incorrecto”, lo cual significa que el usuario sí existe.
Este escenario únicamente ha sido utilizado para realizar una pequeña introducción de la funcionalidad de Burp, pero no hay que quedarse únicamente en este ejemplo, ya que “intruder” puede utilizarse para realizar ataques SQLi, XSS o cualquier otra técnica en la que se necesite automatización y que pueda ocurrirsele al pentester ;) Para ello, se recomienda analizar las diferentes opciones de las que esta herramienta dispone