Introdução
Em testes de penetração e análise de aplicações web, ferramentas como o Burp Suite Intruder são frequentemente usadas para enviar um grande número de requisições a um alvo. Uma funcionalidade chave neste processo é o "Grep - Match", que permite sinalizar automaticamente respostas contendo palavras-chave específicas (por exemplo, "Welcome", "Login successful", "admin_access_granted"). Isso ajuda você a filtrar rapidamente milhares de respostas para encontrar as interessantes.
Neste laboratório, você aprenderá como replicar esta poderosa funcionalidade "Grep - Match" usando ferramentas padrão da linha de comando do Linux. Você usará o curl para fazer requisições HTTP, um loop de shell para automatizar o processo para uma lista de payloads, e o grep para procurar por uma palavra-chave de sucesso nas respostas. Esta é uma habilidade fundamental para qualquer pessoa interessada em automação de segurança e scripting.
Em Intruder > Options, Role para a Seção 'Grep - Match'
Em uma ferramenta GUI como o Burp Suite, este é o passo onde você navegaria até o painel de opções para configurar suas regras de correspondência. Em nosso ambiente de linha de comando, a ação equivalente é preparar nossos componentes necessários: a lista de payloads e a URL de destino.
O processo de configuração já criou um arquivo chamado payloads.txt em seu diretório ~/project. Este arquivo contém uma lista de valores potenciais que queremos testar contra a aplicação web, servindo ao mesmo propósito de uma lista de payloads do Intruder.
Vamos visualizar o conteúdo deste arquivo.
cat ~/project/payloads.txt
Você deverá ver a seguinte saída:
orange
banana
apple
grape
mango
Nossa aplicação alvo é um servidor web simples rodando em http://localhost:8000. Testaremos cada payload contra este alvo.
Limpar as Regras Padrão
No Burp Suite, você normalmente limparia quaisquer regras pré-existentes ou padrão para garantir que está apenas correspondendo ao que você define explicitamente. Para nossa simulação, isso significa estabelecer uma linha de base fazendo uma única requisição com um payload conhecido como "falho". Isso nos ajuda a entender como é uma resposta normal e malsucedida.
Vamos usar o curl para fazer uma requisição ao servidor com o payload orange, que sabemos que não é o correto.
curl "http://localhost:8000/?item=orange"
O comando buscará a página web e imprimirá seu código-fonte HTML no terminal. A saída deve se parecer com isto:
<!DOCTYPE html>
<html>
<head>
<title>Test Page</title>
</head>
<body>
<script>
const params = new URLSearchParams(window.location.search);
if (params.get("item") === "apple") {
document.body.innerHTML = "<h1>Welcome to the secret page!</h1>";
} else {
document.body.innerHTML = "<h1>Item not found.</h1>";
}
</script>
</body>
</html>
Observe a lógica JavaScript e o texto resultante "Item not found". Esta é a nossa resposta de "falha" de linha de base.
Adicionar uma Nova Regra para Corresponder a uma Palavra-chave de Sucesso (por exemplo, 'Welcome', 'Logged in')
Este é o cerne da técnica "Grep - Match". Precisamos definir uma string ou padrão único que aparecerá apenas em uma resposta "bem-sucedida". Olhando para o HTML do passo anterior, podemos ver que uma requisição bem-sucedida (onde item=apple) resultará no texto "Welcome to the secret page!". A palavra-chave "Welcome" é um candidato perfeito para nossa regra.
Podemos usar o comando grep para filtrar a saída do curl e verificar a existência de nossa palavra-chave. O flag -s para curl é usado para executá-lo em modo silencioso, o que oculta o medidor de progresso.
Primeiro, vamos testar esta regra contra um payload que falha. Este comando não deve produzir nenhuma saída, porque a palavra "Welcome" não está na resposta.
curl -s "http://localhost:8000/?item=orange" | grep "Welcome"
Agora, vamos testá-lo contra o payload conhecido como bem-sucedido, apple.
curl -s "http://localhost:8000/?item=apple" | grep "Welcome"
Desta vez, o grep encontra uma correspondência e imprime a linha contendo a palavra-chave:
document.body.innerHTML = '<h1>Welcome to the secret page!</h1>';
O pipe (|) e o comando grep "Welcome" juntos formam nossa regra "Grep - Match". Criamos com sucesso uma maneira de distinguir uma resposta bem-sucedida de uma falha.
Executar um Ataque Intruder
Um "ataque Intruder" é simplesmente o processo de automatizar nossa requisição para cada payload em nossa lista. Podemos conseguir isso com um loop simples no shell. O loop lerá cada linha do payloads.txt, executará nosso comando curl | grep para ele e nos mostrará os resultados.
Para tornar a saída mais limpa e semelhante a uma tabela de resultados, criaremos um pequeno script de shell. Use o editor nano para criar um novo arquivo chamado attack.sh.
nano attack.sh
Agora, copie e cole o seguinte script no editor nano:
#!/bin/bash
echo "Payload,Found"
for payload in $(cat ~/project/payloads.txt); do
response=$(curl -s "http://localhost:8000/?item=$payload")
if echo "$response" | grep -q "Welcome"; then
echo "$payload,True"
else
echo "$payload,False"
fi
done
Este script primeiro imprime um cabeçalho (Payload,Found). Em seguida, ele itera por cada payload. Dentro do loop, ele usa grep -q (modo silencioso) para verificar a palavra-chave "Welcome". Se encontrada, ele imprime o payload seguido por True; caso contrário, imprime False.
Pressione Ctrl+X, depois Y e Enter para salvar o arquivo e sair do nano.
Em seguida, torne o script executável:
chmod +x attack.sh
Finalmente, execute o ataque:
./attack.sh
Observe a Nova Coluna na Tabela de Resultados para sua Correspondência
Após executar o script no passo anterior, você verá uma saída limpa, semelhante a uma tabela, em seu terminal.
Payload,Found
orange,False
banana,False
apple,True
grape,False
mango,False
Esta saída é o equivalente em linha de comando da tabela de resultados no Burp Suite Intruder. A primeira coluna lista o payload que foi testado, e a segunda coluna, que nomeamos "Found", atua como nosso indicador "Grep - Match".
Ao simplesmente escanear esta segunda coluna em busca do valor True, você pode identificar imediatamente o payload bem-sucedido. Como você pode ver, a linha apple,True se destaca claramente, informando que o payload apple resultou em uma resposta contendo nossa palavra-chave alvo. Isso demonstra a eficácia da técnica para encontrar agulhas em um palheiro de respostas HTTP.
Resumo
Neste laboratório, você simulou com sucesso o recurso "Grep - Match", um pilar de muitas ferramentas automatizadas de segurança web. Você aprendeu a combinar várias ferramentas fundamentais da linha de comando do Linux para alcançar um resultado poderoso.
Você praticou:
- Usar
curlpara fazer requisições web a partir do terminal. - Usar
greppara procurar palavras-chave específicas nos dados de resposta. - Escrever um loop
fordo shell para automatizar uma tarefa para uma lista de entradas. - Combinar essas ferramentas em um único script para testar sistematicamente payloads e identificar tentativas bem-sucedidas.
Essa abordagem de linha de comando não é apenas uma ótima maneira de entender como ferramentas sofisticadas funcionam internamente, mas também é uma habilidade extremamente flexível e poderosa para suas próprias tarefas de automação e scripts de segurança personalizados.
