domingo, 4 de octubre de 2015

U2.T2. SQL injection. #MoocHackingMU

En esta tarea usaremos la técnica SQL injection para obtener información de una base de datos.

Podemos comentar conociendo que es eso de SQL y que es SQL Injecciton.

El lenguaje de consulta estructurado o SQL (por sus siglas en inglés Structured Query Language) es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en ellas. Una de sus características es el manejo del álgebra y el cálculo relacional que permiten efectuar consultas con el fin de recuperar, de forma sencilla, información de bases de datos, así como hacer cambios en ellas.Fuente wikipedia.

La inyección directa de comandos SQL es una técnica donde un atacante crea o altera comandos SQL existentes para exponer datos ocultos, sobrescribir los valiosos, o peor aún, ejecutar comandos peligrosos a nivel de sistema en el equipo que hospeda la base de datos. Esto se logra a través de la práctica de tomar la entrada del usuario y combinarla con parámetros estáticos para elaborar una consulta SQL. Fuente www.php.net

Ahora vamos con la tarea.
En esta tarea montaremos una maquina virtual con dvwa (Danm Vulnerable web App), que no es mas que una aplicación web basada en php y MySQL altametne vulnerable, que quiere decir esto, que como se no ocurra montarla en un servidor real y con acceso desde internet estamos exponiendo todos nuestros datos.
Esta applicación esta diseñada para profesionales y estudiantes.

La tarea no es muy complicada ya que una vez montada la máquina virtual, solo hay que seguir los pasos de este tutorial ( en concreto desde la sección 6 a la 9) siendo esta última la más interesante ya que introduciendo comandos en el cuadro de texto del usuario y se  accede a los datos de usuario y a sus contraseñas.

El nivel de la máquina virtual esta bajo para hacerla más vulnerable.

Voy a intentar realizar una interpretación de lo que ocurre.

En el primer paso nos piden que escribamos 1 en el cuadro de texto, y la pantalla nos devuelve en color rojo lo que sería una impresión de la respuesta del programa.
En realidad cuando ejecutamos el boton summit lo que esta escribiendo el recuadro es 
SELECT first_name, last_name FROM users WHERE user_id = '$id'
Selecciona nombre, apellido de usuarios cuyo id sea igual a " nosotros hemos puesto un 1.


En la siguiente instrucción ponemos %' or '0'='0 algo así como falso o verdadero. En definitiva TODO.
La orden que se ejecuta es:
mysql> SELECT first_name, last_name FROM users WHERE user_id = '%' or '0'='0'
selecciona nombre y apellido de los usuario que sean verdaderos o falsol.

Total todos los usuarios. 

En las siguientes añadimos a esta secuencia versión (), que nos indicará la versión del motor Mysql; user() que nos indicará el usuario que ejecuta el código(vamos el root del sistema creo). database() que nos devuelve el nombre de la base de datos, 

%' and 1=0 union select null, table_name from information_schema.tables where table_name like 'user%'#.
Nos devuelve los nombres de las bases de datos que tenga user.

 Con esto encontramos la base donde estánlos usuario y su claves.
y por último con la orden 
%' and 1=0 union select null, concat(table_name,0x0a,column_name) from information_schema.columns where table_name = 'users' le indicamos que nos detalle las columnas de la base de datos (campos) para descubrir el que posee las claves de acceso.

Para finalizar la orden estrella.
  • %' and 1=0 union select null, concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) from users #
  • Donde indicamos que nos escriba nombre, apellido, usuario y contraseña.

 

No hay comentarios:

Publicar un comentario

Deja tu comentario y ayuda a aprender a aprender.