
Panoptic es una herramienta de pruebas de penetración de código abierto que automatiza el proceso de búsqueda y recuperación de contenido de archivos de registro y configuración comunes mediante vulnerabilidades de path traversal.

Panoptic es una herramienta de pruebas de penetración de código abierto que automatiza la búsqueda y recuperación de archivos de registro y configuración comunes mediante vulnerabilidades de path traversal.

--concurrency)FUZZ para puntos de inyección arbitrarios: coloca FUZZ
en cualquier valor de --header o --data--base64)/etc/passwd para archivos del directorio
personal, mysql-bin.index para archivos binlog--output-format)--resume-file)--config)httpx[socks], rich, rich-argparse y
tomli en Python 3.10git clone https://github.com/lightos/Panoptic.git
cd Panoptic
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e .
panoptic --version
En el Símbolo del sistema de Windows, activa con .venv\Scripts\activate.bat;
en PowerShell, usa .venv\Scripts\Activate.ps1. La instalación editable mantiene
Panoptic vinculado a este checkout para --update, así que conserva el directorio
en su lugar. No ejecutes pip install panoptic: ese nombre en PyPI pertenece a un
proyecto no relacionado.
Para desarrollo:
python -m pip install -e ".[dev]"
panoptic --url "http://target/include.php?file=test.txt"
panoptic --url "http://target/include.php?file=test.txt"
panoptic --url "http://target/include.php?file=test.txt&id=1" \
--param file
panoptic --url "http://target/include.php" \
--data "file=test.txt&id=1" --param file
panoptic --url "http://target/view.php/test.txt" --path-based
panoptic --url "http://target/load.php?file=dGVzdC50eHQ=" \
--base64 --auto
panoptic --url "http://target/page.php" \
--header "Cookie: lang=FUZZ" --auto
panoptic --url "http://target/api/load" \
--data '{"file":"FUZZ"}' --auto
panoptic --url "http://target/page.php" \
--header "X-Template: FUZZ" --auto
panoptic --url "http://target/view.php?file=test&type=txt" \
--param file --ext-param type
panoptic --url "http://target/filtered.php?file=test.txt" \
--prefix "....//....//....//....//"
panoptic --url "http://target/include.php?file=test.txt" \
--os "*NIX" --type conf
panoptic --url "http://target/include.php?file=test.txt" \
--software PostgreSQL
panoptic --url "http://target/include.php?file=test.txt" \
--output-format json --output-file results.json \
--resume-file scan.checkpoint
panoptic --url "https://target/include.php?file=test.txt" \
--proxy "socks5://127.0.0.1:9050" --invalid-ssl
panoptic --list software
panoptic --list category
panoptic --list os
panoptic --url "http://target/include.php?file=test.txt" \
--auto --all-versions --concurrency 8
Coloca FUZZ en cualquier valor de --header o --data para marcar
el punto de inyección. Panoptic reemplaza FUZZ con cada ruta de archivo
durante el escaneo. Esto permite probar puntos de inyección a los que
--param no puede acceder:
| Tipo de inyección | Ejemplo |
|---|---|
| Valor de cookie | --header "Cookie: theme=FUZZ" |
| Cabecera personalizada | --header "X-Include: FUZZ" |
Cuando FUZZ está presente, --param no es obligatorio.
Panoptic admite archivos de configuración TOML para ajustes persistentes:
panoptic --url "http://target/include.php?file=test.txt" \
--config ~/.config/panoptic/config.toml
Ubicación predeterminada de la configuración: ~/.config/panoptic/config.toml (se carga
automáticamente si existe, incluso sin --config).
[defaults]
# Any long option name (with dashes as underscores) is accepted here,
# including the target and output destinations.
url = "http://target/include.php?file=test.txt"
concurrency = 8
verbose = true
automatic = true
all_versions = true
output_format = "json"
output_file = "results.json"
log_file = "scan.log"
resume_file = "scan.checkpoint"
[proxy]
url = "socks5://127.0.0.1:9050"
[headers]
user_agent = "Mozilla/5.0"
cookie = "sid=foobar; auth=1"
values = ["X-Forwarded-For: 127.0.0.1"]
Prioridad: argumentos CLI > archivo de configuración > valores predeterminados integrados.
La tabla [defaults] acepta cualquier opción de escaneo, no solo ajustes
de rendimiento. En particular, puedes persistir:
url — el destino predeterminado (anula por ejecución con --url)output_format, output_file — dónde van los resultados legibles por máquinalog_file — refleja la salida de consola en un archivoresume_file — ubicación del checkpoint para escaneos reanudablesLos artefactos sensibles escritos por Panoptic — el archivo de registro, el archivo de salida
de resultados/listado y cualquier archivo guardado con --write-files — se fuerzan a
permisos 0600 solo para el propietario en POSIX. Las plataformas que exponen O_NOFOLLOW
también rechazan atómicamente un symlink preexistente en el componente final de la ruta.
En plataformas sin O_NOFOLLOW, Panoptic realiza una comprobación de symlink/junction
antes de abrir con el mejor esfuerzo, pero la comprobación no puede eliminar una condición
de carrera. Los bits de modo de Windows no configuran las ACL de NTFS, así que usa un
directorio con restricciones adecuadas cuando los artefactos puedan contener datos sensibles.
Cada flag booleano tiene su contraparte --no-, por lo que un valor establecido en true
en el archivo de configuración se puede desactivar para una sola ejecución sin editar
el archivo:
# config.toml sets verbose = true and automatic = true
panoptic --url "http://target/x.php?file=test.txt" --no-verbose --no-auto
Dado que un flag booleano omitido se deja sin establecer (en lugar de usar false
por defecto), el valor de la configuración se utiliza a menos que pases el flag o su
forma --no- explícitamente.
Enruta el tráfico a través de un proxy HTTP(S) o SOCKS:
panoptic --url "https://target/x.php?file=test.txt" \
--proxy "socks5://127.0.0.1:9050"
http://, https://, socks5://, socks5h://
(socks5h resuelve DNS a través del proxy — útil para Tor y para evitar
fugas de DNS local). SOCKS4 no está soportado por el cliente HTTP subyacente.
El esquema y el host se validan antes de que comience el escaneo.httpx[socks], que se instala
por defecto.HTTP_PROXY /
HTTPS_PROXY / NO_PROXY. Pasa --ignore-proxy para omitirlas y conectar
directamente (esto también desactiva cualquier proxy configurado mediante variables de entorno).--invalid-ssl al interceptar HTTPS a través de un proxy
con su propia CA. Esto desactiva la verificación de certificados y no es seguro
en redes no confiables.--all-versions)Algunas rutas incluidas son plantillas de versión (por ejemplo, directorios de versiones
de JBoss escritos como [JBOSS]). Por defecto, estas filas de plantilla se omiten,
porque una ruta literal [JBOSS] nunca puede coincidir con un archivo real.
Pasar --all-versions expande cada plantilla contra la lista de versiones incluida,
añadiendo una ruta concreta por versión conocida: un escaneo mucho más grande
pero mucho más exhaustivo:
panoptic --url "http://target/x.php?file=test.txt" --auto --all-versions
Panoptic no clasifica una ruta basándose únicamente en la cabecera Content-Length
controlada por el objetivo. Compara el cuerpo normalizado completo con la línea base
de ruta no válida. Un límite superior de similitud barato evita la comparación completa
solo cuando ya puede demostrar que los cuerpos difieren; las respuestas ambiguas usan
la proporción exacta para evitar falsos negativos por cuerpos reordenados.
--resume-file PATH registra los casos completados para que un escaneo interrumpido
pueda continuar donde se quedó:
panoptic --url "http://target/x.php?file=test.txt" \
--resume-file scan.checkpoint
# ... interrupt with Ctrl-C, then re-run the same command to resume
El checkpoint almacena solo los IDs de casos completados junto con una huella SHA-256 de la definición del escaneo (URL, parámetros de inyección, opciones de detección, cabeceras, cookie, User-Agent y el conjunto exacto de casos). Nunca almacena credenciales, cabeceras ni URLs en texto plano.
Al reanudar, la huella se recalcula y se compara. Si algo que cambiaría el significado
del escaneo difiere — un destino, parámetro, cabecera, cookie, conjunto de filtros o el
interruptor --all-versions distinto — el checkpoint se rechaza con una advertencia y el
escaneo comienza desde cero, de modo que un checkpoint obsoleto nunca puede omitir
silenciosamente casos de un escaneo diferente. Los checkpoints heredados de lista simple
se aceptan con una advertencia y se restringen a los IDs de casos presentes en el escaneo
actual; como ese formato antiguo no tiene huella, los usuarios deberían reemplazarlo por
el formato recién escrito. Las solicitudes fallidas (error de red) deliberadamente no
se guardan en el checkpoint para que se reintenten al reanudar.
panoptic --version # print the installed version and exit
panoptic --update # fast-forward update from the official GitHub repo
--update solo funciona desde un checkout de git cuyo remoto origin use HTTPS o SSH
y coincida con el upstream oficial (verificado antes de hacer pull, para resistir
configuraciones remotas inseguras o manipuladas). Hace un fast-forward de la rama main
del checkout desde la ref explícita main del upstream. Las instalaciones que no son
checkout se pueden actualizar de forma segura desde el archivo oficial de GitHub:
python -m pip install --upgrade https://github.com/lightos/Panoptic/archive/refs/heads/main.zip
Cuando se ejecuta desde un checkout, el banner también muestra la revisión corta actual de git.
Panoptic usa códigos de salida de proceso convencionales para poder ser scripteado:
0 — Éxito: el escaneo (o --list / --update) se completó. Las solicitudes
individuales que agotan sus reintentos se advierten y siguen siendo elegibles para un
escaneo reanudado, pero no hacen fallar una ejecución que por lo demás fue exitosa.1 — Uso no válido: argumentos faltantes o no válidos, o no se pudo encontrar ningún
parámetro inyectable.2 — Falla operativa: no se puede conectar, no hay casos de prueba coincidentes, todas
las solicitudes en cola fallaron, o falló un worker, checkpoint, escritura de salida o
configuración.130 — Interrumpido por el usuario (Ctrl-C / SIGINT).¡Las contribuciones son bienvenidas! Abre issues o pull requests en GitHub.
Para pruebas de extremo a extremo seguras y reproducibles, consulta el Panoptic LFI Testbed. Proporciona endpoints deliberadamente vulnerables que cubren los métodos de inyección y las transformaciones de traversal soportadas por Panoptic.
Este proyecto está licenciado bajo la Licencia MIT; consulta el LICENSE para más detalles.
0600 solo para el propietario en
POSIX y protección de symlinks en el componente final cuando el sistema operativo lo soporta--update)| Cuerpo JSON | --data '{"template":"FUZZ"}' |
| Valor anidado | --header "Cookie: sid=abc; lang=FUZZ" |