
Panoptic è uno strumento open source di penetration testing che automatizza il processo di ricerca e recupero di contenuti per file di log e configurazione comuni attraverso vulnerabilità di path traversal.

Panoptic è uno strumento open source di penetration testing che automatizza la ricerca e il recupero di file di log e di configurazione comuni tramite vulnerabilità di path traversal.

--concurrency)FUZZ
in qualsiasi valore di --header o --data--base64)/etc/passwd per i file delle home
directory, mysql-bin.index per i file binlog--output-format)--resume-file)--config)httpx[socks], rich, rich-argparse e
tomli su 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
Nel Prompt dei comandi di Windows, attiva con .venv\Scripts\activate.bat;
in PowerShell, usa .venv\Scripts\Activate.ps1. L'installazione in modalità
editable mantiene Panoptic collegato a questa copia locale per --update,
quindi tieni la directory al suo posto. Non eseguire pip install panoptic:
quel nome su PyPI appartiene a un progetto non correlato.
Per lo sviluppo:
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
Inserisci FUZZ in qualsiasi punto dei valori di --header o --data per
marcare il punto di injection. Panoptic sostituisce FUZZ con ogni percorso
di file durante la scansione. Ciò consente di testare punti di injection che
--param non può raggiungere:
| Tipo di injection | Esempio |
|---|---|
| Valore cookie | --header "Cookie: theme=FUZZ" |
| Header personalizzato | --header "X-Include: FUZZ" |
Quando FUZZ è presente, --param non è richiesto.
Panoptic supporta file di configurazione TOML per impostazioni persistenti:
panoptic --url "http://target/include.php?file=test.txt" \
--config ~/.config/panoptic/config.toml
Posizione predefinita della configurazione: ~/.config/panoptic/config.toml
(caricata automaticamente se presente, anche senza --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"]
Priorità: argomenti CLI > file di configurazione > impostazioni predefinite.
La tabella [defaults] accetta qualsiasi opzione di scansione, non solo
ottimizzazioni delle prestazioni. In particolare puoi rendere persistenti:
url — la destinazione predefinita (sovrascrivibile a ogni esecuzione con --url)output_format, output_file — dove vengono salvati i risultati machine-readablelog_file — rispecchia l'output della console su un fileresume_file — posizione del checkpoint per scansioni riprendibiliGli artefatti sensibili scritti da Panoptic — il file di log, il file di
output dei risultati/elenchi e qualsiasi file salvato con --write-files —
sono forzati a permessi 0600 di sola proprietà su POSIX. Le piattaforme che
espongono O_NOFOLLOW rifiutano anche atomicamente un symlink preesistente
nel componente finale del percorso. Sulle piattaforme senza O_NOFOLLOW,
Panoptic esegue un controllo pre-apertura del symlink/junction con il miglior
sforzo possibile, ma il controllo non può eliminare una condizione di corsa.
I bit di modalità di Windows non configurano gli ACL NTFS, quindi usa una
directory adeguatamente restrittiva quando gli artefatti possono contenere
dati sensibili.
Ogni flag booleano ha una controparte --no-, quindi un valore impostato su
true nel file di configurazione può essere disattivato per una singola
esecuzione senza modificare il file:
# config.toml sets verbose = true and automatic = true
panoptic --url "http://target/x.php?file=test.txt" --no-verbose --no-auto
Poiché un flag booleano omesso rimane non impostato (invece di avere come
predefinito false), il valore della configurazione viene usato a meno che
non si passi esplicitamente il flag o la sua forma --no-.
Instrada il traffico attraverso 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 risolve il DNS attraverso il proxy — utile per Tor e per evitare
perdite DNS locali). SOCKS4 non è supportato dal client HTTP sottostante.
Lo schema e l'host vengono validati prima dell'avvio della scansione.httpx[socks], installato per
impostazione predefinita.HTTP_PROXY / HTTPS_PROXY / NO_PROXY. Passa --ignore-proxy
per bypassarle e connetterti direttamente (questo disabilita anche qualsiasi
proxy configurato tramite variabili d'ambiente).--invalid-ssl quando intercetti HTTPS attraverso un proxy con
una CA propria. Questo disabilita la verifica del certificato ed è
pericoloso su reti non affidabili.--all-versions)Alcuni percorsi inclusi sono modelli di versione (ad esempio le directory di
rilascio JBoss scritte come [JBOSS]). Per impostazione predefinita queste
righe modello vengono saltate, perché un percorso letterale [JBOSS] non può
mai corrispondere a un file reale. Passando --all-versions ogni modello
viene espanso in base all'elenco di versioni incluso, aggiungendo un percorso
concreto per ogni versione nota: una scansione molto più ampia ma decisamente
più approfondita:
panoptic --url "http://target/x.php?file=test.txt" --auto --all-versions
Panoptic non classifica un percorso basandosi solo sull'header
Content-Length controllato dalla destinazione. Confronta l'intero corpo
normalizzato con la baseline del percorso non valido. Un limite superiore
economico di similarità evita il confronto completo solo quando può già
dimostrare che i corpi differiscono; le risposte ambigue usano il rapporto
esatto per evitare falsi negativi dovuti a corpi riordinati.
--resume-file PATH registra i casi completati così una scansione interrotta
può continuare da dove era rimasta:
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
Il checkpoint memorizza solo gli ID dei casi completati più un'impronta SHA-256 della definizione della scansione (URL, parametri di injection, opzioni di rilevamento, header, cookie, User-Agent e set esatto di casi). Non memorizza mai credenziali, header o URL in chiaro.
Alla ripresa, l'impronta viene ricalcolata e confrontata. Se qualcosa che
cambierebbe il significato della scansione è diverso — una destinazione, un
parametro, un header, un cookie, un set di filtri o l'interruttore
--all-versions differenti — il checkpoint viene rifiutato con un avviso e la
scansione riparte da zero, così un checkpoint obsoleto non può mai saltare
silenziosamente casi di una scansione diversa. I checkpoint legacy con elenco
semplice vengono accettati con un avviso e limitati agli ID dei casi presenti
nella scansione corrente; poiché quel vecchio formato non ha impronta, gli
utenti dovrebbero sostituirlo con il formato di nuova scrittura. Le richieste
fallite (errori di rete) sono volutamente non registrate nel checkpoint,
così da essere ritentate alla ripresa.
panoptic --version # print the installed version and exit
panoptic --update # fast-forward update from the official GitHub repo
--update funziona solo da un checkout git il cui remote origin usa HTTPS
o SSH e corrisponde all'upstream ufficiale (verificato prima del pull, per
resistere a configurazioni remote non sicure o manomesse). Fa avanzare il
branch main del checkout tramite il ref esplicito main dell'upstream.
Le installazioni non basate su checkout possono essere aggiornate in sicurezza
dall'archivio GitHub ufficiale:
python -m pip install --upgrade https://github.com/lightos/Panoptic/archive/refs/heads/main.zip
Quando viene eseguito da un checkout, il banner mostra anche la revisione git breve corrente.
Panoptic usa i codici di uscita convenzionali dei processi per poter essere scriptato:
0 — Successo: la scansione (o --list / --update) è completata. Le
singole richieste che esauriscono i tentativi vengono segnalate con un
avviso e restano idonee per una scansione ripresa, ma non fanno fallire
un'esecuzione altrimenti riuscita.1 — Utilizzo non valido: argomenti mancanti o non validi, oppure nessun
parametro injectable trovato.2 — Errore operativo: impossibile connettersi, nessun caso di test
corrispondente, tutte le richieste in coda sono fallite, oppure un worker,
un checkpoint, una scrittura dell'output o la configurazione hanno fallito.130 — Interrotto dall'utente (Ctrl-C / SIGINT).I contributi sono benvenuti! Apri issue o pull request su GitHub.
Per test end-to-end sicuri e riproducibili, consulta il Panoptic LFI Testbed. Fornisce endpoint volutamente vulnerabili che coprono i metodi di injection supportati da Panoptic e le trasformazioni di traversal.
Questo progetto è concesso in licenza MIT - consulta il file LICENSE per i dettagli.
0600 di sola proprietà su
POSIX e protezione del symlink del componente finale dove il sistema
operativo lo supporta--update)| Corpo JSON | --data '{"template":"FUZZ"}' |
| Valore annidato | --header "Cookie: sid=abc; lang=FUZZ" |