Introducción a SQL y MySQL — Fundamentos para SQL Injection
Este módulo introduce la inyección SQL usando MySQL. Es esencial comprender SQL y el funcionamiento de MySQL para entender cómo se ejecutan las inyecciones SQL correctamente.
A continuación se explican los conceptos base, sintaxis y ejemplos usados en MySQL/MariaDB.
🧾 Lenguaje SQL (Structured Query Language)
La sintaxis SQL puede variar entre RDBMS, pero todos siguen el estándar ISO.
Aquí usaremos la sintaxis de MySQL/MariaDB.
SQL permite:
-
Recuperar datos
-
Actualizar datos
-
Eliminar datos
-
Crear tablas y bases de datos
-
Agregar o eliminar usuarios
-
Asignar permisos
💻 Línea de Comando para MySQL
El comando principal es mysql.
-u define el usuario.
-p pide la contraseña (se recomienda dejarlo vacío para seguridad).
mysql -u root -p
Evitar pasar la contraseña directamente en el comando, pero es posible:
mysql -u root -p<password>
Importante: No debe haber espacio entre -p y la contraseña.
Para conectarte a un host remoto:
mysql -u root -h <host> -P <port> -p

Nota:
Puerto por defecto de MySQL = 3306
-P mayúscula es para el puerto
-p minúscula es para la contraseña
🗄️ Crear una Base de Datos
Dentro del cliente MySQL, podemos crear una base de datos:
CREATE DATABASE users;
Listar bases de datos:
SHOW DATABASES;

Entrar a una base de datos:
USE users;
Las sentencias SQL NO son sensibles a mayúsculas, pero los nombres de bases y tablas sí.
📚 Tablas en MySQL
Las tablas consisten en filas y columnas.
Cada columna tiene un tipo de dato, como:
-
INT
-
VARCHAR
-
DATE
-
TIME
-
DATETIME
-
BLOB
-
etc.
Ejemplo: crear tabla logins:
CREATE TABLE logins (
id INT,
username VARCHAR(100),
password VARCHAR(100),
date_of_joining DATETIME
);
Listar tablas:
SHOW TABLES;
Describir tabla:
DESCRIBE logins;

⚙️ Propiedades Importantes de Columnas
AUTO_INCREMENT
Incrementa automáticamente el ID.
id INT NOT NULL AUTO_INCREMENT,
NOT NULL
Impide valores vacíos.
UNIQUE
Evita duplicados.
username VARCHAR(100) UNIQUE NOT NULL,
DEFAULT
Define un valor por defecto.
date_of_joining DATETIME DEFAULT NOW(),
PRIMARY KEY
Clave principal, identifica un registro de manera única.
PRIMARY KEY (id)
Tabla final completa:
CREATE TABLE logins (
id INT NOT NULL AUTO_INCREMENT,
username VARCHAR(100) UNIQUE NOT NULL,
password VARCHAR(100) NOT NULL,
date_of_joining DATETIME DEFAULT NOW(),
PRIMARY KEY (id)
);