Explotar la Inyección SQL con sqlmap

LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderás cómo explotar vulnerabilidades de inyección SQL utilizando sqlmap, una herramienta automatizada de inyección SQL y captura de bases de datos. Practicarás la instalación de sqlmap, la configuración de una aplicación web vulnerable (DVWA) y la realización de diversos ataques de inyección SQL para extraer datos sensibles.

El laboratorio demuestra técnicas prácticas para identificar puntos de inyección, ejecutar consultas de base de datos y analizar la información extraída. A través de este ejercicio práctico, adquirirás habilidades esenciales tanto para pruebas de seguridad ofensiva como para la evaluación defensiva de vulnerabilidades.

Instalar sqlmap

En este paso, instalarás sqlmap, una popular herramienta de pruebas de penetración de código abierto para detectar y explotar vulnerabilidades de inyección SQL. La inyección SQL es una vulnerabilidad común de seguridad web que permite a los atacantes interferir con las consultas de base de datos. sqlmap automatiza el proceso de detección y explotación de estas vulnerabilidades.

sqlmap está escrito en Python, por lo que usaremos el gestor de paquetes de Python, pip, para instalarlo. pip es una herramienta que viene con Python y te ayuda a instalar y gestionar paquetes adicionales de Python. Sigue estos pasos cuidadosamente:

  1. Primero, asegúrate de estar en el directorio de trabajo predeterminado. Esto es importante porque mantiene tus archivos de proyecto organizados:
cd ~/project
  1. Actualiza pip a la última versión. Mantener pip actualizado garantiza que puedas instalar las últimas versiones de los paquetes y evitar problemas de compatibilidad:
pip install --upgrade pip
  1. Instala sqlmap utilizando pip. Este comando descarga sqlmap y todas sus dependencias del Índice de Paquetes de Python (PyPI):
pip install sqlmap
  1. Verifica la instalación comprobando la versión. Esto confirma que sqlmap está instalado correctamente y te muestra qué versión tienes:
sqlmap --version

Deberías ver una salida similar a:

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal...

[xx:xx:xx] [INFO] the back-end DBMS is
sqlmap version: 1.7.x

Esto confirma que sqlmap se ha instalado correctamente. La herramienta estará disponible globalmente en tu sistema ya que pip instala los paquetes en el entorno de Python del usuario. La advertencia legal te recuerda que sqlmap solo debe usarse en sistemas en los que tengas permiso para realizar pruebas.

Puntos clave para principiantes:

  • pip maneja automáticamente la descarga e instalación de paquetes de Python
  • La bandera --upgrade actualiza pip a la última versión
  • sqlmap se instala en el directorio de paquetes de Python donde residen todos los paquetes de Python
  • La bandera --version es una forma estándar de verificar la instalación en muchas herramientas de línea de comandos
  • La salida muestra el número de versión de sqlmap y información legal importante sobre el uso adecuado

Configurar una aplicación web vulnerable

En este paso, configurarás una aplicación web deliberadamente vulnerable llamada "Damn Vulnerable Web Application" (DVWA) que contiene vulnerabilidades de inyección SQL. Esto servirá como nuestro entorno de prueba para practicar técnicas de inyección SQL con sqlmap. DVWA está específicamente diseñada para que profesionales de seguridad y estudiantes aprendan sobre vulnerabilidades web en un entorno seguro y legal.

  1. Primero, asegúrate de estar en el directorio correcto. El directorio ~/project es donde almacenaremos todos nuestros archivos de laboratorio:
cd ~/project
  1. Clona el repositorio de DVWA desde GitHub. Este comando descarga todos los archivos de la aplicación a tu máquina local:
git clone https://github.com/digininja/DVWA.git
  1. Navega al directorio de DVWA. Aquí es donde se almacenan todos los archivos de la aplicación después de clonar:
cd DVWA
  1. Inicia el servidor web incorporado de PHP. Estamos usando el puerto 8000 porque es comúnmente disponible y no entrará en conflicto con otros servicios. 0.0.0.0 significa que el servidor aceptará conexiones desde cualquier interfaz de red:
php -S 0.0.0.0:8000
  1. Abre una nueva pestaña en la terminal (haz clic derecho en la terminal y selecciona "Nueva pestaña") mientras mantienes el servidor en ejecución. Esto te permite seguir trabajando mientras el servidor web permanece activo.

  2. En la nueva pestaña, verifica que el servidor esté funcionando correctamente. El comando curl obtiene el contenido de la página de inicio para confirmar que la aplicación está respondiendo:

curl http://localhost:8000

Deberías ver una salida HTML que contenga "Damn Vulnerable Web Application (DVWA)".

Para los principiantes que quieran entender los componentes:

  • DVWA es una aplicación web PHP/MySQL específicamente diseñada con vulnerabilidades de seguridad con fines educativos
  • El servidor incorporado de PHP (php -S) es una forma sencilla de ejecutar aplicaciones PHP durante el desarrollo
  • El puerto 8000 es un puerto alternativo común para servidores de desarrollo cuando el puerto 80 no está disponible
  • La aplicación será accesible en tu navegador en http://localhost:8000

