Enumerar Bases de Datos en un Servidor Objetivo con sqlmap

Kali LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá a usar sqlmap para enumerar bases de datos en un servidor objetivo. La enumeración de bases de datos es un paso crucial en el proceso de pruebas de penetración, ya que le permite descubrir los nombres de las bases de datos presentes en un servidor que podría ser vulnerable a la inyección SQL. sqlmap automatiza este proceso, haciéndolo eficiente y sencillo. Comenzaremos asegurando una inyección exitosa de un escaneo anterior (simulado), luego usaremos la bandera --dbs para listar todas las bases de datos, ejecutaremos el comando, interpretaremos los resultados y, finalmente, diferenciaremos entre bases de datos del sistema y del usuario.

Confirmar una Inyección Exitosa de un Escaneo Anterior

En este paso, simularemos la confirmación de una inyección SQL exitosa de un escaneo anterior. Antes de enumerar bases de datos, es esencial asegurarse de que la URL objetivo sea realmente vulnerable a la inyección SQL y que sqlmap pueda explotarla con éxito. Para el propósito de este laboratorio, asumiremos que un escaneo anterior ha identificado una URL vulnerable. Usaremos una URL de marcador de posición para demostrar la estructura del comando sqlmap.

Abra su terminal en el directorio ~/project.

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --banner

Este comando utiliza sqlmap para conectarse a la URL especificada e intenta recuperar el banner de la base de datos. La recuperación exitosa del banner indica una inyección exitosa.

