Injeção cega
Sem dados na tela, uma resposta de sim ou não vira um canal para ler o segredo bit a bit.
Nem toda página injetável mostra o resultado da consulta. Às vezes ela só reage de dois jeitos: acha algo (verdadeiro) ou não acha (falso). Uma página de recuperação de senha que responde account exists ou no account é um exemplo. Isso basta.
Na injeção cega booleana, cada tentativa faz uma pergunta de sim ou não sobre o segredo e lê a resposta no comportamento da página. Para extrair um texto caractere por caractere, usa-se substr(segredo, posicao, 1) = 'x': se a página responder verdadeiro, o caractere daquela posição é x. Varrendo as letras possíveis em cada posição, o segredo sai inteiro, um caractere por vez.
Quando nem a mensagem muda, existe a injeção cega por tempo: CASE WHEN <condição> THEN sleep(2) ELSE 0 END faz o banco demorar quando a condição é verdadeira, e você lê a resposta no relógio. Em ambos os casos, um único bit por tentativa já vaza tudo, com paciência.