Ver destacados

Pentesting de vulnerabilidades web con Damn Vulnerable Web App

Damn Vulnerable Web App (DVWA) es una aplicación web desarrollada con PHP y MySQL. Esta aplicación es un sitio web cuyo código es vulnerable a distintos ataques.
Escrito por
13.2K Visitas  |  Publicado ene 22 2016 22:41
Favorito
Compartir
Comparte esta pagina a tus Amigos y Contactos usando las siguientes Redes Sociales


 

El objetivo es que tanto usuarios principiantes como profesionales interesados en analizar y resolver problemas de seguridad puedan poner a prueba sus conocimientos, habilidades y herramientas en un entorno simulado, este tipo de herramientas son muy útiles para que los desarrolladores web puedan comprender los problemas que puede tener una aplicación o sitio web y mejorar la programación o buscar vulnerabilidades.

 

Aunque la mayoría de los desarrolladores han tomando precauciones ante posibles vulnerabilidades, aun siguen vigentes muchas vulnerabilidades como Cross Site Scripting (XSS) o inyecciones SQL, que afectan la seguridad de muchas web y por lo tanto de los usuarios.

 

En este tutorial vamos a instalar y configurar un sitio web para utilizar como laboratorio de pruebas para auditorías de seguridad web, donde encontraremos distintas las vulnerabilidades, inclusive más habituales proponiendo varios niveles de dificultad en las vulnerabilidad, que luego podrán ser analizadas.

 

Utilizaremos Damn Vulnerabilty Web Aplication (DVWA), es un sitio web para instalar en cualquier servidor que tengamos, inclusive uno local para poder hacer pruebas de pentesting. Podemos descargarlo desde su pagina oficial.

 

Después de descargarlo necesitamos un servidor web o un servidor local como se indico en los tutoriales:

 

Ahora después de descargar el archivo zip de Damn Vulnerabilty Web Aplication (DVWA), lo descomprimimos y lo copiamos en la carpeta de nuestro servidor web, en ese caso usamos Xampp bajo Linux.

 

 

A continuación necesitamos configurar la base de datos para ello iremos desde phpmyadmin.

 

 

Si queremos hacerlo desde una ventana de terminal utilizaremos los siguiente comando, podemos acceder via ssh:

ssh usuario@miip
En primer lugar vamos a iniciar sesión en el servidor MySQL desde la línea de comandos con el siguiente comando:
mysql -u root -p
En este caso, se especifica el usuario root con la bandera -u, y luego se usa la bandera -p que indica que MySQL debe solicitar una clave de acceso. Ingresamos la clave de acceso para poder iniciar sesión en MYSQL.

 

Luego podemos crear la base de datos desde la linea de comandos:

create database dvwa;
A continuación vamos al directorio config y luego editamos el archivo config.inc.php, aquí modificamos los datos para indicar el nombre de la base de datos, el usuario y clave de acceso:
<?php$_DVWA = array();$_DVWA[ 'db_user' ] = 'root';$_DVWA[ 'db_password' ] = '';$_DVWA[ 'db_database' ] = 'dvwa';$_DVWA[ 'db_server' ] = 'localhost';?>
Guardamos la configuración y deberemos ir al navegador donde tenemos la web y hacemos clic en Create/Reset Database para continuar con la instalación.

 

 

A continuación crearemos los datos de la base de datos que configuramos y podemos ver algunas herramientas que trae la web.

 

 

A continuación después de la instalación, cuando volvamos a ingresar a la web http://localhost/dvwa, nos saldrá una pantalla de login:

 

 

Para acceder a la web utilizaremos los siguientes datos:

 

Usuario: admin
Clave: password

 

 

En la columna izquierda de la web tenemos un menú al final podemos ver la opción DVWA SECURITY, desde aquí podemos configurar el nivel de dificultad para las vulnerabilidades, los niveles de seguridad son bajo, medio, alto o imposible.

 

El nivel de seguridad cambia el nivel de vulnerabilidad de DVWA:

 

Nivel de Seguridad Bajo
Este nivel de seguridad es completamente vulnerable y no tiene ninguna las medida de seguridad, por lo que nos permitirá probar técnicas de hacking con mas facilidad. Su uso es ser como un ejemplo de cómo las vulnerabilidades de aplicaciones web se manifiestan a través de prácticas de codificación malos y para servir como una plataforma para enseñar o aprender técnicas básicas de explotación, cracking y hacking.

 

