Ataques por fuerza bruta. DVWA, Hydra y BURPSuite

Aprovechando que en un post anterior: Preparando nuestro ciberlaboratorio para jugar con los SQL Injection, instalamos DVWA, vamos a realizar un ataque por fuerza bruta a uno de los apartados que DVWA nos ofrece para atacar.

Pantalla de Brute Force de DVWA
Con esta pantalla podemos probar los ataques por fuerzas bruta

¿Pero qué es hydra?

Hydra es una utilidad, que como no puede ser de otra forma ya la tenemos instalada en Kali, nos ayuda a realizar ataques de fuerza bruta.

GET /DVWA-master/vulnerabilities/brute/?username=admin&password=malmal&Login=Login HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Referer: http://localhost/DVWA-master/vulnerabilities/brute/
Cookie: security=low; PHPSESSID=l2c3qk37s5af19tr4kjtnl2qk0
Connection: close

Como veis tiene varias opciones. Lo más importante es que podemos indicarle:

  • Usuario o lista de usuarios.
  • Password o lista de passwords:
  • Servidor o lista de servidores.
  • URL de la llamada.

Y Hydra se encargará de ir haciendo ataques sin descanso.

Ataquemos a DVWA con Fuerza Bruta!

Lo primero que tenemos que hacer es configurar BURPSuite de tal forma que podamos capturar el login de un intento fallido. ¿Recordáis como se hacía? Si no os dejo el enlace al post: Jugando con los SQL Injection donde se explica como hacerlo. Pero también doy un pequeño recordatorio:

  • Configurar el proxy en el navegador, para usar el que captura BURPSuite (el local).
  • Abrir BURPSuite.
  • Ir a la pestaña Proxy y asegurarnos que “Intercept is on” está seleccionado.

Con esto ya tenemos a BURPSuite escuchando. Vamos al apartado de Fuerza Bruta de DVWA (que teníamos previamente cargada en el navegador), introducimos cualquier usuario, cualquier password y le damos a enviar. Recordemos que todo esto se hace con la configuración de seguridad “low” de DVWA, así que si no lo has cambiado hazlo. Ya atacaremos a DVWA en los otros modos en unas fases mas avanzadas del tutorial.

Si tenemos BURPSuite bien configurado se habra capturado el trafico, en mi caso la captura ha sido:

GET /DVWA-master/vulnerabilities/brute/?username=admin&password=malmal&Login=Login HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Referer: http://localhost/DVWA-master/vulnerabilities/brute/
Cookie: security=low; PHPSESSID=l2c3qk37s5af19tr4kjtnl2qk0
Connection: close

Con estos datos y la ip del servidor, que en mi caso es la de la misma máquina y supongo que en vuestro también, solo nos faltará decidir qué usuarios y passwords queremos probar.

Para el ejemplo probaremos con el usuario admin y un fichero de passwords generado por nosotros mismos con solo cuatro passwords. Pero no os preocupeis, encontrar ficheros de passwords para ataques de fuerza bruta es impresionablemente sencillo, lo único que para el caso no hace falta, solo queremos ver qué funciona, y queremos verlo rápido. Si lo probamos con un millón de passwords en nuestra máquina virtual posiblemente nos aburriremos durante unas horas.

Yo he creado un fichero que contiene cuatro passwords, cada password en una línea nueva. El fichero se llama fpssw.

test
aver
12234
password

Está claro que uno de ellos es el password correcto, y todos los que ya tenéis algo de experiencia en DVWA ya sabéis cual es. Para reducir la complejidad de comando en lugar de un fichero con nombres de usuarios he decidido probar con un usuario: admin.

Así que ahora ya lo tenemos todo, con los datos capturados por BURPSuite, la IP del servidor, el usuario y el fichero de passwords montamos el comando de hydra para atacar la página de DVWA.

