
Scoperta rapida dei parametri HTTP per test di sicurezza autorizzati

Scoperta rapida di parametri HTTP per bug bounty e penetration testing autorizzato. ParamTrace invia le voci della wordlist come parametri e segnala quelle che modificano la risposta rispetto a una baseline.
Avviso legale: usa ParamTrace solo su sistemi di tua proprietà o per i quali hai esplicita autorizzazione scritta a eseguire test (ad esempio, target bug bounty in scope). Sei responsabile dell'uso che ne fai.
Esistono già strumenti per la scoperta di parametri (Arjun, x8, Param Miner per Burp). ParamTrace è un'alternativa piccola e mirata:
--tolerance gestisce le pagine che cambiano a ogni richiesta.Quando usare qualcos'altro: se lavori già in Burp, Param Miner è più adatto. Per raggruppare molti parametri per richiesta, strumenti maturi come Arjun o x8 sono oggi più veloci. Il batching è nella roadmap di ParamTrace.
I binari precompilati (Linux x86_64 e aarch64, macOS Apple Silicon, Windows) sono disponibili nella pagina Releases, ciascuno con un file di checksum .sha256. Ad esempio, su Linux (usa il file aarch64 per Kali NetHunter su un telefono):
tar -xzf paramtrace-*-linux-x86_64.tar.gz
sudo cp paramtrace-*-linux-x86_64/paramtrace /usr/local/bin/
Termux utilizza la libreria C di Android, quindi i binari Linux non funzioneranno lì. Installa dai sorgenti invece: cargo install --git https://github.com/CurioTrace/paramtrace
Stato dei test: il binario Linux aarch64 (Kali NetHunter) e la build dai sorgenti per Termux sono stati testati dall'autore. I binari Linux x86_64, macOS e Windows vengono compilati automaticamente a ogni release ma non sono ancora stati eseguiti dall'autore, quindi apri una issue se uno di essi non funziona. I binari non sono firmati, quindi Windows o macOS potrebbero mostrare un avviso al primo avvio; puoi verificare un download con il suo file .sha256.
Oppure compila dai sorgenti:
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 .
Testato su Termux (Android) e Kali NetHunter. Dovrebbe compilare ovunque Rust sia supportato (usa rustls, non richiede OpenSSL).

Gli esempi seguenti presuppongono che
paramtracesia nel tuo PATH (vedicargo install --path .sopra). Se hai eseguito solocargo build --release, usa invece./target/release/paramtrace. Se il comando non viene trovato dopo l'installazione, aggiungi la cartella bin di Cargo al tuo 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 | Descrizione |
|---|---|
-u, --url | URL di destinazione |
-w, --wordlist | Wordlist dei parametri |
-m, --method | get (predefinito) o post |
-t, --threads | Richieste concorrenti (predefinito 10) |
-H, --header | Header aggiuntivo, ripetibile |
--timeout | Timeout della richiesta in secondi (predefinito 10) |
--delay | Ritardo per richiesta in ms |
--tolerance | Ignora differenze di dimensione fino a N byte (utile su pagine dinamiche) |
--value | Valore inviato per ogni parametro (valori inferiori a 4 caratteri disabilitano il controllo di riflessione) |
--proxy | URL del proxy (Caido, Burp) |
-k, --insecure | Salta la verifica TLS |
-q, --quiet | Nasconde il banner di avvio |
-o, --output / -f, --format | Salva i risultati come text o json |
Testato sulla mia istanza di un lab di PortSwigger Web Security Academy: con una wordlist di 6.454 voci (6.453 nomi errati più il parametro reale productId), ParamTrace ha segnalato solo productId, senza falsi positivi, in circa 3 minuti con 10 thread. Il server rispondeva 400 sia con che senza il parametro, quindi un controllo basato solo sul codice di stato l'avrebbe mancato. ParamTrace l'ha individuato confrontando le dimensioni delle risposte.
La velocità dipende fortemente dalla rete, e i nomi dei parametri sono sensibili alle maiuscole, quindi la wordlist deve contenere il nome esatto che il server si aspetta.
--tolerance 0 per confrontare esattamente.Una piccola lista iniziale è in wordlists/common.txt. Per liste più grandi, vedi
SecLists.
Per target reali, scarica una lista più grande (circa 6.000 nomi) ed esegui la scansione con 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
I nomi dei parametri distinguono tra maiuscole e minuscole. Un server che si aspetta productId non reagirà a productid, quindi ParamTrace può trovare solo i nomi presenti nella tua wordlist con l'esatta grafia usata dal target. Molte liste sono tutte in minuscolo, quindi controlla prima la tua, ad esempio: grep -c -x productId yourlist.txt.