
Descubrimiento rápido de parámetros HTTP para pruebas de seguridad autorizadas

Descubrimiento rápido de parámetros HTTP para bug bounty y pruebas de penetración autorizadas. ParamTrace envía las entradas de una wordlist como parámetros y marca aquellas que cambian la respuesta en comparación con una línea base.
Aviso legal: utiliza ParamTrace únicamente en sistemas que sean de tu propiedad o para los que tengas permiso escrito explícito para probar (por ejemplo, objetivos de bug bounty dentro del alcance). Eres responsable del uso que hagas de él.
Ya existen herramientas de descubrimiento de parámetros (Arjun, x8, Param Miner para Burp). ParamTrace es una alternativa pequeña y enfocada:
--tolerance gestiona las páginas que cambian en cada solicitud.Cuándo usar otra cosa: si ya trabajas dentro de Burp, Param Miner encaja mejor. Para agrupar muchos parámetros por solicitud, herramientas maduras como Arjun o x8 son más rápidas hoy en día. El agrupamiento está en la hoja de ruta de ParamTrace.
Los binarios precompilados (Linux x86_64 y aarch64, macOS Apple Silicon, Windows) están en la página de Releases, cada uno con un archivo de checksum .sha256. Por ejemplo, en Linux (usa el archivo aarch64 para Kali NetHunter en un teléfono):
tar -xzf paramtrace-*-linux-x86_64.tar.gz
sudo cp paramtrace-*-linux-x86_64/paramtrace /usr/local/bin/
Termux usa la biblioteca C de Android, por lo que los binarios de Linux no se ejecutarán allí. En su lugar, instala desde el código fuente: cargo install --git https://github.com/CurioTrace/paramtrace
Estado de las pruebas: el binario Linux aarch64 (Kali NetHunter) y la compilación desde el código fuente en Termux han sido probados por el autor. Los binarios para Linux x86_64, macOS y Windows se compilan automáticamente en cada versión, pero el autor aún no los ha ejecutado, así que por favor abre un issue si alguno no funciona. Los binarios no están firmados, por lo que Windows o macOS pueden mostrar una advertencia en la primera ejecución; puedes verificar una descarga con su archivo .sha256.
O compila desde el código fuente:
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 .
Probado en Termux (Android) y Kali NetHunter. Debería compilar en cualquier lugar donde lo haga Rust (usa rustls, no necesita OpenSSL).

Los ejemplos a continuación asumen que
paramtraceestá en tu PATH (consultacargo install --path .arriba). Si solo ejecutastecargo build --release, usa./target/release/paramtraceen su lugar. Si el comando no se encuentra después de instalarlo, añade la carpeta bin de Cargo a tu 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 | Descripción |
|---|---|
-u, --url | URL objetivo |
-w, --wordlist | Lista de palabras de parámetros |
-m, --method | get (predeterminado) o post |
-t, --threads | Solicitudes concurrentes (predeterminado 10) |
-H, --header | Encabezado adicional, repetible |
--timeout | Tiempo de espera de la solicitud en segundos (predeterminado 10) |
--delay | Retardo por solicitud en ms |
--tolerance | Ignorar diferencias de tamaño de hasta N bytes (útil en páginas dinámicas) |
--value | Valor enviado para cada parámetro (los valores de menos de 4 caracteres desactivan la comprobación de reflexión) |
--proxy | URL del proxy (Caido, Burp) |
-k, --insecure | Omitir la verificación TLS |
-q, --quiet | Ocultar el banner de inicio |
-o, --output / -f, --format | Guardar los resultados como text o json |
Probado contra mi propia instancia de un laboratorio de PortSwigger Web Security Academy: con una lista de palabras de 6.454 entradas (6.453 nombres incorrectos más el parámetro real productId), ParamTrace marcó únicamente productId, sin falsos positivos, en unos 3 minutos con 10 hilos. El servidor respondió 400 tanto con como sin el parámetro, por lo que una comprobación basada solo en el código de estado lo habría pasado por alto. ParamTrace lo detectó comparando los tamaños de las respuestas.
La velocidad depende en gran medida de la red, y los nombres de los parámetros distinguen entre mayúsculas y minúsculas, por lo que la lista de palabras debe contener el nombre exacto que espera el servidor.
--tolerance 0 para comparar de forma exacta.En wordlists/common.txt hay una pequeña lista inicial. Para listas más grandes, consulte
SecLists.
Para objetivos reales, descargue una lista más grande (unos 6.000 nombres) y escanee con cuidado:
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
Los nombres de los parámetros distinguen entre mayúsculas y minúsculas. Un servidor que espera productId no reaccionará a productid, por lo que ParamTrace solo puede encontrar nombres que estén en tu wordlist con la ortografía exacta que usa el objetivo. Muchas listas están completamente en minúsculas, así que revisa la tuya primero, por ejemplo: grep -c -x productId yourlist.txt.