hydra -l admin -P fpssw 192.168.1.106 http-get-form "/DVWA-master/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login:F=incorrect:H=Cookie: security=low; PHPSESSID=l2c3qk37s5af19tr4kjtnl2qk0" -V
Hydra v8.3 (c) 2016 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.
Hydra (http://www.thc.org/thc-hydra) starting at 2017-03-26 10:51:49
[DATA] max 4 tasks per 1 server, overall 64 tasks, 4 login tries (l:1/p:4), ~0 tries per task
[DATA] attacking service http-get-form on port 80
[ATTEMPT] target 192.168.1.106 - login "admin" - pass "test" - 1 of 4 [child 0] (0/0)
[ATTEMPT] target 192.168.1.106 - login "admin" - pass "aver" - 2 of 4 [child 1] (0/0)
[ATTEMPT] target 192.168.1.106 - login "admin" - pass "password" - 3 of 4 [child 2] (0/0)
[ATTEMPT] target 192.168.1.106 - login "admin" - pass "122" - 4 of 4 [child 3] (0/0)
[80][http-get-form] host: 192.168.1.106   login: admin   password: password
1 of 1 target successfully completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2017-03-26 10:51:50

Vamos a analizar un poco como hemos montado el comando.

  • -l admin: Le estamos indicando que use el usuario ‘admin’ para atacar. Podríamos haberle dado un fichero con diferentes usuarios.
  • -P fpssw: es el fichero de passwords que hemos generado nosotros mismos, lo hemos probado tan solo con cuatro passwords.
  • 192.168.1.16:Es la IP de la máquina en la que reside el servidor WEB que queremos atacar. En este caso es nuestra propia máquina.
  • http-get-form: Le estamos indicando a Hydra que el formulario al que vamos a atacar es de tipo GET, lo podemos ver en los datos capturados por BURPSuite. El método usado aparece justo antes de la URL llamada.
  • “/DVWA-master/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login:F=incorrect:H=Cookie: security=low; PHPSESSID=l2c3qk37s5af19tr4kjtnl2qk0”: Este es el paámetro más importante, es variable, y los diferentes campos se separan por ‘:’. Vamos a verlos:
    • /DVWA-master/vulnerabilities/brute/: La dirección a llamar. La encontramos en los datos capturados por BURPSuite.
    • username=^USER^&password=^PASS^&Login=Login: Estos son los campos pasados a la URL, podemos ver el nombre en los datos capturados por BURPSuite. En este caso los campos se llaman username y password. El valor los pone Hydra sustituyendo los campos ^USER^ y ^PASS^
    • F=incorrect: Le estamos indicando a Hydra el texto que le devolverá el servidor en caso de que el login no funcione correctamente. Es decir, le estamos diciendo a Hydra lo que tiene que buscar para saber si ha tenido éxito o no. También podríamos indicarle el texto completo, si nos fijamos en la pantalla de que nos da DVWA al realizar un login incorrecto el texto que nos muestra és: “Username and/or password incorrect.”. Pero he optado por usar tan solo una búsqueda parcial. Si el servidor nos devuelve algo con la palabra incorrect asumo que el login ha fallado. Se podría dar el caso que un usuario se llamará justamente: “incorrect”, si el servidor le saluda al entrar… entonces mi comando no funcionará.
  • H=Cookie: security=low; PHPSESSID=l2c3qk37s5af19tr4kjtnl2qk0: Las cookies las obtenemos, como nó, de los datos capturados de BURPsuite.
  • -V: Pues nada, le decimos a Hydra que nos muestre lo que va haciendo. En caso de que tengamos algún error, lo mejor es usar -d, que nos dará tanta información que seguro que nos ayuda a encontrar lo que está pasando.

Como podéis ver no es tan complicado, es más que nada laborioso, y seguramente no saldrá bien a la primera.

Problemas que nos podemos encontrar atacando a DVWA con Hydra.

  • No da ningún password como bueno, pero sabemos que uno de los pasados es correcto: Pueden ser 1000 cosas, pero los errores más comunes son:
    • DVWA tiene un nivel de seguridad superior: Dependiendo del nivel de seguridad DVWA no usa una llamada GET, e incorpora un token de usuario.
    • El PHPSession que le pasas ya no es válido: Si pasa mucho tiempo al hacer la prueba puede caducar. DVWA puede echarte fuera por timeout, aunque tu veas la pantalla del formulario de test de ataque de fuerza bruta tiene que ir haciendo una prueba de tanto en tanto con un password incorrecto. Si te redirecciona a la página de login es que se ha acabado la sesión. Pues eso mismo le pasa a Hydra.
  • Te da todos los passwords como correctos: Esto también puede pasar es mas pasará casi seguro. Quizás le estas pasando una URL que no existe, e hydra te devuelve un error que no tiene nada que ver con la frase de error que está esperando. Entonces te da el password como bueno.

Bonus track, un fichero de passwords de verdad.

No hay que hacer nada mas que buscar en Google:crack password list o hydra password list. Salen bastantes opciones. Mi preferida, por fiabilidad del sítio de descarga es:
https://github.com/danielmiessler/SecLists/blob/master/Passwords/10_million_password_list_top_100000.txt. Sí! En Github! ¿Pensavais que tendriamos que ir a alguna subweb del submondo de la deepweb? Pues no.

¿Para que quiere un Pen tester ético una lista de passwords? Pues porque para probar sistemas tiene que probar estos passwords, y recomendar si hace falta que los cambien. Como veréis hay varios ficheros en el repositorio. No hace falta probar con el de un millón de passwords os sorprendería la de gente que usa alguno de entre los 100 primeros. 🙂

Ya acabando.

Hydra es una gran herramienta, complicada de que funcione perfectamente si no conocemos algo de la WEB a atacar. Pero vaya que conseguir todo lo que hemos conseguido es igual de sencillo que hacerlo con DVWA. Pero no creamos que en el mundo “real” es tan sencillo. Normalmente encontramos más seguridad en las WEB’s que están funcionado que en un DVWA configurado de la forma más penosa que se puede configurar. Pero como os podéis imaginar conseguir reventar passwords de foros o web’s no muy seguras es tan solo cuestión de tiempo, aunque por suerte para muchos de nosotros es cuestión de mucho tiempo.

Hay otras herramientas, el mismo BURPSuite puede usarse para realizar un ataque de fuerza bruta, pero da lo mismo. Por ahora nos basta saber que estos ataques son mas o menos sencillos de realizar y que tenemos que proteger a nuestros usuarios de ellos. Por mi parte lo que hago en mis desarrollos WEB es no implementar ningún sistema de login, esto se lo dejo a los grandes: Facebook y Google, yo uso sus servicios a través de Firebase! Aquí os dejo el como: Autenticación de usuarios para tus proyectos WEB usando Firebase.

Por cierto, recordad el mensaje que nos suelta hydra al principio de cada ejecución:

Hydra v8.3 (c) 2016 by van Hauser/THC – Please do not use in military or secret service organizations, or for illegal purposes.

Si eres un espía o quieres hacer algo ilegal ,olvidate de usar Hydra.

Recordad que este post forma parte del tutorial de Hacking / Pen Testing Básico

Comentarios.