Ejemplo de salida:

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
        |_|   |_|   |_|   3.7-1#stable

    [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
    [!] do you want to enable full support for HTTP(S) proxy? [y/N] N
    [!] do you want to resume the previous session? [Y/n/q] n

    ... (salida truncada) ...

    web server operating system: Linux Debian
    web application technology: Apache 2.2.14, PHP 5.3.2
    back-end DBMS: MySQL >= 5.0.12
    banner: '5.1.73-0ubuntu0.10.04.1'

La línea banner en la salida confirma que sqlmap pudo interactuar con éxito con la base de datos y recuperar su información de versión, lo que indica una inyección exitosa.

Usar la bandera --dbs para Listar Todas las Bases de Datos

En este paso, aprenderemos sobre la bandera --dbs en sqlmap, que se utiliza específicamente para enumerar y listar todas las bases de datos disponibles en el servidor objetivo. Esta bandera es esencial para descubrir los nombres de las bases de datos que podrían contener información sensible.

La bandera --dbs le indica a sqlmap que realice una enumeración de bases de datos. Cuando sqlmap explota con éxito una vulnerabilidad de inyección SQL, puede consultar al servidor de bases de datos una lista de todas las bases de datos que aloja.

La estructura del comando será similar al paso anterior, pero con la adición de --dbs:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs

Este comando instruirá a sqlmap a identificar y listar todas las bases de datos accesibles a través de la vulnerabilidad de inyección SQL en la URL dada.

Ejecutar el Comando de Enumeración de Bases de Datos

En este paso, ejecutaremos el comando sqlmap con la bandera --dbs para enumerar las bases de datos. Esta es la acción principal de este laboratorio.

Ejecute el siguiente comando en su terminal:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs

sqlmap realizará ahora sus pruebas y, si tiene éxito, mostrará una lista de nombres de bases de datos. Este proceso puede llevar algún tiempo, ya que sqlmap realiza diversas técnicas de inyección.

Ejemplo de salida:

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
        |_|   |_|   |_|   3.7-1#stable

    [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
    [!] do you want to enable full support for HTTP(S) proxy? [y/N] N
    [!] do you want to resume the previous session? [Y/n/q] n

    ... (salida truncada) ...

    available databases [4]:
    [*] information_schema
    [*] mysql
    [*] performance_schema
    [*] acuart

La salida muestra el progreso de sqlmap y, finalmente, una lista de "bases de datos disponibles". En este ejemplo, se enumeran information_schema, mysql, performance_schema y acuart.

Interpretar la Lista de Nombres de Bases de Datos Devueltas

En este paso, interpretaremos la lista de nombres de bases de datos devueltas por sqlmap. Comprender qué representan estos nombres es crucial para los siguientes pasos de pruebas de penetración.

De la salida del paso anterior, es posible que haya visto una lista similar a esta:

available databases [4]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] acuart

Cada elemento [*] representa una base de datos encontrada en el servidor objetivo.

  • information_schema: Esta es una base de datos estándar en MySQL (y otras bases de datos SQL) que proporciona acceso a metadatos de la base de datos. Contiene información sobre todas las demás bases de datos, tablas, columnas y privilegios de acceso. Es una base de datos del sistema.
  • mysql: Esta es otra base de datos del sistema estándar en MySQL que almacena información necesaria para que el servidor MySQL funcione. Contiene cuentas de usuario, privilegios y otros datos de configuración del servidor.
  • performance_schema: Esta es una base de datos del sistema en MySQL utilizada para monitorear la ejecución del servidor MySQL a bajo nivel. Proporciona información sobre el rendimiento del servidor.
  • acuart: El nombre de esta base de datos es probablemente una base de datos creada por el usuario, específica de la aplicación web que se ejecuta en el servidor. Esta es a menudo la base de datos que contiene los datos de la aplicación, como credenciales de usuario, información de productos u otros datos comerciales sensibles.

Identificar bases de datos creadas por el usuario, como acuart, suele ser el objetivo principal, ya que es más probable que contengan información valiosa para un atacante.

Diferenciar Bases de Datos del Sistema de Bases de Datos de Usuario

En este paso final, diferenciaremos explícitamente entre bases de datos del sistema y bases de datos de usuario basándonos en los resultados de la enumeración. Esta distinción es importante para priorizar sus próximos pasos en una prueba de penetración.

Como se observó en el paso anterior, bases de datos como information_schema, mysql y performance_schema son típicamente bases de datos a nivel de sistema. Forman parte de la funcionalidad principal del sistema de gestión de bases de datos y generalmente contienen metadatos, cuentas de usuario para el propio DBMS y estadísticas de rendimiento. Si bien a veces pueden ser explotadas, rara vez contienen los datos sensibles específicos de la aplicación que los atacantes suelen buscar.

Por otro lado, las bases de datos con nombres que no son nombres de sistema estándar (por ejemplo, acuart en nuestro ejemplo, o webapp_db, users, products, etc.) son generalmente bases de datos creadas por el usuario. Estas bases de datos almacenan los datos reales de la aplicación web, como:

  • Credenciales de usuario (nombres de usuario, contraseñas hasheadas)
  • Información del cliente
  • Catálogos de productos
  • Registros financieros
  • Otros datos comerciales propietarios

Al realizar una prueba de penetración, después de enumerar las bases de datos, su enfoque debe cambiar a estas bases de datos creadas por el usuario. El siguiente paso lógico sería enumerar las tablas dentro de estas bases de datos de usuario, luego las columnas dentro de esas tablas y, finalmente, volcar los datos.

Al comprender esta distinción, puede dirigir eficientemente sus siguientes comandos de sqlmap para extraer la información más valiosa. Por ejemplo, para enumerar tablas en la base de datos acuart, usaría un comando como:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --tables

Este comando demuestra cómo procedería a la siguiente etapa de extracción de datos, centrándose en la base de datos de usuario identificada.

Resumen

En este laboratorio, ha aprendido con éxito a enumerar bases de datos en un servidor objetivo utilizando sqlmap. Comenzó comprendiendo la importancia de confirmar una inyección SQL exitosa. Luego, utilizó la bandera --dbs para listar todas las bases de datos disponibles y ejecutó el comando para ver los resultados. Finalmente, aprendió a interpretar los nombres de las bases de datos devueltas, distinguiendo entre bases de datos del sistema y bases de datos creadas por el usuario, potencialmente más valiosas. Esta habilidad es fundamental para cualquier probador de penetración que busque extraer información de aplicaciones web vulnerables.