Nota: Mantén el servidor en ejecución en la primera pestaña de la terminal durante todo el laboratorio. Todos los pasos posteriores utilizarán esta aplicación vulnerable. Si cierras accidentalmente esta pestaña, tendrás que reiniciar el servidor repitiendo el paso 4.

Localizar un punto de inyección

En este paso, aprenderemos cómo identificar una vulnerabilidad básica de inyección SQL en la DVWA (Damn Vulnerable Web Application). Este es un primer paso crucial antes de utilizar herramientas automatizadas como sqlmap, ya que necesitamos confirmar manualmente dónde existe la vulnerabilidad.

  1. Primero, asegúrate de que el servidor de DVWA todavía esté en ejecución (desde el Paso 2). Si no lo está, reinícialo:
cd ~/project/DVWA && php -S 0.0.0.0:8000

Este comando inicia un servidor web PHP que ejecuta DVWA en el puerto 8000.

  1. Abre la DVWA en tu navegador visitando:
http://localhost:8000
  1. Inicia sesión con estas credenciales:
Username: admin
Password: password

Estas son las credenciales predeterminadas proporcionadas por DVWA con fines de prueba.

  1. Establece el nivel de seguridad en "bajo" (menú izquierdo: DVWA Security -> establecer en Bajo -> Enviar)
    DVWA tiene diferentes niveles de seguridad; estamos utilizando "bajo" para demostrar vulnerabilidades básicas sin protecciones.

  2. Navega a "SQL Injection" en el menú izquierdo
    Aquí es donde probaremos las vulnerabilidades de inyección SQL.

  3. Prueba la inyección SQL ingresando esto en el campo de ID de usuario:

1' OR '1'='1

