
Uno strumento di rilevamento dei servizi veloce e personalizzabile, alimentato da un sistema flessibile di impronte digitali (fingerprint). Ti aiuta a identificare servizi, API e configurazioni di rete nella tua infrastruttura.
Uno strumento di rilevamento dei servizi veloce e personalizzabile, alimentato da un sistema di impronte digitali flessibile. Aiuta a identificare servizi, API e configurazioni di rete nella propria infrastruttura.
Scarica l'ultima versione da Releases
# Scansione di un singolo IP
zscan -target 192.168.1.1
# Scansione di un range CIDR
zscan -target 192.168.1.0/24
# Scansione di più target (separati da ; o ,)
zscan -target "192.168.1.0/24;10.0.0.0/24"
zscan -target "192.168.1.1,192.168.1.2,192.168.1.3"
# Scansione di porte specifiche
zscan -target 192.168.1.1 -port 80,443,8080
# Salvataggio dei risultati in un file JSON
zscan -target 192.168.1.1 -output results.json
# Invio dei risultati a un server remoto
zscan -target 192.168.1.0/24 -report http://server/api/assets
package main
import (
"flag"
"log"
"os"
"time"
"github.com/zcyberseclab/zscan/pkg/stage"
)
func main() {
target := flag.String("target", "", "IP address or CIDR range to scan")
configPath := flag.String("config", "config/config.yaml", "Path to config file")
templatesDir := flag.String("templates-dir", "templates", "Path to templates directory")
enableGeo := flag.Bool("geo", false, "Enable geolocation and IP info lookup")
enableCensys := flag.Bool("censys", false, "Enable Censys data enrichment")
censysAPIKey := flag.String("censys-api-key", "", "Censys API Key")
censysSecret := flag.String("censys-secret", "", "Censys API Secret")
flag.Parse()
if *target == "" {
log.Fatal("Target IP or CIDR range is required")
}
// Handle Censys credentials from environment if not provided
if *enableCensys {
if *censysAPIKey == "" || *censysSecret == "" {
*censysAPIKey = os.Getenv("CENSYS_API_KEY")
*censysSecret = os.Getenv("CENSYS_SECRET")
}
if *censysAPIKey == "" || *censysSecret == "" {
log.Printf("Warning: Censys integration enabled but credentials not provided. Skipping Censys data enrichment.")
*enableCensys = false
}
}
// Create scanner
scanner, err := stage.NewScanner(*configPath, *templatesDir, *enableGeo, *enableCensys, *censysAPIKey, *censysSecret)
if err != nil {
log.Fatalf("Failed to create scanner: %v", err)
}
defer scanner.Close()
// Perform scan
startTime := time.Now()
results, err := scanner.Scan(*target)
if err != nil {
log.Fatalf("Scan failed: %v", err)
}
// Print results
if err := stage.PrintResults(results); err != nil {
log.Printf("Error printing results: %v", err)
}
duration := time.Since(startTime)
log.Printf("\nScan completed in: %v\n", duration)
}
Esegui docker build -t zscan . per creare l'immagine.
Esegui docker run zscan --target 127.0.0.1 --config /app/config/config.yaml per avviare un container.
ZScan supporta lo sviluppo di POC personalizzati in formato YAML. Per informazioni dettagliate sulla scrittura dei POC, consulta la nostra Guida alla scrittura di POC.
Esempio di POC:
type: Path Traversal
cve-id: CVE-2021-41773
severity: critical
rules:
- method: GET
path: /icons/.%2e/%2e%2e/etc/passwd
expression: "response.status==200 && response.body.bcontains(b'root:')"
Per ulteriori esempi e sintassi dettagliata, consulta la nostra Guida alla scrittura di POC.
Gli scanner tradizionali di asset o vulnerabilità sono stati creati decenni fa. Sono chiusi, incredibilmente lenti e guidati dai vendor. Oggi gli attaccanti sfruttano massivamente le nuove CVE pubblicate su Internet nel giro di giorni, a differenza degli anni che servivano un tempo. Questo cambiamento richiede un approccio completamente diverso per contrastare gli exploit più diffusi su Internet.
Abbiamo creato ZScan per risolvere questa sfida. Abbiamo reso l'intero motore di scansione aperto e personalizzabile, consentendo alla community globale di sicurezza di collaborare per affrontare i vettori di attacco e le vulnerabilità di tendenza su Internet. ZScan è ora utilizzato e supportato da molte aziende, enti governativi e università.
Puoi partecipare contribuendo al nostro codice, alla libreria di template o unendoti al nostro team.
Grazie a tutti gli incredibili contributori della community per aver inviato PR e per aver mantenuto aggiornato questo progetto. ❤️
ZScan è distribuito sotto licenza MIT.
| Opzione | Descrizione |
|---|
-target | Indirizzo IP o range CIDR (supporta separatori ; o ,) |
-port | Porte personalizzate da scansionare (separate da virgola) |
-config | Percorso del file di configurazione (default: config/config.yaml) |
-geo | Abilita geolocalizzazione e ricerca informazioni IP |
-output | Formato di output: json, html o md |
-report | URL per inviare i risultati della scansione |
-apikey | Chiave API per l'autenticazione del report (Bearer token) |
-version | Mostra le informazioni sulla versione |