Pular para o conteúdo
Todos os conceitos

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.

a injecao testa um caractere por vez substr(secret, 3, 1) = 'i' No account. falso: nao e esse caractere Account exists. verdadeiro: o caractere e 'i' t o c a i a { . . os caracteres em ordem formam o segredo
Para cada posição do segredo, a injeção testa um caractere com substr; a resposta verdadeiro ou falso da página revela a letra certa, e as letras em ordem formam o segredo.

Aparece nestes desafios