
Descoberta rápida de parâmetros HTTP para testes de segurança autorizados

Descoberta rápida de parâmetros HTTP para bug bounty e testes de penetração autorizados. ParamTrace envia entradas de wordlist como parâmetros e sinaliza as que alteram a resposta em comparação com uma linha de base.
Aviso legal: use o ParamTrace apenas em sistemas que você possui ou para os quais tem permissão escrita explícita de teste (por exemplo, alvos de bug bounty dentro do escopo). Você é responsável pela forma como o utiliza.
Ferramentas de descoberta de parâmetros já existem (Arjun, x8, Param Miner para Burp). ParamTrace é uma alternativa pequena e focada:
--tolerance lida com páginas que mudam a cada requisição.Quando usar outra coisa: se você já vive no Burp, o Param Miner é mais adequado. Para agrupar muitos parâmetros por requisição, ferramentas maduras como Arjun ou x8 são mais rápidas hoje. O agrupamento está no roadmap do ParamTrace.
Binários pré-compilados (Linux x86_64 e aarch64, macOS Apple Silicon, Windows) estão na página de Releases, cada um com um arquivo de checksum .sha256. Por exemplo, no Linux (use o arquivo aarch64 para Kali NetHunter em um celular):
tar -xzf paramtrace-*-linux-x86_64.tar.gz
sudo cp paramtrace-*-linux-x86_64/paramtrace /usr/local/bin/
O Termux usa a biblioteca C do Android, então os binários Linux não funcionam nele. Instale a partir do código-fonte: cargo install --git https://github.com/CurioTrace/paramtrace
Status dos testes: o binário Linux aarch64 (Kali NetHunter) e a compilação a partir do código-fonte no Termux foram testados pelo autor. Os binários Linux x86_64, macOS e Windows são compilados automaticamente a cada versão, mas ainda não foram executados pelo autor, então por favor abra uma issue se algum não funcionar. Os binários não são assinados, então o Windows ou o macOS podem exibir um aviso na primeira execução; você pode verificar um download com seu arquivo .sha256.
Ou compile a partir do código-fonte:
git clone https://github.com/CurioTrace/paramtrace
cd paramtrace
cargo build --release
# binary: target/release/paramtrace
# optional: install it so you can just type `paramtrace`
cargo install --path .
Testado no Termux (Android) e no Kali NetHunter. Deve compilar em qualquer lugar onde o Rust compile (usa rustls, sem necessidade de OpenSSL).

Os exemplos abaixo assumem que
paramtraceestá no seu PATH (vejacargo install --path .acima). Se você apenas executoucargo build --release, use./target/release/paramtraceem vez disso. Se o comando não for encontrado após a instalação, adicione a pasta bin do Cargo ao seu PATH:export PATH="$HOME/.cargo/bin:$PATH"
paramtrace -u https://example.com/search -w wordlists/common.txt
paramtrace -u https://example.com/api -w words.txt -m post -t 20
paramtrace -u https://example.com/ -w words.txt -H "Cookie: session=abc" --proxy http://127.0.0.1:8080
paramtrace -u https://example.com/ -w words.txt -o out.json -f json
| Flag | Descrição |
|---|---|
-u, --url | URL de destino |
-w, --wordlist | Wordlist de parâmetros |
-m, --method | get (padrão) ou post |
-t, --threads | Requisições simultâneas (padrão 10) |
-H, --header | Cabeçalho extra, repetível |
--timeout | Tempo limite da requisição em segundos (padrão 10) |
--delay | Atraso por requisição em ms |
--tolerance | Ignora diferenças de tamanho de até N bytes (útil em páginas dinâmicas) |
--value | Valor enviado para cada parâmetro (valores com menos de 4 caracteres desativam a verificação de reflexão) |
--proxy | URL do proxy (Caido, Burp) |
-k, --insecure | Ignora a verificação TLS |
-q, --quiet | Oculta o banner de inicialização |
-o, --output / -f, --format | Salva os resultados como text ou json |
Testado contra minha própria instância de um laboratório do PortSwigger Web Security Academy: com uma wordlist de 6.454 entradas (6.453 nomes errados mais o parâmetro real productId), o ParamTrace sinalizou apenas productId, sem falsos positivos, em cerca de 3 minutos com 10 threads. O servidor respondeu 400 tanto com quanto sem o parâmetro, então uma verificação baseada apenas no código de status teria deixado passar. O ParamTrace detectou comparando os tamanhos das respostas.
A velocidade depende fortemente da rede, e os nomes dos parâmetros diferenciam maiúsculas de minúsculas, então a wordlist deve conter o nome exato que o servidor espera.
--tolerance 0 para comparar exatamente.Uma pequena lista inicial está em wordlists/common.txt. Para listas maiores, consulte
SecLists.
Para alvos reais, baixe uma lista maior (cerca de 6.000 nomes) e escaneie com cautela:
curl -L -o wordlists/burp-params.txt https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/burp-parameter-names.txt
paramtrace -u https://example.com/page -w wordlists/burp-params.txt -t 5 --delay 100
Os nomes dos parâmetros diferenciam maiúsculas de minúsculas. Um servidor que espera productId não reagirá a productid, portanto o ParamTrace só consegue encontrar nomes que estejam na sua wordlist com a grafia exata usada pelo alvo. Muitas listas são todas em minúsculas, então verifique a sua primeiro, por exemplo: grep -c -x productId yourlist.txt.