Menu - Pages

sábado, 13 de agosto de 2016

Hackeando bases de datos con SQL INJECTION usando SQLMAP.



¿Qué es SQL INJECTION? Y sobre todo ... ¿Qué es SQLMAP?
Antes de empezar con el articulo, vamos a aclarar estas dos preguntas.

SQL INJECTION : 

Un ataque de inyección SQL consiste en la inserción o “Inyección”
de datos en una consulta SQL desde un cliente de aplicación.
El éxito en una inyección SQL puede leer datos sensibles de la base de datos,
Modificar los datos (Insertar, actualizar y borrar), realizar operaciones
de administración sobre la base de datos (Como reiniciar el DBMS),
Recuperar el contenido de un archivo del sistema de archivos del DBMS
y, en algunos casos, ejecutar comandos en el sistema operativo.

Según el proyecto OWASP TOP TEN, los ataques de SQL INJECTION estan primeros en el puesto de vulnerabilidades critcas.
 ========================================================================

Una vez entendido este concepto, vamos a pasar a explicar ... ¿Qué es SQLMAP?

SQLMAP es una herramienta de penetration testing, que además es open source. Para automatizar los procesos de detectar y explotar vulnerabilidades de SQLi. Es una de las más utilizadas tanto en una auditoria, como en ataques externos. (Aunque en mí opinión, lo primordial seria entender bien como se realiza una inyección SQL manualmente, para luego facilitar nuestra vida con SQLMAP).


Llegado a este punto, comprendimos de que se trata SQLi y la herramienta SQLMAP, así que vamos a hacer una pequeña prueba de como utilizar esta herramienta para hackear una base de datos. (Generalmente todos los ataques los hago dentro de un enterno controlado, pero está vez voy a hacer la excepción a la regla, ya que creo que las practicas se entienden mejor cuando se llevan a la vida real) Así que vamos a allá ...

Primero lo primero, necesitamos encontrar una página vulnerable, pero ... ¿Como podemos saber sí una página es vulnerable a SQLi? Supongamos que tenemos esta URL : https://www.paginavulnerable.com/index.php?ID=2

Basta simplemente con agregarle una comilla simple al final del número de ID, así :
 El siguiente error, nos indicaria que posiblemente la página es vulnerable a SQLi.
Así que teniendo ya dicha página vulnerable, podemos pasar a lo divertido, al ataque con SQLMAP.

Sí no tenemos instalado SQLMAP, basta con abrir nuestra terminal y ejecutar el siguiente comando :
git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
 
Luego de haber instalado SQLMAP, sí escribimos en nuestra terminal : 

sqlmap -hh

Tendremos una serie de comandos que nos ayudará a familiarizarnos más con la herramienta. NOTA : Antes de hacer un ataque con SQLMAP, debemos combinarlo con tor y proxychains, porque generalmente los servidores rechazarán nuestras peticiones.
Para agregar una URL vulnerable, usamos el parametro : -u https://www.paginavulnerable.com/index.php?ID=2
Para listar las bases de datos que contiene el servidor, vamos a agregar el parametro : --dbs
Luego en el proceso de que SQLMAP verifique sí el ID de la URL que le asignamos es vulnerable, peude que nos aparezcan unos avisos como estos : 

Como este ataque va a ser muy básico, no vamos a prestarle atención y simplemente presionamos : "Y"
 A este aviso le presionamos : "N"

Y a este también le presionamos la tecla : "N"

Como resultado, al pasarle los parametros -u y --dbs, obtenemos la lista de bases de datos de este servidor :


Lo que obtuvimos fue la base de datos : db363851433 (A information_schema no le prestemos atención, ya que es la que almacena información acerca de las bases de datos que mantiene el servidor)

Así que ahora que sabemos la base de datos, tenemos que listar las tablas que contiene, lo cuál podemos hacerlo con el parametro : -D (nombredebasededatos) y --tables


Y a continuación, lo que nos va a devolver va a ser lo siguiente : 


Apuntamos a la base de datos "db363851433" Y nos trae la lista de tablas que contiene.
Muy bien, hasta ahora vamos excelente y todo es diversión, pero ahora vamos a buscar la tabla que nos interesa y es la tabla que contenga como registro, el usuario y contraseña del administrador. La cuál suponemos que es : admin_user
Entonces para saber que registros tiene esta tabla, debemos traer las columnas de la tabla admin_user pasandole el parametro : -D db363851433 -T admin_user --columns


Y a continuación nos va a traer las columnas que contiene la tabla admin_user y a su vez el premio : admin_user_name y admin_pass


Así que ahora tenemos todo lo que necesitamos, sabemos la base de datos, cuantas tablas contiene y cuales son y que columnas tienen las tablas a las que apuntemos obviamente. ¿Pero y ahora, como podemos saber el usuario y la contraseña del administrador? Simple, agregando el parametro dump : -D db363851433 -T admin_user -C admin_user_name, admin_pass --dump

Quizás podría aparecernos un aviso como este,que lo que nos pregunta es sí queremos guardar un archivo temporal para usarlo con otras herramientas, pero presionamos : "N"

En mí opinión, el diccionario que utiliza SQLMAP, para crackear los hashes de las contraseñas, no es muy efectivo que digamos, así que presionamos : "N"
Y ... ¡Bingo! Tenemos el usuario de administrador y la contraseña (Pero la contraseña esta hasheada con un algoritmo de encriptación, así que para crackearlo, vamos a necesitar el uso de otra herramienta como john-the-ripper o hydra.

En caso de que la explicación no se haya entendido, también hice un vídeo sobre la practica :


¡Esto fue todo, espero que les haya servido y gustado!
 

No hay comentarios.:

Publicar un comentario