
⚡️ Scansione ZAP su più target
mzap è un CLI in Crystal per scansioni ZAP multi-target.
Distribuisce i target su uno o più host API ZAP, supporta una modalità attesa opzionale e può esportare report.
spider, ajaxspider, clientspider (ZAP 2.16+), ascan, pscanopenapi, soap, graphql e postmansitestree export/prune) per scansioni differenziali/incrementali in ZAP 2.16+policies)html/pdf/json/md/sarif) con comportamento di fallback--fail-on gate di rischio per codici di uscita CIspider, ajaxspider, clientspider, ascan o all$HOME/.config/mzap/config.toml e percorsi legacy>= 1.19.1brew install hahwul/mzap/mzap
shards install --frozen
crystal build --release src/mzap_cli.cr -o bin/mzap
crystal run src/mzap_cli.cr -- version
docker build -t mzap .
docker run --rm -v "$PWD:/work" mzap spider --urls /work/samples/target.txt --apis http://host.docker.internal:8090
Usage:
mzap [command]
Subcommands:
ajaxspider Avvia scansioni Ajax Spider in ZAP
ascan Avvia job di scansione attiva in ZAP
clientspider Avvia scansioni Client Spider in ZAP (ZAP 2.16+)
help Mostra aiuto per un comando
import Importa definizioni API (openapi/soap/graphql/postman)
policies Elenca le policy di scansione attiva in ZAP
pscan Attende il completamento della scansione passiva in ZAP
sitestree Esporta o pota l'albero dei siti di ZAP (ZAP 2.16+)
spider Avvia scansioni Spider in ZAP
stop Ferma scansioni in esecuzione
version Mostra la versione di mzap
Flags:
--apikey string Chiave API ZAP (omettere quando l'autenticazione tramite chiave API è disabilitata)
--apis string URL degli host API ZAP separati da virgola
es. --apis http://localhost:8090,http://192.168.0.4:8090 (default "http://localhost:8090")
--config string Percorso del file di configurazione (supporta TOML; default: $HOME/.config/mzap/config.toml)
--context string File di contesto ZAP da importare prima della scansione
--fail-on string Fallisce con codice di uscita 1 se ci sono avvisi a livello di rischio pari o superiore
--format string Formato della definizione API per l'importazione (openapi/soap/graphql/postman)
--target-url string URL target/endpoint per l'importazione (override)
--policy string Nome della policy di scansione per la scansione attiva
--report-format Formato del report dopo il completamento della scansione (html/pdf/json/md/sarif)
--report-out Percorso di output del report (default: mzap-report-<timestamp>.<ext>)
--concurrency Numero di invii di scansione paralleli (default 1)
--wait Attende il completamento delle scansioni avviate
--wait-interval Intervallo di polling in secondi durante l'attesa (default 2)
--wait-timeout Timeout di attesa in secondi (default 0: nessun timeout)
-h, --help Mostra aiuto per mzap
--urls string Percorso del file contenente l'elenco di URL (es. --urls hosts.txt)
Esegui mzap help <comando> per i flag specifici del comando.
# scansione spider con due host API ZAP
mzap spider --urls samples/target.txt --apis http://localhost:8090,http://192.168.0.4:8090
# esegue la scansione, attende il completamento e genera un report HTML
mzap spider --urls samples/target.txt --apis http://localhost:8090 --wait --report-format html --report-out reports/mzap.html
# Client Spider (crawler basato su browser, ZAP 2.16+; richiede il componente aggiuntivo Client Side Integration)
mzap clientspider --urls samples/target.txt --apis http://localhost:8090 --wait
# importa una definizione OpenAPI, attende la scansione passiva, blocca la CI su avvisi ad alta criticità
mzap import --format openapi --urls samples/specs.txt --target-url https://api.example.com \
--apis http://localhost:8090 --wait --report-format sarif --fail-on high
# importa specifiche API da stdin
echo https://api.example.com/openapi.json | mzap import --format openapi --urls -
# scopre le policy di scansione disponibili (poi usarne una con `ascan --policy`)
mzap policies --apis http://localhost:8090
# Baseline dell'albero dei siti per scansione differenziale (il percorso è risolto dal demone ZAP)
mzap sitestree export baseline.tree --apis http://localhost:8090
mzap sitestree prune baseline.tree --apis http://localhost:8090
# ferma tutti i tipi di scansione in esecuzione
mzap stop all --apis http://localhost:8090
Importazione di API:
mzap importpopola l'albero dei siti di ZAP e lascia eseguire la scansione passiva; per eseguire una scansione attiva sugli endpoint importati successivamente, eseguimzap ascancontro gli stessi target. Per i file locali, i percorsi in--urls(e--target-url) sono risolti dal demone ZAP, quindi montali nel contenitore quando ZAP viene eseguito in Docker.
mzap carica automaticamente la configurazione quando presente.
La priorità è:
--config (se esiste)$HOME/.config/mzap/config.toml$HOME/.config/mzap/config + varianti di estensione$HOME/.mzap + varianti di estensioneI flag CLI sovrascrivono sempre i valori di configurazione.
[mzap]
apis = ["http://localhost:8090", "http://192.168.0.4:8090"]
apikey = "your-zap-api-key"
urls = "samples/target.txt"
wait = true
wait_interval = 2
wait_timeout = 0
report_format = "html"
report_out = "reports/mzap.html"
Questo repository include una GitHub Action basata su Docker (action.yml).
- name: Esegui mzap
uses: hahwul/mzap@<tag>
with:
arguments: "spider --urls samples/target.txt --apis http://localhost:8090"
# test
crystal spec
# build per rilascio
crystal build --release src/mzap_cli.cr -o bin/mzap