
Schnelle HTTP-Parameter-Erkennung für autorisierte Sicherheitstests

Schnelle HTTP-Parameter-Erkennung für Bug Bounty und autorisierte Penetrationstests. ParamTrace sendet Wordlist-Einträge als Parameter und markiert diejenigen, die die Antwort im Vergleich zu einer Baseline verändern.
Rechtlicher Hinweis: Verwende ParamTrace nur auf Systemen, die dir gehören oder für die du eine ausdrückliche schriftliche Erlaubnis zum Testen hast (zum Beispiel bei Bug-Bounty-Zielen im Geltungsbereich). Du bist dafür verantwortlich, wie du es verwendest.
Tools zur Parameter-Erkennung gibt es bereits (Arjun, x8, Param Miner für Burp). ParamTrace ist eine kleine, fokussierte Alternative:
--tolerance behandelt Seiten, die sich bei jeder Anfrage ändern.Wann du etwas anderes verwenden solltest: Wenn du bereits in Burp arbeitest, ist Param Miner besser geeignet. Für das Bündeln vieler Parameter pro Anfrage sind ausgereifte Tools wie Arjun oder x8 derzeit schneller. Batching steht auf der ParamTrace-Roadmap.
Vorgefertigte Binärdateien (Linux x86_64 und aarch64, macOS Apple Silicon, Windows) findest du auf der Releases-Seite, jeweils mit einer .sha256-Prüfsummendatei. Zum Beispiel unter Linux (verwende die aarch64-Datei für Kali NetHunter auf einem Smartphone):
tar -xzf paramtrace-*-linux-x86_64.tar.gz
sudo cp paramtrace-*-linux-x86_64/paramtrace /usr/local/bin/
Termux verwendet die C-Bibliothek von Android, daher laufen die Linux-Binärdateien dort nicht. Installiere stattdessen aus dem Quellcode: cargo install --git https://github.com/CurioTrace/paramtrace
Teststatus: Die Linux-aarch64-Binärdatei (Kali NetHunter) und der Termux-Quellcode-Build wurden vom Autor getestet. Die Binärdateien für Linux x86_64, macOS und Windows werden bei jedem Release automatisch erstellt, wurden aber noch nicht vom Autor ausgeführt. Bitte öffne ein Issue, falls eine davon nicht funktioniert. Die Binärdateien sind nicht signiert, daher können Windows oder macOS beim ersten Start eine Warnung anzeigen; du kannst einen Download mit seiner .sha256-Datei überprüfen.
Oder baue aus dem Quellcode:
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 .
Getestet auf Termux (Android) und Kali NetHunter. Es sollte überall dort bauen, wo Rust baut (verwendet rustls, kein OpenSSL erforderlich).

Die folgenden Beispiele gehen davon aus, dass
paramtracein deinem PATH liegt (siehecargo install --path .oben). Wenn du nurcargo build --releaseausgeführt hast, verwende stattdessen./target/release/paramtrace. Wenn der Befehl nach der Installation nicht gefunden wird, füge Cargos bin-Ordner zu deinem PATH hinzu: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 | Beschreibung |
|---|---|
-u, --url | Ziel-URL |
-w, --wordlist | Parameter-Wortliste |
-m, --method | get (Standard) oder post |
-t, --threads | Gleichzeitige Anfragen (Standard 10) |
-H, --header | Zusätzlicher Header, wiederholbar |
--timeout | Anfrage-Timeout in Sekunden (Standard 10) |
--delay | Verzögerung pro Anfrage in ms |
--tolerance | Größenunterschiede bis zu N Bytes ignorieren (nützlich bei dynamischen Seiten) |
--value | Wert, der für jeden Parameter gesendet wird (Werte unter 4 Zeichen deaktivieren die Reflection-Prüfung) |
--proxy | Proxy-URL (Caido, Burp) |
-k, --insecure | TLS-Verifikation überspringen |
-q, --quiet | Startbanner ausblenden |
-o, --output / -f, --format | Ergebnisse als text oder json speichern |
Getestet gegen meine eigene Instanz eines PortSwigger Web Security Academy Labs: Mit einer Wortliste mit 6.454 Einträgen (6.453 falsche Namen plus der echte Parameter productId) markierte ParamTrace nur productId, ohne Fehlalarme, in etwa 3 Minuten bei 10 Threads. Der Server antwortete sowohl mit als auch ohne den Parameter mit 400, sodass eine reine Statuscode-Prüfung ihn verpasst hätte. ParamTrace erkannte ihn durch den Vergleich der Antwortgrößen.
Die Geschwindigkeit hängt stark vom Netzwerk ab, und Parameternamen sind case-sensitiv, daher muss die Wortliste den exakten Namen enthalten, den der Server erwartet.
--tolerance 0, um exakt zu vergleichen.Eine kleine Einstiegsliste befindet sich in wordlists/common.txt. Für größere siehe
SecLists.
Für echte Ziele lade eine größere Liste herunter (etwa 6.000 Namen) und scanne behutsam:
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
Parameternamen sind case-sensitiv. Ein Server, der productId erwartet, reagiert nicht auf productid, daher kann ParamTrace nur Namen finden, die in deiner Wortliste mit der exakten Schreibweise stehen, die das Ziel verwendet. Viele Listen sind komplett kleingeschrieben, prüfe deine also zuerst, zum Beispiel: grep -c -x productId yourlist.txt.