Sei sulla pagina 1di 10

Practica SQL Injection en DVWA

En el entorno de entrenamiento que brinda DVWA nos muestra una sección


dedicada al SQL Inject, con la cual demostraremos el procedimiento seguido
para conseguir las contraseñas de los 5 usuarios disponibles en la base de
datos.

Comúnmente se usa ese campo de texto para ingresar un numero de id (1-5) y


obtener el nombre y apellido, si se ingresa un id que no está en el rango,
simplemente no muestra datos ni error.
Lo primero que hicimos fue probar una de las pautas dadas en clase por el
profesor para comprobar la vulnerabilidad de la página.

Según lo visto, este fragmento de sentencia sql debería hacer que los datos de
la consulta sean traídos sin tener en cuenta si el id es el buscado o no debido al
or y a la identidad matemática usada. Traerá los registros que tengan un id y
ya. Al dar clic en el botón pasa lo siguiente:

Aun cuando la ejecutamos según lo indicado, no parece haber pasado mayor


cosa. Después de estudiar y profundizar un poco mas en el entorno vemos que
cuenta con tres niveles diferentes de seguridad siendo high el mayor, low el
más bajo pasando por médium. Entonces lo que tenemos que hacer es
configurar nuestro entorno en low para así poder aplicar las estrategias y
obtener algún resultado.
Una vez hecho esto, procedemos a aplicar una vez más nuestro pedazo de
código sql en la caja de texto con lo que podemos obtener el siguiente
resultado (Por la razón dicha anteriormente)
Bien, ahora que sabemos que el fragmento funciona, podemos expandirlo con
un “union” y agregarle una segunda sentencia sql que nos extraiga las
contraseñas de la aplicación. Una primera idea fue realizar un select donde
trajéramos todos los registros de la tabla “users”.

Pero nos encontramos con este error que nos dice que la sintaxis sql esta mal,
y esto es debido a la comilla de la sentencia sql dentro de la vista php que
espera cerrar otra comilla que juntas encierran un valor char, sin embargo
nosotros no tuvimos esto en cuenta.
Se nos ocurre entonces usar esa comilla para cerrar un where con el nombre
del administrador así

Pero nos encontramos con este error que nos dice que el número de columnas
de cada sentencia no es el mismo y no se puede hacer el “union”.

Entonces en vez de usar el asterisco para traer todas las columnas, pasamos a
traer únicamente la clave del usuario, que se nos ocurrió que su nombre más
lógico para la columna seria password, y el primer nombre cuya columna ya
sabemos que se llama first_name luego de echarle una mirada al código fuente
de la pagina de entrenamiento.
Y ahí está! Además de traer todos los registros de la tabla (primer select, el
que está en la página) también trajo la columna password y la columna
first_name del usuario con nombre “admin” (con la ayuda del unión y la
sentencia inyectada).

Nos damos cuenta entonces que la contraseña de “admin” esta codificada en md5,
por lo que hacemos uso de una página para encontrar cual es el valor real de esa cadena
de texto, que como ya sabíamos previamente, es “password”
Luego de esto, nuestra intención era repetir este procedimiento con cada uno de los 4
registros restantes, por lo cual continuamos con el usuario “Gordon”
Obtenemos la contraseña

Y la decodificamos

Sin embargo, decidimos encontrar una sentencia de forma que al ser inyectada nos
trajera todas las contraseñas de todos los usuarios entonces mejoramos la sentencia para
que haga lo que queremos. Organizamos primero que muestre el nombre de usuario y
después que muestre la contraseña, y ordenamos el final de la sentencia inyectada para
que no hayan problemas con la comilla de la sentencia de la página.

Y de una sola vez tenemos todas las contraseñas de todos los usuarios.
No queda más que usar la pagina ya mostrada para decodificar el resto de las
contraseñas.

Completamos así nuestro ataque SQL injection y damos fin a este tutorial.

Potrebbero piacerti anche