
Un outil de détection de services rapide et personnalisable, alimenté par un système d'empreintes flexible. Il vous aide à identifier les services, API et configurations réseau sur l'ensemble de votre infrastructure.
Un outil de détection de services rapide et personnalisable, propulsé par un système d'empreintes flexible. Il vous aide à identifier les services, API et configurations réseau au sein de votre infrastructure.
Téléchargez la dernière version depuis Releases
# Scan d'une seule IP
zscan -target 192.168.1.1
# Scan d'une plage CIDR
zscan -target 192.168.1.0/24
# Scan de plusieurs cibles (séparées par ; ou ,)
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"
# Scan de ports spécifiques
zscan -target 192.168.1.1 -port 80,443,8080
# Sauvegarde des résultats dans un fichier JSON
zscan -target 192.168.1.1 -output results.json
# Rapport des résultats vers un serveur distant
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)
}
Exécutez docker build -t zscan . pour construire l'image.
Exécutez docker run zscan --target 127.0.0.1 --config /app/config/config.yaml pour démarrer un conteneur.
ZScan prend en charge le développement de POCs personnalisés au format YAML. Pour des informations détaillées sur l'écriture de POCs, veuillez consulter notre Guide d'écriture de POCs.
Exemple de 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:')"
Pour plus d'exemples et de syntaxe détaillée, consultez notre Guide d'écriture de POCs.
Les scanners traditionnels d'actifs ou de vulnérabilités ont été construits il y a des décennies. Ils sont propriétaires, incroyablement lents et pilotés par les fournisseurs. Aujourd'hui, les attaquants exploitent massivement les CVE nouvellement publiées sur Internet en quelques jours, contrairement aux années que cela prenait auparavant. Ce changement nécessite une approche complètement différente pour faire face aux exploits tendance sur Internet.
Nous avons construit ZScan pour relever ce défi. Nous avons rendu l'ensemble du moteur de scan ouvert et personnalisable, permettant à la communauté mondiale de la sécurité de collaborer et de faire face aux vecteurs d'attaque et vulnérabilités tendance sur Internet. ZScan est désormais utilisé et contribué par de nombreuses entreprises, agences gouvernementales et universités.
Vous pouvez participer en contribuant à notre code, à notre bibliothèque de modèles ou en rejoignant notre équipe.
Merci à tous les incroyables contributeurs de la communauté pour leurs PRs et pour maintenir ce projet à jour. ❤️
ZScan est distribué sous licence MIT.
| Option | Description |
|---|
-target | Adresse IP ou plage CIDR (supporte les séparateurs ; ou ,) |
-port | Ports personnalisés à scanner (séparés par des virgules) |
-config | Chemin du fichier de configuration (par défaut : config/config.yaml) |
-geo | Activer la géolocalisation et la recherche d'informations IP |
-output | Format de sortie : json, html ou md |
-report | URL pour rapporter les résultats du scan |
-apikey | Clé API pour l'authentification du rapport (jeton Bearer) |
-version | Afficher les informations de version |