Ataques SQL Injection

Hola que tal, en el anterior artículo, os escribí sobre un ataque con Fuerza Bruta con diccionarios, en éste vamos a hacer ataques con SQL Injection .

** Advertencia Legal ** 

Las técnicas y herramientas que se van a mostrar persiguen un propósito estrictamente educacional y de investigación. Se advierte al lector que su uso malintencionado podría derivar en sanciones económicas y en penas de prisión, que para el caso de España se tipifican dentro del artículo 197 del Código Penal español y que pueden variar desde unos pocos meses hasta varios años de cárcel. Tanto el autor de este artículo como el centro de enseñanza Comunix, deniegan cualquier tipo de responsabilidad sobre el mal uso que un usuario pudiera hacer del conocimiento adquirido en esta lectura.

****

Haremos un breve inciso para saber, aunque Vds. ya lo saben, ¿qué es un ataque SQL Injection?

Un ataque SQL Injection es un método de infiltración de código intruso que se vale de una vulnerabilidad informática presente en una aplicación en el nivel de validación de las entradas para realizar operaciones sobre una base de datos. (Wikipedia)

Tendremos que centrarnos y trabajar sobre las bases de datos relacionadas.

Vamos a diseccionar algunos conceptos como, una base de datos, qué es y su almacenaje:

  • Una serie de conceptos organizados y relacionados entre sí.
  • Estos conceptos tienen un objetivo en común, que es el de utilizarlos para fines propios o para exponerlo a otros, dicho de otro modo, vendría a ser la explotación por los usuarios o la empresa u organización.
  • Los componentes serán el Hardware, donde los almacenamos como un HDD (disco duro, por ejemplo); el Software, donde podemos gestionar dicha información y Datos, en sí la propia información.

Una vez tenido algunos conceptos claro debemos de saber cómo se estructura la base de datos SQL de bases de datos relacionadas:

  • El Servicio en sí, donde tenemos la ubicación de esos datos como puede ser en nuestro caso My SQL, que es el que vamos a utilizar.
  • Luego dentro de éste podemos crear bases de datos; por ejemplo dentro de una base de datos, tendríamos varias tablas dividido en filas con el nombre del personaje u otros, dirección, ciudad y años y columnas identificando en éste caso cada una de las filas; como la expuesta a continuación
sql injection Comunix
SQL Base Datos

 

sql injection Comunix

Tabla

Es importante entender bien como se estructuran la base de datos ya que para este ataque de SQL Injection se utilizara el propio lenguaje de SQL.

Ahora vamos a ver algunas consultas de SQL:

Crear una tabla:

  • Create Table + (nombre tabla) + opciones.

Insertar información: si, por ejemplo, quisiéramos añadir un campo nuevo, tendríamos el formato siguiente:

  • Insert into “nombre archivo” (field1,field2) values(data1,data2).

Consultas: Para hacer dicha consulta sobre una base de datos el formato sería y teniendo en cuenta que el cuadro arriba indicado se llamara “sec-activ”:

  • Select *from sec-activ  group_by field1

El “*” significa que quiere todos los datos sobre la consulta; si por el contrario quisiéramos algo mas concreto lo sustituiríamos por el concepto a consultar.

Especificar campos(field): Como hemos dicho anteriormente, quisiéramos especificar una consulta utilizaríamos lo siguiente:

  • Select * field1, field2 from sec-activ

Filtrando valores: Tomando como ejemplo la tabla anterior, podemos pedir conceptos donde su provincia sea “Barcelona, La Rioja, Madrid” …. cualquiera; la sintaxis sería:

  • Select* from sec-activ where field1 = (concepto a buscar)

Podemos combinar resultados y realizaremos consultas paralelas, es decir; con el parámetro UNION lo que hacemos es combinar consultas de la siguiente forma:

  • Select ……. UNION select…..

Poniendo un ejemplo tomando como referencia el cuadro anterior seria:

Seleccionamos cualquier dato de sec-activ, donde el campo Provincia sea Albacete y UNELO con select sec-activ donde el campo población sea Almansa. En sí mismo es la combinación repetida del formato “Filtrado de valores” por medio de UNION.

