Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Atacando Aplicaciones, APIs, Apps Móviles, Servidores Redes, Dispositivos IoT
SCI: Sistemas de Control Industrial
COS: Centro de Operaciones de Seguridad

Jeringa desbloqueando una base de datos

Consiguiendo las credenciales

Solución al Reto 2 de RedTiger Hackit
Las bases de datos son frecuentemente utilizadas para muchas aplicaciones y suponen una fuente de información crítica, por ello es necesario garantizar su seguridad. Este artículo muestra una forma de vulnerar una base de datos SQL con una inyección de código para obtener credenciales de acceso.

Entendiendo las bases de datos

Una base de datos es un bloque de información ordenado que permite ser consultado, modificado o borrado a gusto del usuario que tenga acceso privilegiado a dicha base de datos. Este conjunto de datos normalmente pertenece a un mismo contexto y está organizado de modo que su gestión y consulta se haga de manera eficiente. Un ejemplo de base de datos es una tabla relacional que permita relacionar a una persona con sus características principales como fecha de nacimiento, sexo, gustos, etc.

SQL

Debido al crecimiento de la informática, hoy en día la mayoría de bases de datos se encuentran de forma digital. Existes muchos tipos de bases de datos digitales (Ver Referencias), en este artículo nos enfocaremos en la base de datos relacional y en su protagonista principal: el lenguaje SQL.

El lenguaje SQL por sus siglas en inglés Structured Query Language es un lenguaje de programación enfocado en la interacción con bases de datos relacionales; creado en el año de 1970, todavía sigue siendo usado de manera recurrente en diferentes plataformas informáticas que usen dichas bases de datos, y con los años se ha venido mejorando para hacerlo seguro y robusto.

Inyección SQL

Muchas veces vemos en diversos sitios web de internet el campo de credenciales: usuario/contraseña, cuando ingresamos el usuario correcto con su contraseña correcta, simplemente estamos validando una información para obtener privilegios de acceso.

Una inyección SQL, es simplemente obtener acceso a las credenciales sin saber exactamente un nombre de usuario o una contraseña, vulnerado así la seguridad del sitio web en cuestión.

Nota: Una Inyección SQL solo sirve para sitios web o servidores que estén configurados para usar lenguaje SQL.

Reto RedTiger’s Hackit 2

En este reto nos proponen obtener acceso utilizando como pista: una condición.

reto
Figura 1. Imagen del reto

La inyección más fácil de todas es la que utiliza la condición OR para hacer pasar siempre un argumento como verdadero, y obtener acceso a la base de datos.

Es decir ponemos como user: cualquier usuario, y en password: cualquiercosa' or ‘1’=`1' de modo que la petición SQL queda de la siguiente manera:

test.py
1
SELECT * FROM users WHERE name='cualquierusuario' and password='cualquiercosa' or '1'='1'

De manera que la condición OR comprueba el texto: cualquier cosa o 1=1, y como 1 siempre será igual a 1 entonces el argumento es verdadero y obtendremos acceso.

Para el reto ponemos:

acceso
Figura 2. Obteniendo acceso

Y obtenemos acceso!

acceso
Figura 3. Acceso obtenido

A continuación se adjunta una tabla donde se muestran las inyecciones SQL más famosas utilizadas con la condición OR.

Cabe recalcar que la seguridad de cada sitio utiliza una forma diferente de verificar las credenciales, así que se deben tener en cuenta todas las posibilidades a la hora de hacer una inyección SQL con la condición OR.

sql-or
Figura 4. Tabla con Inyección SQL-OR

En este artículo se mostró cómo conseguir las credenciales de un sitio web a través de la inyección SQL más simple de todas, cabe recalcar que cada inyección es diferente porque depende de la configuración web del sitio que va a ser atacado. La seguridad de un servidor que utilice bases de datos relacionales y lenguaje SQL para interactuar con ellas debe ser robusta y muy bien concebida para soportar todo tipo de inyecciones SQL, o sino la información de la base de datos estaría siempre vulnerable.


Foto del autor

Alejandro Aguirre Soto

Ingeniero mecatrónico, Escuela de Ingeniería de Antioquia, Maestría en Simulación de sistemas fluidos, Arts et Métiers Paristech, Francia, Java programming specialization, Duke University , USA

Apasionado por el conocimiento, el arte y la ciencia.



Relacionado




Estado de los servicios - Términos de Uso