Blind SQL Injection

Só leitura — não altera nada no alvo. Só em alvo seu ou autorizado por escrito.

O vetor

Vetor: SQLi onde o servidor não mostra erro nem dados; extrai-se por inferência (tempo/booleano). O que testamos: se um parâmetro é interpolado numa query sem parametrização.

Os passos

Passo 1 (🟢, comparar tempos) — em lab/endpoint autorizado:

curl -s -o /dev/null -w "verdadeiro: %{time_total}s\n" "$BASE/api/x?id=1%20AND%201=1"
curl -s -o /dev/null -w "sleep:      %{time_total}s\n" "$BASE/api/x?id=1%20AND%20SLEEP(3)"

O que esperar

  • VULNERÁVEL: a variante SLEEP(3) demora ~3s a mais → a query executa injeção.
  • SEGURO: tempos iguais; input tratado como dado (query parametrizada).

Como corrigir

Correção (P0): queries parametrizadas / prepared statements sempre; ORM seguro; WAF SQLi como camada extra. (CATALOGO §2.4.) Limpeza: nenhuma (só leitura); no PostgREST/Supabase, RLS + sem SQL cru já mitiga.

PurpleLab // plataforma de treino ofensivo + defensivo // Fase 1 — portal dinamico