
Una herramienta rápida y personalizable de detección de servicios impulsada por un sistema flexible de huellas digitales. Te ayuda a identificar servicios, API y configuraciones de red en toda tu infraestructura.
Una herramienta de detección de servicios rápida y personalizable impulsada por un sistema flexible de huellas digitales. Te ayuda a identificar servicios, API y configuraciones de red en tu infraestructura.
Descarga la última versión desde Lanzamientos
# Scan single IP
zscan -target 192.168.1.1
# Scan CIDR range
zscan -target 192.168.1.0/24
# Scan multiple targets (separated by ; or ,)
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 specific ports
zscan -target 192.168.1.1 -port 80,443,8080
# Save results to JSON file
zscan -target 192.168.1.1 -output results.json
# Report results to remote server
zscan -target 192.168.1.0/24 -report http://server/api/assets
| Opción | Descripción |
|---|---|
-target | Dirección IP o rango CIDR (soporta separadores ; o ,) |
-port | Puertos personalizados para escanear (separados por coma) |
-config | Ruta al archivo de configuración (por defecto: config/config.yaml) |
-geo | Habilitar geolocalización y consulta de información IP |
-output | Formato de salida: json, html o md |
-report | URL para reportar resultados del escaneo |
-apikey | Clave API para autenticación del reporte (token Bearer) |
-version | Mostrar información de versión |
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)
}
Ejecuta docker build -t zscan . para construir la imagen.
Ejecuta docker run zscan --target 127.0.0.1 --config /app/config/config.yaml para iniciar un contenedor.
ZScan admite el desarrollo personalizado de POC en formato YAML. Para obtener información detallada sobre la escritura de POC, consulta nuestra Guía de escritura de POC.
Ejemplo 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:')"
Para más ejemplos y sintaxis detallada, consulta nuestra Guía de escritura de POC.
Los escáneres tradicionales de activos o vulnerabilidades fueron construidos hace décadas. Son de código cerrado, increíblemente lentos y orientados a proveedores. Hoy en día, los atacantes explotan masivamente los CVE recién publicados en todo internet en cuestión de días, a diferencia de los años que solía tomar. Este cambio requiere un enfoque completamente diferente para abordar las vulnerabilidades y exploits de moda en internet.
Construimos ZScan para resolver este desafío. Hicimos que todo el marco del motor de escaneo sea abierto y personalizable, permitiendo que la comunidad global de seguridad colabore y aborde los vectores de ataque y vulnerabilidades más populares en internet. ZScan es utilizado y contribuido por muchas empresas, agencias gubernamentales y universidades.
Puedes participar contribuyendo a nuestro código, biblioteca de plantillas o uniéndote a nuestro equipo.
Gracias a todos los increíbles contribuyentes de la comunidad por enviar PRs y mantener este proyecto actualizado. ❤️
ZScan se distribuye bajo la licencia MIT.