Nivel de Seguridad Medio
Este nivel sirve para mostrar vulnerabilidades, donde el desarrollador ha fallado en asegurar que el código y el desarrollo no tenga vulnerabilidades.

 

Nivel de seguridad Alto
Este nivel pretende que los usuarios mas avanzados se enfrente a una dificultad media, con una mezcla de malas prácticas de programación en el código de la web. Aquí podremos probar técnicas avanzadas.

 

Nivel de seguridad Imposible
Este nivel es el mas seguro contra todas las vulnerabilidades. Se utiliza para comparar el código fuente vulnerable al código fuente segura. Este nivel pretende demostrar como se debe desarrollar correctamente un sitio web y como debe responder antes posibles ataques.

 

Configuramos el nivel más bajo para poder probar distintas técnicas de hacking y detección de vulnerabilidades.

 

Test Brute Force para crackear un login con un script propio

Accedemos al link Brute Force y vemos que hay un formulario para login, ingresamos cualquier datos en usuario y clave para hacerlo fallar y ver si ocurre algún error.

 

 

Al fallar el login vemos una url con los datos ingresados, tomando la URL que nos muestra:
http://localhost/dvw...ve&Login=Login#,

 

Por lo tanto podemos crear un script que pruebe distintas combinaciones para usuario y clave o utilizar un programa como xHydra que es una interfaz gráfica para Hydra o directamente desde la linea de comando si ese es el único acceso que tenemos via SSH al servidor.

 

Para instalar Hydra utilizaremos los siguientes comandos:

sudo add-apt-repository ppa:pi-rho/securitysudo apt-get updatesudo apt-get install hydra hydra-gtk
Después de instalado deberemos buscar o crear las listas de usuario y claves posibles en formato txt o buscar algún diccionario para utilizar como hicimos en el tutorial.

 

 

También un archivo de texto con nombres de usuarios posibles, también podemos usar alguna base de datos ya funcional como estos diccionarios de skullsecurity.org que se utilizan en muchas herramientas, antivirus, etc, que permiten el crack o hacking de contraseñas. Todas las fuentes de datos son de libre utilización.

 

 

A continuación utilizaremos hydra con las listas que tengamos mediante los siguientes comandos:

hydra -L /home/innove/usuarios.txt -P /home/innove/claves.txt 192.168.0.11 http-post-form "/dvwa/login.php:username=^USER^&password=^PASS^&Login=Login:Login failed" -w 10 -V

 

Podemos observar que algunos resultados han sido positivo, mostrando en verde los usuarios y clave que lograron el login aceptado. Si probamos con usuario admin y clave password ingresaremos a ver el panel del usuario

 

 

 

Vulnerabilidad SQL Injection

En el nivel de seguridad mas bajo la web es vulnerable a inyección SQL, antes de empezar a inyectar código en el campo de texto, podemos observar el código que consulta a la tabla en PHP que es vulnerable.
<? //recibe lo que ingresamos en el campo de texto ID$id = $_GET ['id'];// Ejecuta la sentecia SQL$rs = "SELECT first_name, last_name FROM usuarios WHERE user_id = '$id'"?>
El error es que no debería enviarse los datos por GET sino utilizando POST y segundo debe chequearse que los datos que llegan no contengan código malicioso.

 

La sentencia SQL ejecuta directamente lo que llega sin controles o verificación alguna. Así que esto hace que el código sea vulnerable a inyecciones SQL, por ejemplo podemos obtener el listado completo de usuarios si en la pagina de inyección SQL en lugar de un id añadimos el siguiente código:

1' OR 1=1 UNION SELECT null, version()#
El resultado será el listado de usuarios.

 

 

También podremos obtener todo el listado de tablas si aplicamos en el campo de texto el siguiente código.

1' OR 1=1 UNION SELECT null, table_name FROM INFORMATION_SCHEMA.tables

 

Podemos aplicar otras combinaciones para obtener el listado de usuarios y ver los datos de cada tabla.

¿Te ayudó este Tutorial?

Ayuda a mejorar este Tutorial!
¿Quieres ayudarnos a mejorar este tutorial más? Puedes enviar tu Revisión con los cambios que considere útiles. Ya hay 0 usuario que han contribuido en este tutorial al enviar sus Revisiones. ¡Puedes ser el próximo!