Para empezar con el ataque haremos antes una introducción a SQL Injection o más bien al ataque en sí.

  • Que sería el ataque SQL INJECTION: es una técnica donde inyectamos un código malicioso en una aplicación web donde quiere buscar una información que no está autorizada a tenerla.
  • Los objetivos pueden ser múltiples y variados dependiendo de donde o a donde se dirija; como usuarios y contraseñas; tener acceso al servidor o paneles de administración, hacer una ingeniería social de los mismos usuarios o robos de otros datos, por ejemplo.

Todo esto conlleva a una serie de problemas como son:

  • Confidencialidad: Puede acceder a información sensible y donde se pierde la confidencialidad.
  • Autenticación: Si el acceso a la zona restringida de una web es débil, con este ataque se puede acceder ni conocer usuario ni contraseña.
  • Integridad: unos de los parámetros importante en seguridad informática es que nadie pueda cambiar ni borrar nuestra información, así como leerla.

Funcionamiento:

Los ataques de SQL va orientado principalmente a formularios de login de una web o a un servicio.

De las sentencia que hemos visto antes, cuando insertamos usuarios y contraseñas, lo que se hace internamente es un SELECT de todo de una tabla (*), que suelen llamarse usuarios, users y también están incluido, por lo general, los MD5 de la contraseña.

De esta forma seria:

  • Sql = SELECT * FROM usuario WHERE usuario = `$usuario` and password = `$pass`;

Si tiene éxito, quiere decir que hemos insertado un usuario y contraseña correcto y podremos acceder a web al panel del administrador a la base de datos.

Por el contrario cual es el problema, pues si no se validaran esos datos introducidos puede ser que acepte lógicas para poder llevar a unas vulnerabilidades para poder acceder.

En que se basa esas lógicas. Tomando lo anterior seria de esta forma:

  • Sql = SELECT *FROM ususario WHERE ususario = `sec-activ` and password =`1234`OR `1`=`1`;

Aquí la lógica sobre el usuario sec-activ no será 1234, pero 1 si es igual 1, por lo que dicha sentencia seria correcta, y tened cuidado con las comillas simples (suelen estar junta a la tela “P”), son importantes.

Bases de datos y las Funciones de Información.

  • Dependiendo de la base de datos a utilizar, en nuestro caso seria MYSQL hay ciertas funciones que si vemos que son vulnerables, como veremos en el caso práctico, van a importar datos importantes y relevante de una tabla de usuario, algo que estemos buscando, y vamos a ayudarnos de estas versiones (VERSION () ).
  • En relación con el anterior también nos va a decir como se llama la base de datos: DATABASE()
  • Y también el usuario y host: USER()

En estas bases de datos relacionales se encontrarán INFORMATION_SCHEMA que están por defecto y tiene información del resto de las bases de datos. Y están formadas por:

  • TABLES: Información de las tablas.
  • COLUMNS: Información de las columnas en tablas.
  • STATISTICS: Información de los índices de las tablas.
  • USER_PRIVILEGES: que son los permisos globales.

A partir de aquí, intentaré ser lo más exacto, en cuanto al orden y procedimiento, y así se pueda entender sin que se pase por alto ningún paso.

Ahora procederemos a la práctica que la haremos, sobre una página donde se puede hacer ya que como sabéis esto no estaría bien de la misma forma que uno no puede ir a una joyería a robar en ella.

Dicho esto, la pagina web es la siguiente y os podéis descargar material sobre lo que vamos a llevar a cabo.

Página web: http://www.dvwa.co.uk/

3 sql injection Comunix

 

Una vez dentro tendremos la posibilidad de realizar una serie de ataques, disponibles en el lado izquierdo de la pantalla, que podremos hacer:

 sql injection Comunix

Ahora veremos el ataque SQL Injection, pero antes, debemos de ir a la opción DVWA Security que esta debajo de los ataques y señalado en la imagen anterior; donde veremos la dificultad a la que estará sometida todos los ataques descrito en ella, con unos niveles de dificultad, que irá de baja, media, alta, imposible.

 sql injection Comunix

Como es lógico vamos a escoger el nivel bajo, que lo podremos ver en la parte inferior izquierda de la misma página.

 sql injection Comunix

Una vez comprobado estos datos vamos a las opciones de ataques, concretamente iremos a SQL Injection y veremos un apartado donde tendremos que poner un identificador “User ID”.

 sql injection Comunix

Ahora como he mencionado en la imagen anterior vamos a interactuar para saber el resultado y en base al mismo iremos desarrollando el ataque.

Vamos a poner por ejemplo un numero el “1”, luego “a” luego “6” y veremos lo siguiente:

 sql injection Comunix

 

