Ataques de diccionario a formularios de inicio de sesión

noviembre 2, 2024

Los ataques de diccionario a formularios de inicio de sesión, es un tipo de ataque similar al de fuerza bruta en el que se busca obtener acceso inicial a una aplicación web que esta siendo protegida por un formulario de inicio de sesión en el cual los usuarios deben ingresar sus credenciales de acceso, usuario y contraseña por lo general. A diferencia del ataque por fuerza bruta en el que se usa todas las posibles combinaciones de caracteres, para este tipo de ataque es necesario contar con uno o varios diccionarios, archivos de texto que contiene por cada línea una cadena de texto que será probada como nombre de usuario o contraseña, estos pueden ser creado exclusivamente para el ataque en base a la información recolectada en fases previas al ataque o usados genéricamente como el famoso rockyou.txt con mas de 14 millones de contraseñas comunes, el cual esta integrado en el paquete wordlist de Kali Linux.

Esta vulnerabilidad esta contemplada en el OWASP Top 10 dentro de la categoría A01:2021 – Broken Access Control.

Para comprender esta vulnerabilidad vamos a trabajar con un laboratorio que esta integrado por una aplicación web vulnerable llamada DVWA, creada en PHP con vulnerabilidades de forma intencional para permitir espacios de practica sin afectar aplicaciones en ambiente productivo y que podrían acarrear repercusiones legales si se realizan sin la respectiva autorización de efectuar pruebas de seguridad. Para el laboratorio se trabajó con una maquina virtual que tiene desplegada la aplicación DVWA, llamada Cap’n Crunch Hacking Web.

Desde un navegador web se accede a la aplicación DVWA y se inicia sesión en la misma mediante las credenciales admin / password y desde el menú lateral en la opción DVWA Security se pasa al nivel de seguridad bajo.

Identificando tipo de petición

Lo primero que se debe realizar es identificar el tipo de petición que se esta efectuando y los atributos que se están enviando para el inicio de sesión, esto se puede hacer revisando el código fuente de la aplicación por medio de los archivos HTML o JavaScript. Ingresando en DVWA a la opción Brute Force del menú lateral se evidencia un formulario de inicio de sesión que se puede analizar con la funcionalidad de inspeccionar del navegador web al dar clic derecho sobre la misma página.

De esta manera identificamos que el formulario de inicio de sesión utiliza el método GET para el envió de las credenciales, siendo este un método nada seguro para este tipo de funcionalidad, adicionalmente se identifican dos campos de texto con los nombres username y password, junto a un botón tipo submit para enviar los mismos. Tras un intento de inicio de sesión con una combinación de credenciales aleatoria se identifica que la aplicación retorna el texto “Username and/or password incorrect.” bajo el formulario web.

Atacando con OWASP ZAP

Para realizar un ataque de diccionario con la herramienta OWASP ZAP es necesario configurar el navegador web para que utilice el servidor proxy de la herramienta y así poder interceptar las peticiones y respuestas hechas por el usuario, una vez configurado el navegador realizamos un intento de login y tanto la petición como la respuesta obtenida de la aplicación web quedan registradas en el historial de la herramienta.

Identificada la petición en la que se envían las credenciales, enviamos la misma a la funcionalidad de Fuzz, para ello damos clic derecho sobre la petición, seleccionamos Atacar y Fuzz.

Al abrir la ventana emergente del ataque de Fuzz, podemos seleccionar en la petición las posiciones en las que iremos intercambiando las entradas de los diccionarios a utilizar, especificando los campos de la petición correspondientes al nombre de usuario y contraseña enviadas.

Para el campo username de la petición podemos especificar los posibles nombres de usuario que hayamos identificado previamente o usar diccionarios genéricos, en este caso especificaremos usuarios comunes por defecto en aplicaciones web.

Para el campo de password cambiaremos el tipo de carga útil de “Cadenas” por “Archivo” y usaremos un diccionario mas pequeño que rockyou.txt, con la finalidad de agilizar las pruebas, este diccionario cuenta con 1000 lineas de las contraseñas mas utilizadas y esta dentro del paquete SecLists.

Adicionalmente, en la pestaña de “Procesadores de mensaje” agregaremos una regla de tipo “Creador de etiqueta” que permita buscar en la respuesta obtenida el texto que nos indique si el inicio de sesión fue correcto o incorrecto, esto con la finalidad de diferenciar las combinaciones de credenciales que nos permitan acceder a la aplicación entre todas las peticiones que se enviaran.

Con todo configurado, podemos iniciar el ataque dando click en “Iniciar el Fuzzer”. Dependiendo el tamaño de los diccionarios y las medidas de seguridad implementadas en las aplicaciones web el ataque tardara menos o mas tiempo, con la probabilidad que no se encuentren las credenciales de acceso a la aplicación.

Al finalizar el ataque, podemos evidenciar que se efectuaron 4000 peticiones en total con la combinación de todas las cargas útiles entre nombre de usuario y contraseñas. Para determinar la combinación de credenciales que dan acceso a la aplicación basta con buscar en la columna de estado la petición que no contiene la etiqueta “incorrect”, siendo la combinación de credenciales admin y password. Probando estas credenciales desde el navegador podemos evidenciar que el mensaje retornado por la aplicación es distinto, permitiendo acceder a la misma.

Atacando con Burp Suite

