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@miipEn primer lugar vamos a iniciar sesión en el servidor MySQL desde la línea de comandos con el siguiente comando:
mysql -u root -pEn 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:
Configuramos el nivel más bajo para poder probar distintas técnicas de hacking y detección de vulnerabilidades.
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-gtkDespué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
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.