Para el primer ejemplo “1” nos sale que hay en la base de datos  un usuario = admin

Otro ejemplo, poniendo el número “2” y “4”, el resultado variará, ya que como vemos en la imagen hay una identificación positiva para el primero (opción A:2) y no hay para la  (opción B:4) por lo que puede ser que solo tenga la base de datos 3 usuarios.

 sql injection Comunix

 

Como ya tenemos en base algo claro, vamos a hacer un poco de lógica como más arriba hemos indicado, de la siguiente forma:

2′ and 1=1 #

El resultado como veis es el descrito abajo con el nombre: Gordon y de segundo Brown para el numero 2 en la base de datos.

 sql injection Comunix

Ahora vamos hacer otra consulta distinta:

2′ and 1=2 #

Como veremos en la ilustración al ser distinto la igualación no nos devuelve nada, porque está aplicando la lógica de la que hablábamos antes y no encuentra nada, siendo nula la búsqueda.

 sql injection Comunix

Ahora vamos a ver que nos está devolviendo la consulta y quizás saquemos algo más; pero primero vamos a ordenarlos de ésta forma:

2`and 1=1 order 1 #

Nos saldrá un error donde nos dice que la consulta no existe, no está teniendo éxito.

 sql injection Comunix

Si observamos y cambiamos el ultimo “1” por “3” dará el mismo error.

2`and 1=1 order 1#              2 and 1=1 order 3#

 sql injection Comunix

Como verán Vds, los campos que nos devuelven son “1”, el nombre y “2”, el apellido. A continuación, vamos a acceder a la base de dato y vamos a ver unas funciones dadas por MySQL que ya hemos visto al principio; por ejemplo, la versión…

Antes tenemos que tener en cuenta los datos de la lógica que hemos obtenido anteriormente y vamos añadirle mas campos a esa búsqueda con UNION como hemos realizado anteriormente añadiendo al final VERSION()#; devolviendo lo siguiente:

2′ and 1=1 union select 1,version() #

Y nos devolverán en la primera parte el nombre y apellido y también nos devuelve la versión.

A partir de aquí podemos ir viendo cosas importante como el ususario cambiando donde antes habíamos puesto Version()# lo podemos cambiar por User#.

2′ and 1=1 union select 1,user() #

 sql injection Comunix

Todos estos datos que vamos recopilando lo debemos de anotar para saber luego lo que queremos sacar de ella.

El siguiente paso es que como existe una base de datos donde están almacenados los usuarios, vamos a hacer uso de las funciones que tiene el information_Schema Tables.

Aquí está la documentación la base de datos de Information_Schema Tables

 sql injection Comunix

Web imagen: https://www.databazy.info/dev.mysql.com/doc/refman/5.7/en/information-schema.html

Aquí hay información sobre el resto de las tablas y vamos a centrarnos en el que hemos señalado antes “information_Schema Tables”.

 sql injection Comunix

Web imagen: https://www.databazy.info/dev.mysql.com/doc/refman/5.7/en/tables-table.html

En esta tabla la podemos usar por ejemplo para que nos devuelva todos los nombres de la tabla de datos usando “Table_name”; y la consulta seria igual que cuando averiguamos la versión; donde quitaríamos la versión y tendríamos que poner “table_name from information_schema tables” y resultado sería:

 sql injection Comunix

A partir de aquí, si nos centráramos en una base de datos específica, habría que tener en cuenta que ésta, tienen también otras bases de datos que te vienen por defecto y habría que suprimirlas.

La sintaxis para quitarlas sería:

  • 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’ #

Aunque es la larga la formula, nos quitaría muchas bases de datos que quizás con respecto a la anterior podríamos ser mas objetivos; siendo éste el resultado.

 sql injection Comunix

Aquí se vera que hay dos tablas, y la que nos puede interesar es la de usuarios, “users”.

Y como he comentado anteriormente habrá que “jugar” otra vez con Information_schema; y como las tablas están formadas por columna y filas, debemos saber cuantas columnas tiene e iremos a “The Information_Schema Columns. Table.

 sql injection Comunix

Web imagen: https://www.databazy.info/dev.mysql.com/doc/refman/5.7/en/columns-table.html

La fórmula para indicarnos cuantas columnas tiene sería:

  • 2′ and 1=1 union select 1,column_name from information_schema.columns where table_name=’users’#

 sql injection Comunix