Otra herramienta que podemos utilizar para realizar un ataque de diccionario es Burp Suite, tiene un funcionamiento similar que OWASP ZAP y se requiere configurar el servidor proxy en el navegador web para que las peticiones y respuestas puedan ser interceptadas por la herramienta. Una vez configurado el navegador, nuevamente realizamos un intento de login y la petición y respuesta obtenida de la aplicación web queda registrada en el historial de la herramienta.

Identificada la petición en la que se envían las credenciales, enviamos la misma a la funcionalidad de intruder, para ello damos clic derecho en la petición y seleccionamos “Send to Intruder”.

Nos dirigimos a la pestaña de “Intruder” en la parte superior de la herramienta, donde podemos visualizar la petición y debemos seleccionar como en OWASP ZAP las posiciones donde remplazaremos los valores por cada entrada de los diccionarios, seleccionando los espacios en la petición y dando clic en “Add”. Adicionalmente, es necesario especificar el tipo de ataque, en este caso para realizar la combinación de todas las entradas de los diccionarios es necesario especificar “Cluster Bomb”.

Posteriormente, en la pestaña de “Payloads” tenemos la posibilidad de especificar los diccionarios a utilizar para cada posición señalada, siendo los mismos utilizados en la prueba con OWASP ZAP.

Con el botón “Load” se puede cargar un diccionario desde un archivo, como se hizo en la prueba con la herramienta OWASP ZAP.

De igual manera que en la prueba anterior agregaremos una búsqueda en la respuesta por la expresión “incorrect”, para ello en la pestaña de “Settings”, en la sección “Grep – Match” limpiamos la lista de palabras incluidas por defecto, agregamos la expresión a buscar y habilitamos la funcionalidad.

Con estas configuraciones ya podemos iniciar el ataque dando clic en el botón “Start attack”, cabe mencionar que en la versión community saldrá un mensaje que indica ciertas limitaciones en el envió de la peticiones de forma simultanea por ser la versión gratuita de la herramienta, tras aceptar y continuar se abrirá una ventana emergente con cada petición realizada intercambiando las entradas de los diccionarios en las posiciones seleccionadas.

Como se puede evidenciar, debido a que se cuenta con la versión community de Burp Suite, el ataque tarda mucho mas tiempo que con OWASP ZAP, pero arroja los mismos resultados. Identificando en la columna “incorrect” las peticiones que no hayan encontrado en la respuesta la expresión incorrect, encontrando así la combinación de credenciales admin y password que dan acceso a la aplicación.

Atacando con hydra

Una de las limitantes de las herramientas OWASP ZAP y Burp Suite es que en proyectos grandes o trabajando con diccionarios muy grandes, estas consumen demasiada memoria RAM y pueden llegar a quedar pegadas si no se cuenta con los suficientes recursos computacionales en la maquina desde la cual se están realizando los ataques. Pero también contamos con alternativas de herramientas que carecen de interfaz grafica y que permiten obtener un gran rendimiento al efectuar este tipo de ataques con diccionario a formularios de inicio de sesión, una de estas herramientas es Hydra que viene preinstalada en la distribución Kali Linux.

Lo primero que debemos realizar es identificar la petición y los parámetros enviados para el inicio de sesión, para ello podemos ayudarnos de OWASP ZAP o Burp Suite, como lo hemos hecho anteriormente.

Posteriormente, desde la consola de Kali Linux, usamos la herramienta Hydra de la siguiente manera:

hydra -L users.txt -P /usr/share/seclists/Passwords/xato-net-10-million-passwords-1000.txt 192.168.20.125 http-get-form "/DVWA/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login:H=Cookie: security=low; PHPSESSID=4jrrb4l3h2ndk1i0a8p95ti5l2:F=incorrect"

Las opciones especificadas en la instrucción anterior corresponden a:

  • -L: Especifica la lista de usuarios a probar, en este caso los mismos usuarios de las pruebas anteriores realizadas con las otras herramientas.
  • -P: Especifica el diccionario de contraseñas a utilizar en el ataque, el mismo usado anteriormente.
  • IP: Especifica la dirección IP del servidor a atacar.
  • http-get-form: Especifica el servicio a atacar, en este caso una petición de formulario web tipo GET.
  • /DVWA/vulnerabilities/brute/: Es la ruta donde se envían las credenciales en la aplicación web.
  • username=^USER^&password=^PASS^&Login=Login: Son los parámetros enviados para el inicio de sesión, especificando los espacios donde sustituir las entradas de los diccionarios.
  • H=Cookie: security=low; PHPSESSID=4jrrb4l3h2ndk1i0a8p95ti5l2: Agrega una cabecera a la petición, en este caso las cookies correspondientes.
  • F=incorrect: Especifica la expresión a buscar en la respuesta obtenida de la aplicación web.

Como se puede evidenciar, nuevamente se encontraron la combinación de credenciales admin y password en el ataque. de igual manera se puede apreciar que en un minuto se realizaron las 4000 peticiones correspondientes a las combinaciones de usuarios y contraseñas de los diccionarios utilizados, esto debido a que por defecto hydra trabaja con 16 hilos simultáneos para efectuar el ataque.

De esta manera tenemos distintas alternativas para realizar ataques de diccionario, a formularios de inicio de sesión en aplicaciones web.

Como prevenir ataques de diccionario

  • Limitar el numero de intentos fallidos por usuario, superando este limite bloquear el inicio de sesión del mismo.
  • Garantizar que cada petición de inicio de sesión sea única y originada desde la aplicación web implementando token CSRF o un Captcha.

Referencias