
Быстрый, настраиваемый инструмент обнаружения служб, работающий на основе гибкой системы отпечатков (fingerprint). Он помогает выявлять службы, API и сетевые конфигурации в вашей инфраструктуре.
Быстрый, настраиваемый инструмент для обнаружения сервисов с гибкой системой отпечатков. Помогает идентифицировать службы, API и сетевые конфигурации в вашей инфраструктуре.
Загрузите последнюю версию из Релизов
# Сканирование одного IP
zscan -target 192.168.1.1
# Сканирование диапазона CIDR
zscan -target 192.168.1.0/24
# Сканирование нескольких целей (разделитель ; или ,)
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"
# Сканирование определённых портов
zscan -target 192.168.1.1 -port 80,443,8080
# Сохранение результатов в файл JSON
zscan -target 192.168.1.1 -output results.json
# Отправка результатов на удалённый сервер
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)
}
Выполните docker build -t zscan ., чтобы создать образ.
Выполните docker run zscan --target 127.0.0.1 --config /app/config/config.yaml, чтобы запустить контейнер.
ZScan поддерживает создание пользовательских POC в формате YAML. Подробную информацию о написании POC вы найдёте в нашем Руководстве по написанию POC.
Пример 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:')"
Больше примеров и подробный синтаксис — в Руководстве по написанию POC.
Традиционные сканеры активов или уязвимостей были созданы десятилетия назад. Они закрыты (closed-source), невероятно медленны и ориентированы на вендоров. Сегодняшние атакующие массово эксплуатируют только что опубликованные CVE по всему интернету за считанные дни, а не за годы, как раньше. Этот сдвиг требует совершенно иного подхода к работе с новыми эксплойтами в интернете.
Мы создали ZScan для решения этой задачи. Мы сделали весь движок сканирования открытым и настраиваемым — чтобы мировое сообщество специалистов по безопасности могло сотрудничать и решать актуальные векторы атак и уязвимости в интернете. ZScan уже используется и развивается множеством предприятий, государственных учреждений и университетов.
Вы можете присоединиться, внося вклад в наш код, библиотеку шаблонов или присоединившись к нашей команде.
Спасибо всем замечательным участникам сообщества за отправку PR и поддержание этого проекта в актуальном состоянии. ❤️
ZScan распространяется под лицензией MIT.
| Опция | Описание |
|---|
-target | IP-адрес или диапазон CIDR (поддерживает разделители ; или ,) |
-port | Порты для сканирования (через запятую) |
-config | Путь к файлу конфигурации (по умолчанию: config/config.yaml) |
-geo | Включить геолокацию и поиск информации по IP |
-output | Формат вывода: json, html или md |
-report | URL для отправки результатов сканирования |
-apikey | API-ключ для аутентификации отчёта (Bearer token) |
-version | Показать информацию о версии |