Esta es una cadena de prueba clásica de inyección SQL. Analicémosla:

  • La comilla simple (') cierra la consulta original
  • OR '1'='1' agrega una condición que siempre es verdadera
  • Juntas, manipulan la consulta SQL para devolver todos los registros
  1. Haz clic en "Enviar". Deberías ver todos los registros de usuarios devueltos, lo que indica una inyección exitosa.
    Si ves más datos de los esperados (todos los usuarios en lugar de solo uno), esto confirma que la inyección funcionó.

Conceptos clave para principiantes:

  • La inyección SQL ocurre cuando la entrada del usuario se incluye directamente en las consultas de base de datos sin una adecuada sanitización
  • La comilla simple (') es un carácter común utilizado para salir de la sintaxis de la consulta SQL prevista
  • 'OR '1'='1' es una carga útil de prueba básica que explota esto creando una condición que siempre es verdadera
  • El nivel de seguridad "bajo" elimina las protecciones para que podamos centrarnos en aprender la vulnerabilidad

Esta prueba exitosa muestra que el parámetro de ID de usuario es vulnerable a la inyección SQL. En el siguiente paso, utilizaremos este punto de vulnerabilidad confirmado con sqlmap para una explotación más avanzada. Recuerda que encontrar los puntos de inyección manualmente ayuda a entender cómo funcionan las herramientas automatizadas detrás de escena.

Extraer datos con sqlmap

En este paso, utilizarás sqlmap, una herramienta automatizada de inyección SQL, para explotar la vulnerabilidad que identificamos anteriormente. La inyección SQL permite a los atacantes interactuar directamente con una base de datos, y sqlmap ayuda a automatizar este proceso probando parámetros y extrayendo información.

  1. Primero, asegúrate de estar en el directorio del proyecto donde ejecutaremos todos los comandos:
cd ~/project
  1. Ejecuta sqlmap contra la página vulnerable. El parámetro --cookie es crucial aquí porque DVWA requiere autenticación. Reemplaza <PHPSESSID> con el valor de la cookie que obtuviste al iniciar sesión en DVWA:
sqlmap -u "http://localhost:8000/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=<PHPSESSID>; security=low" --batch

La bandera --batch le dice a sqlmap que utilice las opciones predeterminadas automáticamente, lo cual es útil para los principiantes que están aprendiendo a usar la herramienta.

  1. Cuando sqlmap pregunte si quieres guardar la sesión, escribe "Y" y presiona Enter. Esto te permite reanudar el escaneo más tarde si es necesario.

  2. Para descubrir qué bases de datos existen en el servidor, usaremos la bandera --dbs que significa "bases de datos":

sqlmap -u "http://localhost:8000/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=<PHPSESSID>; security=low" --dbs --batch
  1. La salida mostrará las bases de datos disponibles. Deberías ver dos bases de datos listadas:
available databases [2]:
[*] dvwa
[*] information_schema

dvwa es nuestra base de datos objetivo, mientras que information_schema es una base de datos estándar de MySQL que contiene metadatos.

  1. Ahora examinemos las tablas dentro de la base de datos dvwa. El parámetro -D especifica el nombre de la base de datos, y --tables lista su contenido:
sqlmap -u "http://localhost:8000/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=<PHPSESSID>; security=low" -D dvwa --tables --batch

Explicación de los parámetros clave:

  • --cookie: Incluye tus credenciales de sesión para mantener el acceso autenticado
  • --batch: Ejecuta sqlmap en modo no interactivo utilizando las opciones predeterminadas
  • --dbs: Descubre los nombres de las bases de datos disponibles en el servidor
  • -D: Selecciona una base de datos específica para investigar
  • --tables: Recupera la lista de tablas dentro de la base de datos elegida

Analizar los datos recuperados

En este paso, examinaremos la información sensible de la base de datos que sqlmap extrajo exitosamente a través de la inyección SQL. Esto demuestra el impacto real de las vulnerabilidades de inyección SQL al mostrar exactamente qué datos pueden acceder los atacantes.

  1. Primero, recuperemos todos los datos de la tabla 'users' en la base de datos DVWA. Este comando se basa en lo que hicimos previamente, pero ahora estamos apuntando específicamente a la tabla de usuarios para ver la información de las credenciales (reemplaza con tu cookie de sesión):
sqlmap -u "http://localhost:8000/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=<PHPSESSID>; security=low" -D dvwa -T users --dump --batch

El -D dvwa especifica la base de datos, -T users apunta a la tabla de usuarios y --dump recupera todo su contenido.

  1. La salida revela información sensible de usuarios almacenada en la base de datos:
Database: dvwa
Table: users
[5 entries]
+---------+------------+-----------+---------+----------------------------------+-----------+------------+---------------------+
| user_id | first_name | last_name | user    | password                         | avatar    | last_login | failed_login        |
+---------+------------+-----------+---------+----------------------------------+-----------+------------+---------------------+
| 1       | admin      | admin     | admin   | 5f4dcc3b5aa765d61d8327deb882cf99 | admin.jpg | NULL       | 0                   |
| 2       | Gordon     | Brown     | gordonb | e99a18c428cb38d5f260853678922e03 | gordonb.jpg | NULL       | 0                   |
| 3       | Hack       | Me        | 1337    | 8d3533d75ae2c3966d7e0d4fcc69216b | 1337.jpg  | NULL       | 0                   |
| 4       | Pablo      | Picasso   | pablo   | 0d107d09f5bbe40cade3de5c71e9e9b7 | pablo.jpg | NULL       | 0                   |
| 5       | Bob        | Smith     | smithy  | 5f4dcc3b5aa765d61d8327deb882cf99 | smithy.jpg | NULL       | 0                   |
+---------+------------+-----------+---------+----------------------------------+-----------+------------+---------------------+

Observa que la columna de contraseñas contiene hashes MD5 en lugar de contraseñas en texto plano. Si bien esto es mejor que almacenar contraseñas sin procesar, el algoritmo MD5 se considera criptográficamente inseguro y vulnerable a ataques de tablas arcoíris.

  1. Puedes intentar descifrar estos hashes utilizando herramientas en línea como CrackStation copiando y pegando los valores de los hashes. Esto muestra cómo los algoritmos de hashing débiles pueden ser revertidos para revelar las contraseñas originales.

  2. Para entender la estructura completa de la base de datos, podemos recuperar su esquema:

sqlmap -u "http://localhost:8000/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=<PHPSESSID>; security=low" -D dvwa --schema --batch

La bandera --schema revela todas las tablas y sus estructuras de columnas, brindando a los atacantes un mapa de la base de datos completa. Esta es información extremadamente valiosa para una explotación adicional.

Puntos clave para principiantes:

  • El parámetro --dump extrae todos los datos de una tabla especificada
  • Los hashes MD5 a menudo se pueden descifrar utilizando tablas arcoíris precomputadas
  • La información del esquema de la base de datos ayuda a los atacantes a entender la estructura de los datos
  • Este ejercicio demuestra cómo una sola vulnerabilidad de inyección SQL puede llevar a la compromiso total de la base de datos
  • Siempre utiliza algoritmos de hashing fuertes y salados como bcrypt para el almacenamiento de contraseñas

Resumen

En este laboratorio, has aprendido cómo instalar y usar sqlmap para pruebas de inyección SQL, comenzando con la configuración del entorno a través de la instalación con pip y la verificación de la versión. El laboratorio te ha guiado en la implementación de DVWA como un objetivo vulnerable y en el establecimiento de un servidor de prueba local.

Has practicado la identificación de vulnerabilidades de inyección SQL y la extracción de datos utilizando las herramientas automatizadas de sqlmap. Los ejercicios cubrieron operaciones esenciales de línea de comandos mientras demostraban técnicas prácticas de prueba de ciberseguridad para detectar vulnerabilidades en bases de datos.