Con ésta fórmula vamos a sacar del usuario 1 todo lo que contenta en la tabla desde el nombre, apellido, avatar, contraseña, etc.

Lo más importante de esta tabla seria el usuario o Login y el password y lo haríamos del siguiente modo:

  • 2′ and 1=1 union select 1,concat(first_name,password) from users #

 sql injection Comunix

De esta forma sacaremos, como vemos en la ilustración, como usuario; admin y con un serial de números y letras que sería la contraseña guardada en un HASH ya que no lo tienes reconocido en una base de datos, que a continuación vamos a hacer. Para ponerlo que se pueda visualizar mejor se puede poner dentro del “concat” (0x0a) que es un “enter”, para que nos separen los campos.

  • 2′ and 1=1 union select 1,concat(first_name,0x0a,password) from users #

 sql injection Comunix

Lo que podemos hacer ahora es obtener mediante un servicio online para poder obtener la contraseña.

Unas de las páginas web que podemos utilizar es la siguiente:

https://hashkiller.co.uk/md5‐decrypter.aspx

O también podéis ir a la página: https://www.md5online.org/  que también se puede hacer.

Esta página, “ haskiller”,  está dividida en dos partes, donde el primer recuadro estará el Hash a buscar, luego iremos abajo y aceptamos y veremos lo siguiente:

 sql injection Comunix sql injection Comunix

 

 

 

 

Como observarán, este hash ya ha sido registrado que es “abce123” y podremos acceder a la base de datos correspondiente o servidor web, ya que tenemos la contraseña.

Otra forma de hacerlo y con la que podríamos adelantare, es con una herramienta que es “SQLMAP”.

De esta forma vamos a averiguar las mismas cosas con otro formato o sintaxis y sabremos si hay alguna vulnerabilidad.

 sql injection Comunix

El resultado es que tenemos una vulnerabilidad:

 sql injection Comunix

 

Para asegurarnos podremos preguntar cuál es el usuario actual donde la sintaxis sería.

 sql injection Comunix

 

Donde nos sale correctamente:  sql injection Comunix

que es el administrador del sistema.

También podemos hacer que nos devuelva los nombres de las bases de datos, escoger una de ellas y que nos muestre los nombres de las tablas que los contiene:

 sql injection Comunix

 sql injection Comunix

En este punto nos mostrará las tablas que contiene la base de datos “dvwa”, los nombres de las tablas que son guestbook y users:

 sql injection Comunix

Para obtener las tablas y columnas de la base de datos que hemos escogido “dvwa”, la sintaxis y el resultado serían por este mismo orden:

Sintaxis:

 sql injection Comunix

Resultado:

 sql injection Comunix

Como verán y recordarán nos salen lo que anteriormente estábamos busando que son  “first_name” y “password, entonces haremos lo siguiente.

 sql injection Comunix

Dando como resultado:

 sql injection Comunix

También nos preguntarán si queremos guardar los hashes encontrados y por ende, si queremos crackear dichos hashes; obviamente diremos que sí, obteniendo como resultado la contraseña exacta señalándola en amarillo:

 sql injection Comunix

Para su comprobación, escogeremos otro usuario y contraseña por ejemplo el primero y veremos cómo podemos acceder.

 sql injection Comunix

 

Por último tengo que decir que hay que tener cuidado a la hora de hacer bases de datos y es muy fácil cometer errores, los cuales nos pueden llevar a las vulnerabilidades.

Con respecto a este o estos tipos de ataques SQL Injection son efectivos y rápidos si se hacen de ésta última forma, pero he querido, primero, poner una versión anterior, concretamente la (v.5,7) porque hay pasos que a mi entender se ve mejor en ésta, al fin y al cabo con cualquiera de las versiones actualizada la conclusión y finalidad es la misma; SI HAY VULNERABILIDAD….

Sin más, espero que les haya gustado. Reciban un cordial saludo,

Dark| @Rewolucion

2 octubre, 2018

1 respuestas sobre "Ataques SQL Injection"

  1. Muy interesante, sobre todo el punto de la web dvwa para practicar!!!

Deja un mensaje



Tú escuela de Hacking Ético.
Avda. de Las Américas 3, 4º A
29002, Málaga, Málaga,
(+34) 951 043 792 - info@comunixgroup.com

Suscríbete a nuestro Boletin

  Suscribirse ahora
Copyright © 2018 - Todos los derechos reservados.

X