Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
vuln-scanner — Schwachstellenbewertungs-Scanner mit Berichtserstellung | Kitploit
Tools/GitHubGitHub/zappaboy/vuln-scanner
SchwachstellenscannerContainer-SicherheitStatische Code-Analyse (SAST)API-SicherheitstestsKonfigurationsprüfungWebsicherheitNetzwerksicherheitPenetrationstestsCloud-SicherheitDevSecOpsSecret-ErkennungDNS-Analyse
114vor 1 MonatNoch nicht geprüft
GitHubzappaboy/vuln-scanner

vuln-scanner

Schwachstellenbewertungs-Scanner mit Berichtserstellung

Repository anzeigen

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

vuln-scanner

Eine automatisierte Schwachstellenbewertungsplattform, die 86 Open-Source-Sicherheitstools orchestriert, Ergebnisse aggregiert und dedupliziert, eine optionale OpenAI-kompatible LLM-Analyseebene für Triage, Clustering und Behebung ausführt, Proof-of-Concept-Skripte generiert und professionelle Markdown-, HTML- und JSON-Berichte erstellt — alles aus einem einzigen BlackArch-Linux-Docker-Image.


Inhaltsverzeichnis

  1. Architektur
  2. Werkzeuge
  3. Zieltyp-Gating
  4. Scan-Modi
  5. Authentifiziertes Scannen
  6. LLM-Analyse
  7. PoC-Generierung und -Ausführung
  8. Plugin-System
  9. Berichtsformate
  10. Schnellstart
  11. scanner.sh – Docker-Wrapper
  12. Konfiguration
  13. Umgebungsvariablen
  14. Projektstruktur
  15. Hinzufügen eines neuen Werkzeugs
  16. Entwicklung
  17. DefectDojo-Integration

Architektur```

config.toml / env vars / CLI args ↓ AppConfig (pydantic, 3-layer merge: TOML < env < CLI) ↓ Plugin loader — auto-discovers ./plugins/ + ~/.vuln-scanner/plugins/ ↓ ScanOrchestrator • classify_target() → TargetType • tool.applies_to(target) — skips mismatched pairs • asyncio + ThreadPoolExecutor — parallel (tool × target) tasks • AuthConfig forwarded to every applicable tool ↓ ScanResult[] → Assessment ↓ LLMAnalyzer (optional) • Pass 1: triage + PoC design (threaded, per result) • Pass 2: PoC generation (PocGenerator, host-safe) • Pass 3: mitigation (evidence-informed) • Pass 4: clustering + exec summary ↓ PocRunner (container-only, VS_IN_CONTAINER=1 guard) ↓ ┌────────┬────────┬────────┐ │ .md │ .html │ .json │ (all formats written in parallel) └────────┴────────┴────────┘ ↓ DefectDojo (optional)

Tool herunterladen
root@kitploit:~
Alle Scan-Tools und PoC-Ausführungen laufen in einem **BlackArch Linux** Docker-Container – nichts wird auf dem Host installiert.

---

## Werkzeuge

86 Werkzeuge, nach Kategorien organisiert. Jedes Werkzeug deklariert die unterstützten Zieltypen; der Orchestrator überspringt automatisch inkompatible Paarungen.

### Netzwerk- & Port-Scanning
| Werkzeug | Hinweise |
|------|-------|
| `nmap` | Vollständiger Port-Scan mit Dienst-/Versionserkennung |
| `rustscan` | Schneller Port-Scanner, speist in nmap ein |
| `masscan` | Hochgeschwindigkeits-TCP/UDP-Scanner |
| `naabu` | Port-Scanner mit Diensterkennung |
| `netdiscover` | ARP-basierte Host-Erkennung |

### Webanwendung
| Werkzeug | Hinweise |
|------|-------|
| `nuclei` | Vorlagenbasierter Schwachstellenscanner |
| `nikto` | Scanner für Webserver-Fehlkonfigurationen |
| `wapiti` | Black-Box-Web-Schwachstellenscanner |
| `ffuf` | Schneller Web-Fuzzer (Verzeichnisse, Parameter, Header) |
| `feroxbuster` | Inhaltserkennung mit Rekursion |
| `gobuster` | URI/DNS/vhost-Brute-Forcer |
| `wfuzz` | Webanwendungs-Fuzzer |
| `dalfox` | XSS-Scanner mit Parameteranalyse |
| `xsstrike` | Erweiterte XSS-Erkennungsengine |
| `commix` | Command Injection-Ausnutzung |
| `sqlmap` | Automatisierte SQL-Injection und -Übernahme |
| `nosqlmap` | NoSQL-Injection-Scanner |
| `httpx` | HTTP-Sondierung und Fingerprinting |
| `whatweb` | Web-Technologie-Fingerprint |
| `wafw00f` | WAF-Erkennung und Fingerprinting |
| `wpscan` | WordPress-Schwachstellenscanner |
| `acunetix` | Web-Schwachstellenscanner (API-basiert) |
| `arachni` | Webanwendungs-Sicherheitsscanner |
| `zap` | OWASP ZAP DAST-Scanner |
| `wapiti` | Black-Box-Schwachstellenscanner |
| `drheader` | HTTP-Sicherheitsheader-Analysator |
| `humble` | HTTP-Header-Sicherheitsprüfer |
| `hakrawler` | Schneller Web-Crawler für URLs und Endpunkte |
| `katana` | Next-Gen-Web-Crawling-Framework |
| `gau` | Bekannter URL-Sammler (AlienVault, WaybackMachine) |
| `jsluice` | JavaScript-Geheimnisse und URL-Extraktor |
| `corscanner` | CORS-Fehlkonfigurations-Scanner |
| `crlfuzz` | CRLF-Injection-Scanner |
| `smuggler` | HTTP-Request-Schmuggel-Detektor |
| `linkfinder` | Endpunkt-Erkennung in JavaScript/HTML-Quellen |
| `cariddi` | Web-Crawler mit Geheimnis- und Endpunkt-Erkennung |

### API & GraphQL
| Werkzeug | Hinweise |
|------|-------|
| `kiterunner` | API-Routen-Erkennung mit Kite-Dateien |
| `graphql_cop` | GraphQL-Sicherheitsprüfer |
| `restler` | Zustandsbehafteter REST-API-Fuzzer |
| `apifuzzer` | OpenAPI/Swagger-basierter Fuzzer |
| `cherrybomb` | OpenAPI-Spezifikations-Sicherheitslinter |
| `arjun` | HTTP-Parameter-Erkennung |
| `paramspider` | Parameter-Mining aus Wayback/Quellen |

### DNS & Aufklärung
| Werkzeug | Hinweise |
|------|-------|
| `amass` | Subdomain-Enumeration (passiv + aktiv) |
| `subfinder` | Schnelle passive Subdomain-Enumeration |
| `dnsx` | DNS-Resolver und Sonden-Toolkit |
| `dnsrecon` | DNS-Enumeration und Zonenübertragung |
| `fierce` | DNS-Aufklärung und Host-Erkennung |
| `theharvester` | OSINT: E-Mails, Namen, Hosts, Subdomains |
| `puredns` | Schneller Subdomain-Brute-Forcer mit Wildcard-Filterung |
| `alterx` | Subdomain-Permutations-Engine |
| `waybackurls` | Sammlung historischer URLs aus Wayback Machine |
| `httprobe` | Live-HTTP/HTTPS-Host-Prüfer |

### TLS / SSL
| Werkzeug | Hinweise |
|------|-------|
| `testssl` | TLS-Konfigurations- und Cipher-Suite-Prüfung |
| `sslyze` | TLS-Scanner (Cipher-Suites, Heartbleed, ROBOT) |
| `sslscan` | SSL/TLS-Dienst-Scanner |
| `tlsx` | Schnelles TLS-Sondieren |
| `tls_attacker` | TLS-Protokoll-Angriffswerkzeug |
| `ssh_audit` | SSH-Konfigurations- und Algorithmen-Prüfer |

### SMB & Netzwerkdienste
| Werkzeug | Hinweise |
|------|-------|
| `smbmap` | SMB-Freigabe-Enumeration und Berechtigungen |
| `enum4linux` | SMB/NetBIOS-Enumeration |
| `crackmapexec` | Active Directory und SMB-Bewertung |
| `openvas` | OpenVAS-Schwachstellenscanner |

### SAST & Code-Analyse
| Werkzeug | Hinweise |
|------|-------|
| `bandit` | Python SAST – häufige Sicherheits-Anti-Patterns |
| `semgrep` | Multi-Sprach-SAST mit Community-Regeln |
| `gosec` | Go-Sicherheitsprüfer |
| `bearer` | Datenfluss-SAST mit Datenschutz- und Sicherheitsregeln |
| `horusec` | Multi-Sprach-SAST-Engine |
| `brakeman` | Ruby on Rails SAST-Scanner |
| `flawfinder` | C/C++-Statikanalyse für häufige Fehler |
| `dependency_check` | OWASP-Abhängigkeits-Schwachstellenscanner |
| `pip_audit` | Python-Paket-Schwachstellenprüfer |

### Software Composition Analysis (SCA)
| Werkzeug | Hinweise |
|------|-------|
| `osv-scanner` | Open Source Vulnerability-Datenbank-Scanner |
| `npm-audit` | Node.js-Paket-Schwachstellenprüfung |
| `govulncheck` | Go-Modul-Schwachstellenprüfer |

### Geheimnis-Erkennung
| Werkzeug | Hinweise |
|------|-------|
| `gitleaks` | Git-Verlaufs-Geheimnisscanner |
| `trufflehog` | Tiefer entropiebasierter Geheimnis-Finder |
| `secretfinder` | Geheimnisse in JS-Dateien und Endpunkten |
| `detect-secrets` | Basislinien-basierter Geheimnisscanner |
| `noseyparker` | Hochgeschwindigkeits-Geheimnisscanner mit Musterregeln |

### IaC & Konfiguration
| Werkzeug | Hinweise |
|------|-------|
| `checkov` | Terraform/K8s/Dockerfile IaC-Scanner |
| `tfsec` | Terraform-Statikanalyse |
| `terrascan` | Multi-Cloud-IaC-Sicherheitsscanner |
| `hadolint` | Dockerfile-Best-Practice-Linter |

### Cloud-Infrastruktur
| Werkzeug | Hinweise |
|------|-------|
| `prowler` | AWS/GCP/Azure-Sicherheitslagebewertung |
| `kube-bench` | CIS-Kubernetes-Benchmark-Prüfer |

### Container & Lieferkette
| Werkzeug | Hinweise |
|------|-------|
| `trivy` | Container-Image + Dateisystem-Schwachstellenscanner |
| `grype` | Container- und Paket-Schwachstellen-Matcher |

---

## Zieltyp-Steuerung

Der Orchestrator klassifiziert jedes Ziel in einen oder mehrere Typen und führt nur Werkzeuge aus, die Unterstützung für diesen Typ deklarieren. Dies eliminiert Rauschen, z. B. von SMB-Werkzeugen, die gegen Web-URLs laufen.

| Typ | Beispiel | Passende Werkzeuge |
|------|---------|-----------------|
| `HOST` | `example.com` | DNS, SSL, Web, SMB-Werkzeuge |
| `IP` | `10.0.0.1` | Netzwerk-, Port-, SMB-Werkzeuge |
| `CIDR` | `10.0.0.0/24` | Netzwerk-Scanner |
| `URL` | `https://app.example.com` | Web-, API-, SSL-Werkzeuge |
| `PATH` | `/src/myapp` | SAST, SCA, Geheimnis, IaC-Werkzeuge |
| `REPO` | `https://github.com/org/repo` | Geheimnis, SAST, SCA-Werkzeuge |
| `IMAGE` | `myapp:latest` | Container-Scanner |
| `CLOUD` | `aws:profile=prod`, `arn:aws:…` | Cloud-Posture-Werkzeuge (prowler, kube-bench, terrascan) |

Die Klassifizierung erfolgt automatisch – geben Sie einfach die Zielzeichenkette an; der Scanner ermittelt den Typ.

Erkannte Cloud-Zielformate:
- AWS ARN: `arn:aws:iam::123456789012:root`
- Benanntes Profil-Kürzel: `aws:profile=production`
- GCP-Projekt: `projects/my-project-id`
- Azure-Abonnement-UUID: `00000000-0000-0000-0000-000000000000`

---

## Scan-Modi

| Modus | Beschreibung |
|------|-------------|
| `paranoid` | Maximale Tarnung – passive Sondierung, minimale Fußabdruck |
| `passive` | Keine aktiven Angriffe – nur Enumeration und Banner-Grabbing **(Standard)** |
| `active` | Standard-Schwachstellenprüfungen aktiviert |
| `aggressive` | Vollständiger Scan: alle Vorlagen, Brute-Force, schnelles Timing |

---

## Authentifiziertes Scannen

Anmeldedaten werden an alle anwendbaren Web-Werkzeuge weitergeleitet (nuclei, ffuf, feroxbuster, gobuster, nikto, sqlmap, dalfox, wpscan, wapiti, katana, hakrawler, arjun, wfuzz, corscanner, kiterunner, httpx).

### Globale Anmeldedaten

Auf jedes Ziel angewendet, es sei denn, es existiert eine zielübergreifende Überschreibung.

**Über Konfiguration:**```toml
[scan.auth]
bearer_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
username     = "admin"
password     = "secret"

[scan.auth.cookies]
session = "abc123"

[scan.auth.headers]
X-API-Key = "my-api-key"

Über Umgebungsvariablen (nur global):```bash VS_AUTH_BEARER_TOKEN=eyJ... VS_AUTH_USERNAME=admin VS_AUTH_PASSWORD=secret

root@kitploit:~
**Über CLI** (nur global):```bash
vuln-scanner --targets https://app.example.com \
  --auth-bearer eyJ... \
  --auth-cookie session=abc123 \
  --auth-header X-API-Key=secret

Anmeldeinformationen pro Ziel

Beim Scannen mehrerer Ziele, die unterschiedliche Anmeldeinformationen erfordern, definieren Sie pro Ziel Überschreibungen unter [scan.auth.targets."<target>"]. Ein passender Eintrag ersetzt die globale Konfiguration für dieses Ziel vollständig — es gibt keine Zusammenführung. Die Authentifizierung pro Ziel erfolgt nur über die Konfigurationsdatei (Umgebungsvariablen und CLI-Flags legen nur den globalen Standard fest).```toml [scan.auth]

Global fallback — used for any target without a specific entry

bearer_token = "default-token"

JWT for the main app

[scan.auth.targets."https://app.example.com"] bearer_token = "app-specific-jwt"

Cookie session for the admin panel

[scan.auth.targets."https://admin.example.com"] [scan.auth.targets."https://admin.example.com".cookies] session = "s%3Aabc123" csrftoken = "xyz789"

HTTP Basic for an internal API

[scan.auth.targets."10.0.0.50"] username = "apiuser" password = "s3cret"

Form login for a legacy app

[scan.auth.targets."https://legacy.example.com"] login_url = "https://legacy.example.com/login" username = "admin" password = "password123" [scan.auth.targets."https://legacy.example.com".login_data] _token = "csrf-value-here"

root@kitploit:~
**Auflösung:** `per-target config > global config`

---

## LLM-Analyse

Wenn ein API-Schlüssel vorhanden ist, aktiviert sich die LLM-Ebene automatisch. Sie führt vier Durchläufe der Scanergebnisse durch:

| Durchlauf | Name | Beschreibung |
|-----------|------|-------------|
| 1 | **Triage** | Weist CWE, Konfidenz, False-Positive-Flag, Ausnutzbarkeitsbewertung zu und entwirft einen PoC für jeden Fund |
| 2 | **PoC-Generierung** | Schreibt eigenständige Python/Bash-Skripte, die den Fund mithilfe der bereits im Container vorhandenen Tools bestätigen |
| 3 | **Mitigation** | Erzeugt konkrete kurzfristige Gegenmaßnahmen und dauerhafte Behebungen, optional gestützt durch PoC-Nachweise |
| 4 | **Clustering** | Gruppiert Funde nach Ursache, schreibt gemeinsame Behebungen und erstellt eine zusammenfassende Übersicht (Executive Summary) |

### Provider-Konfiguration

Der LLM-Client ist OpenAI-API-kompatibel — funktioniert mit OpenAI, Azure OpenAI, Ollama, vLLM, LM Studio, OpenRouter und jedem anderen kompatiblen Endpunkt.```toml
[llm]
enabled   = "auto"          # "auto" | true | false  (auto = on when api_key present)
api_key   = ""              # or set OPENAI_API_KEY env var
base_url  = ""              # leave empty for OpenAI; set for Ollama/vLLM/etc.
model     = "gpt-4o"        # REQUIRED when LLM is active — no default

# Sampling parameters (all OpenAI-compatible)
temperature = 0.2
top_p       = 0.95
max_tokens  = 4096
# top_k and other non-standard params go in extra_body:
# [llm.extra_body]
# top_k = 40

Ollama Beispiel:```toml [llm] base_url = "http://localhost:11434/v1" api_key = "ollama" model = "llama3.2"

root@kitploit:~
**vLLM Beispiel:**```toml
[llm]
base_url = "http://localhost:8000/v1"
api_key  = "token-abc123"
model    = "meta-llama/Meta-Llama-3-8B-Instruct"

Feature-Matrix

Jede LLM-Fähigkeit ist ein benanntes Feature, das global umschaltbar und pro Tool oder pro Kategorie überschreibbar ist.

FeatureStandardBeschreibung
logs_analysisanTool-Rohausgabe an das LLM übergeben
enrichanCWE / Konfidenz / Fehlalarm / Exploitability-Triage
classifyanFundtyp und Risiko klassifizieren
clusteranFunde nach Ursache gruppieren
mitigationanSchadensbegrenzung und Behebung generieren
generate_pocanPoC-Skripte als Berichts-Assets schreiben
execute_pocausPoCs im Container ausführen (erfordert VS_IN_CONTAINER=1)
false_positive_filteranWahrscheinliche Fehlalarme aus dem Bericht unterdrücken

Globale Feature-Konfiguration:```toml [llm.features] generate_poc = true execute_poc = false # enable only inside Docker

Per-tool override — disable PoC for bandit (SAST, no runtime target)

[llm.features.tool.bandit] generate_poc = false

Per-category override — disable log analysis for noisy crawlers

[llm.features.category.web] logs_analysis = false

root@kitploit:~
**Funktionspriorität:** `tool override > category override > global`

### Benutzerdefinierte Prompts

Alle LLM-Prompts sind überschreibbar:```toml
[llm.prompts]
enrich_system    = "You are a senior penetration tester..."
mitigation_user  = "Write remediation steps for: {title}..."
# Available placeholders: {title} {severity} {description} {cwe}
#   {exploitability} {tool} {target} {cves} {raw_output}

Bereichsfilter```toml

[llm] include_tools = [] # empty = all tools exclude_tools = ["hakrawler", "gau"] include_categories = [] exclude_categories = ["dns"]

root@kitploit:~
---

## PoC-Generierung und -Ausführung

### Generierung (immer host-sicher)

Das LLM schreibt pro Fund eigenständige Python- und/oder Bash-Skripte. Die Skripte verwenden Tools, die bereits im BlackArch-Image vorhanden sind (`curl`, `sqlmap`, `nuclei`, `dalfox`, etc.) und werden in `<report>_assets/poc/` geschrieben. Die Generierung führt niemals Code aus — sie schreibt nur Dateien.```toml
[llm.poc]
languages        = ["python", "bash"]
only_severities  = ["critical", "high", "medium"]
max_pocs         = 20
allow_git_clone  = false   # permit cloning official exploit PoCs from GitHub

Ausführung (nur Container)

Die PoC-Ausführung ist durch zwei unabhängige Wächter geschützt:

  1. execute_poc = true in [llm.features]
  2. Umgebungsvariable VS_IN_CONTAINER=1 (im Docker-Image integriert)

Der Runner lehnt stillschweigend ab, wenn einer der Wächter fehlt, sodass er nicht auf dem Host ausgeführt werden kann. Eine statische Sperrliste lehnt Skripte ab, die destruktive Muster enthalten (rm -rf /, mkfs., Fork-Bomben usw.), vor der Ausführung.```bash

Enable PoC execution inside the container

VS_LLM_FEATURE_EXECUTE_POC=true docker compose ... run --rm scanner ...

root@kitploit:~
## Plugin-System

Legen Sie eine `.py`-Datei, die eine oder mehrere `AbstractTool`-Unterklassen definiert, in `./plugins/` (oder `~/.vuln-scanner/plugins/`) ab — sie werden beim Start automatisch erkannt, ohne dass Codeänderungen erforderlich sind.

**Erkennungsreihenfolge** (spätere Einträge überschreiben bei Namenskollision):
1. `./plugins/` (relativ zum aktuellen Arbeitsverzeichnis)
2. `~/.vuln-scanner/plugins/`
3. Zusätzliche Verzeichnisse, die über `[plugins] dirs` oder `--plugin-dir` konfiguriert werden

**Beispiel-Plugin** (`plugins/my_scanner.py`):
``````python
from vuln_scanner.tools.abstract import AbstractTool
from vuln_scanner.tools.enums import Severity, ScanStatus, TargetType
from vuln_scanner.tools.models import Finding, ScanInput, ScanResult

class MyScannerTool(AbstractTool):
    name: str = "my-scanner"
    category: str = "web"
    # Only runs against URL targets — skipped automatically for IPs, paths, etc.
    applicable_targets: frozenset[TargetType] = frozenset({TargetType.URL})

    def build_command(self, target: str, scan_input: ScanInput) -> list[str]:
        return ["my-scanner", "--target", target, "--json"]

    def parse_output(self, raw: str, target: str) -> list[Finding]:
        ...

Konfiguration:```toml [plugins] enabled = true dirs = ["/opt/company-scanners"]

root@kitploit:~
**CLI:**```bash
vuln-scanner --plugin-dir /opt/company-scanners --targets https://app.example.com

Zielspezifisches Verhalten

Plugin-Werkzeuge sind global registriert, aber die Typsteuerung des Orchestrators bestimmt, gegen welche Ziele jedes Plugin tatsächlich ausgeführt wird. Ein Plugin, das applicable_targets = frozenset({TargetType.URL}) deklariert, wird niemals gegen eine IP oder einen Dateisystempfad ausgeführt.

Um ein Plugin auf bestimmte Zielzeichenfolgen jenseits der Typsteuerung zu beschränken (z. B. nur gegen einen bekannten Staging-Host ausführen), geben Sie ScanStatus.SKIPPED innerhalb von run() zurück:```python def run(self, target: str, scan_input: ScanInput) -> ScanResult: if "staging" not in target: return ScanResult(tool=self.name, target=target, status=ScanStatus.SKIPPED) return super().run(target, scan_input)

root@kitploit:~
Es gibt keinen konfigurationsseitigen plugin-spezifischen Filter pro Ziel — diese Logik gehört zum Plugin selbst.

---

## Berichtsformate

Drei Formate werden parallel erzeugt. Wählen Sie eine beliebige Kombination:```toml
[report]
formats    = ["markdown", "html", "json"]
output_dir = "./reports"

Oder per CLI: --formats markdown html json

Markdown (.md)

Professioneller strukturierter Bericht nach Branchen-Pentest-Konventionen:

  1. Executive Summary — Text für das Management
  2. Umfang und Methodik — Zielliste, verwendete Tools, Scan-Konfiguration
  3. Schweregrad-Bewertungsleitfaden — CVSS-Bereiche
  4. Übersicht der Ergebnisse — Risikoverteilungsmatrix + Aufschlüsselung pro Ziel
  5. Schwachstellen-Cluster — Grundursachen-Gruppierungen (LLM-generiert)
  6. Detaillierte Ergebnisse — pro Ergebnis: ID, Schweregrad, betroffenes System, Beschreibung, geschäftliche Auswirkungen, Analystennotiz, Abmilderung, dauerhafte Behebung, PoC-Verweise
  7. Anhang A — Scan-Fehler
  8. Anhang B — PoC-Asset-Index

Ergebnisse mehrerer Tools, die dasselbe Problem auf demselben Ziel melden, werden zu einem einzigen Eintrag dedupliziert, der alle beitragenden Tools auflistet.

HTML (.html)

In sich geschlossener Einzeldatei-Bericht (keine externen Abhängigkeiten) mit:

  • Umschaltung zwischen hellem/dunklem Design
  • Nach Schweregrad farbcodierte Ergebnis-Karten
  • Einklappbare Cluster-Abschnitte
  • Statistikraster und Executive Summary-Bereich

JSON (.json)

Vollständiger strukturierter Dump des Assessment-Modells — Ergebnisse, LLM-Anreicherung, Cluster, Statistiken, PoC-Datensätze. Geeignet für die Aufnahme in CI/CD-Pipelines und nachgelagerte Werkzeuge.


Schnellstart

Das Skript poc.sh startet DefectDojo, drei verwundbare Ziele und den Scanner in einem Befehl.

Voraussetzungen: docker, docker compose-Plugin, curl, `python3````bash ./poc.sh

root@kitploit:~
| Schritt | Aktion |
|------|--------|
| 1 | Prüft Voraussetzungen |
| 2 | Lädt `.env` (kopiert von `.env.example`, falls nicht vorhanden) |
| 3 | Startet DefectDojo-Stack |
| 4 | Wartet, bis die DefectDojo-API bereit ist |
| 5 | Holt API-Token über Admin-Anmeldedaten |
| 6 | Startet schwachstellenbehaftete Zielcontainer |
| 7 | Wartet, bis jedes Ziel erreichbar ist |
| 8 | Baut das Scanner-Docker-Image |
| 9 | Führt den Scanner aus, generiert Berichte, überträgt sie zu DefectDojo |
| 10 | Gibt Zusammenfassung mit URLs und Deinstallationsanweisungen aus |

**Mit LLM-Analyse:**```bash
# Copy the example env and add your key
cp .env.example .env
# Edit .env: set OPENAI_API_KEY and VS_LLM_MODEL
./poc.sh

Scan-Modus überschreiben:```bash SCAN_MODE=active ./poc.sh

root@kitploit:~
**Abbau:**```bash
docker compose down -v
docker compose -f docker-compose.target.yaml down -v

Verwundbare Ziele

Lokal (Docker — gestartet durch poc.sh)

AppURLBeschreibung
OWASP Juice Shophttp://localhost:3000Moderne Node.js-Anwendung, die die OWASP Top 10 abdeckt
WebGoathttp://localhost:8888/WebGoatJava/Spring absichtlich unsichere Anwendung

Remote-Labor — pentest-ground.com

Öffentlich zugängliche, absichtlich verwundbare Systeme, die von pentest-ground.com bereitgestellt werden. Keine Einrichtung erforderlich — direkt scannen, um Tools und PoC-Erstellung zu validieren.

SystemURLTypSchwachstellenklassen
DVWAhttps://pentest-ground.com:4280Klassische WebanwendungCSRF, XSS, SQLi
DVGQLhttps://pentest-ground.com:5013GraphQL-APICMDi, XSS, SQLi
RestFlawhttps://pentest-ground.com:9000REST-APISQLi, Code Injection, XXE
GuardianLeakshttps://pentest-ground.com:81Web-AppXSS, SSRF, Code Injection
vuln-scanner --targets \
https://pentest-ground.com:4280 \
https://pentest-ground.com:5013 \
https://pentest-ground.com:9000 \
https://pentest-ground.com:81 \
--mode active
root@kitploit:~
---

## scanner.sh — Docker-Wrapper

`scanner.sh` ist die empfohlene tägliche Schnittstelle zum Ausführen des Scanners. Es kapselt `docker compose run`, sodass Sie nie die Compose-Aufrufung manuell eingeben müssen – übergeben Sie einfach Ziele und Flags direkt.

```bash
docker compose run --rm kitploit-scanner --help
``````bash
./scanner.sh [OPTIONS] [-- SCANNER_ARGS...]

Optionen

FlagBeschreibung
-t, --targets HOST...Ein oder mehrere Scan-Ziele (URL, IP, CIDR, Pfad, Bild)
-m, --mode MODEScan-Modus: passive | active | aggressive | paranoid
-c, --config DATEIKonfigurationsdatei zum Einhängen (Standard: ./config.toml)
-f, --formats FORMATBerichtsformate, kommagetrennt: markdown,html,json; wiederholbar
--no-llmLLM-Anreicherung deaktivieren
--llm-model MODELLLLM-Modell-Überschreibung (z. B. gpt-4o, claude-sonnet-4-5)
--llm-min-severity SCHWEREMindestschwere für LLM: info|low|medium|high|critical
--include-tools WERKZEUGEKommagetrennte Liste der auszuführenden Werkzeuge
--exclude-tools WERKZEUGEKommagetrennte Liste der zu überspringenden Werkzeuge
-e, --env SCHLÜSSEL=WERTZusätzliche Umgebungsvariable an den Container übergeben
-b, --buildDocker-Image vor dem Ausführen neu erstellen
-n, --no-defectdojoDefectDojo-Integration überspringen
--shellInteraktive Shell im Container öffnen (anstatt zu scannen)
-h, --helpHilfe anzeigen

Alles nach -- wird unverändert an den Scanner-Einstiegspunkt weitergeleitet und umgeht die gesamte Wrapper-Logik.

Beispiele```bash

Scan using ./config.toml (targets and mode come from the config)

./scanner.sh

Quick scan with explicit targets and mode

./scanner.sh -t https://app.example.com 192.168.1.0/24 -m active

Use a custom config file

./scanner.sh -c /path/to/prod.toml

Enable LLM enrichment with a specific model

./scanner.sh -t https://app.example.com --llm-model gpt-4o

Run only specific tools

./scanner.sh -t https://app.example.com --include-tools nuclei,dalfox,ffuf

Rebuild the image first, then scan

./scanner.sh --build -t https://app.example.com -m active

Full manual passthrough to the scanner entrypoint

./scanner.sh -- --targets https://t.example.com --mode aggressive --formats markdown html json

Open an interactive shell (all tools, volumes, and env available)

./scanner.sh --shell ./scanner.sh --build --shell

root@kitploit:~
### Was es automatisch macht

- Lädt `.env` (kopiert aus `.env.example`, falls fehlend)
- Kopiert `config.example.toml` → `config.toml`, falls keine Konfiguration existiert
- Erstellt das Docker-Netzwerk `vuln_scanner_network`, falls nicht vorhanden
- Mountet eine benutzerdefinierte `--config`-Datei in den Container unter `/app/config.toml`
- Baut das Image neu, wenn `--build` übergeben wird

---

## Konfiguration

Kopieren Sie die kommentierte Vorlage:```bash
cp config.example.toml config.toml

Vollständige Referenz:```toml [scan] targets = ["192.168.1.1", "https://app.example.com", "/src/myapp"] mode = "passive" # paranoid | passive | active | aggressive timeout = 300 # per-tool timeout in seconds rate_limit = null # requests/sec; null = no limit

Authenticated scanning — forwarded to all applicable web tools

[scan.auth] bearer_token = "" # Authorization: Bearer username = "" # HTTP Basic username password = "" # HTTP Basic password login_url = "" # Form-based login URL

[scan.auth.cookies]

session = "abc123"

[scan.auth.headers]

X-API-Key = "secret"

[tools] exclude = ["nikto"] # skip specific tools by name

[categories] include = ["web", "ssl"] # limit to these categories; empty = all

[plugins] enabled = true

dirs = ["/opt/company-scanners"]

[report] formats = ["markdown", "html", "json"] output_dir = "./reports"

[defectdojo] url = "http://localhost:8080" api_key = "" product_name = "My Product" engagement_name = "Automated Scan"

── LLM Analysis ─────────────────────────────────────────────────────────────

[llm] enabled = "auto" # "auto" | true | false api_key = "" # or OPENAI_API_KEY env var base_url = "" # leave empty for OpenAI model = "" # required when active, e.g. "gpt-4o" or "llama3.2" temperature = 0.2 top_p = 0.95 max_tokens = 4096

extra_body = { top_k = 40 } # for Ollama/vLLM top_k support

exclude_tools = [] exclude_categories = []

[llm.features] logs_analysis = true enrich = true classify = true cluster = true mitigation = true generate_poc = true execute_poc = false # container-only; set VS_LLM_FEATURE_EXECUTE_POC=true false_positive_filter = true

Per-tool feature overrides (tool > category > global precedence)

[llm.features.tool.bandit] generate_poc = false

[llm.features.category.dns] logs_analysis = false

[llm.poc] languages = ["python", "bash"] only_severities = ["critical", "high", "medium"] max_pocs = 20 allow_git_clone = false

root@kitploit:~
**Rangfolge der Konfigurationszusammenführung:** `CLI > env vars > config.toml > defaults`

---

## Umgebungsvariablen

### Kern

| Variable | CLI-Flag | Beschreibung |
|----------|----------|-------------|
| `VS_TARGETS` | `--targets` | Durch Leerzeichen getrennte Zielliste |
| `VS_MODE` | `--mode` | Scanmodus |
| `VS_TIMEOUT` | `--timeout` | Timeout pro Tool (Sekunden) |
| `VS_RATE_LIMIT` | `--rate-limit` | Ratenbegrenzung (req/s) |
| `VS_MAX_CONCURRENT` | `--max-concurrent` | Parallele Tool-Slots |
| `VS_INCLUDE_TOOLS` | `--include-tools` | Tools nach Namen auf die Whitelist setzen |
| `VS_EXCLUDE_TOOLS` | `--exclude-tools` | Tools nach Namen auf die Blacklist setzen |
| `VS_INCLUDE_CATEGORIES` | `--include-categories` | Kategorien auf die Whitelist setzen |
| `VS_EXCLUDE_CATEGORIES` | `--exclude-categories` | Kategorien auf die Blacklist setzen |
| `VS_OUTPUT_DIR` | `--output-dir` | Ausgabeverzeichnis für Berichte |

### Berichte

| Variable | CLI-Flag | Beschreibung |
|----------|----------|-------------|
| `VS_FORMATS` | `--formats` | Berichtsformate: `markdown html json` |

### LLM

| Variable | CLI-Flag | Beschreibung |
|----------|----------|-------------|
| `OPENAI_API_KEY` | — | API-Schlüssel (Standard-Umgebungsvariable, wird als Fallback verwendet) |
| `OPENAI_BASE_URL` | — | Base-URL-Fallback (für Nicht-OpenAI-Endpunkte) |
| `VS_LLM_ENABLED` | `--no-llm` | `auto` \| `true` \| `false` |
| `VS_LLM_MODEL` | `--llm-model` | Modellname (erforderlich, wenn aktiv) |
| `VS_LLM_TEMPERATURE` | — | Sampling-Temperatur |
| `VS_LLM_MAX_TOKENS` | — | Maximale Ausgabetoken |
| `VS_LLM_FEATURE_<NAME>` | `--llm-feature NAME=on` | Globaler Funktionsumschalter, z. B. `VS_LLM_FEATURE_GENERATE_POC=false` |
| `VS_LLM_FEATURE_EXECUTE_POC` | `--llm-poc-execute` | PoC-Ausführung aktivieren (nur Container) |

### Authentifiziertes Scannen

| Variable | CLI-Flag | Beschreibung |
|----------|----------|-------------|
| `VS_AUTH_BEARER_TOKEN` | `--auth-bearer` | Bearer-Token (`Authorization: Bearer …`) |
| `VS_AUTH_USERNAME` | `--auth-user` | HTTP-Basic-Benutzername |
| `VS_AUTH_PASSWORD` | `--auth-pass` | HTTP-Basic-Passwort |
| `VS_AUTH_LOGIN_URL` | `--auth-login-url` | Formularbasierte Anmelde-URL |

Cookies und zusätzliche Header müssen über die Konfigurationsdatei oder die CLI-Flags `--auth-cookie` / `--auth-header` gesetzt werden.

### Plugins

| Variable | CLI-Flag | Beschreibung |
|----------|----------|-------------|
| `VS_PLUGINS_ENABLED` | `--no-plugins` | Automatische Erkennung von Plugins aktivieren/deaktivieren |
| `VS_PLUGINS_DIRS` | `--plugin-dir` | Zusätzliche Plugin-Verzeichnisse (durch Leerzeichen getrennt) |

### DefectDojo

| Variable | CLI-Flag | Beschreibung |
|----------|----------|-------------|
| `VS_DEFECTDOJO_URL` | `--defectdojo-url` | DefectDojo-Basis-URL |
| `VS_DEFECTDOJO_API_KEY` | `--defectdojo-api-key` | API-Token |
| `VS_DEFECTDOJO_PRODUCT` | — | Produktname |
| `VS_DEFECTDOJO_ENGAGEMENT` | — | Engagement-Name |

---

## Projektstruktur```
vuln_scanner/
├── config/
│   ├── models.py        # AppConfig, AppLLMConfig, PluginsConfig (pydantic)
│   └── loader.py        # 3-layer merge: TOML + env (VS_*) + CLI
│
├── tools/
│   ├── enums.py         # Severity, Confidence, ScanStatus, ScanMode, TargetType
│   ├── models.py        # Finding, ScanInput, ScanResult, AuthConfig (pydantic)
│   ├── target.py        # classify_target() — maps target string to TargetType set
│   ├── abstract.py      # AbstractTool ABC + subprocess execution helpers
│   ├── __init__.py      # TOOL_REGISTRY (86 tools)
│   └── <tool>.py        # One file per tool (86 total)
│
├── llm/
│   ├── models.py        # LLMConfig, LLMFeatures, PocConfig (pydantic)
│   ├── features.py      # resolve_features() — tool > category > global merge
│   ├── client.py        # LLMClient — thin openai SDK wrapper
│   ├── analyzer.py      # LLMAnalyzer — 4-pass analysis pipeline
│   └── prompts.py       # Default prompt templates (all overridable)
│
├── poc/
│   ├── models.py        # Poc, PocVerdict
│   ├── generator.py     # PocGenerator — writes scripts, never executes (host-safe)
│   └── runner.py        # PocRunner — executes scripts (VS_IN_CONTAINER guard)
│
├── reports/
│   ├── base.py          # AbstractReporter
│   ├── markdown.py      # Professional structured Markdown report
│   ├── html.py          # Self-contained HTML with light/dark theme
│   └── json_reporter.py # Full Assessment JSON dump
│
├── defectdojo/
│   └── client.py        # DefectDojoClient — push findings via REST API
│
├── plugins.py           # Plugin auto-discovery (./plugins/, ~/.vuln-scanner/plugins/)
├── model.py             # Assessment, Cluster, AssessmentStats
└── orchestrator.py      # ScanOrchestrator — type-gated, async concurrent execution

plugins/                 # Drop .py plugin files here (auto-discovered at startup)
main.py                  # Entry point
config.example.toml      # Fully documented configuration template
.env.example             # Environment variable reference
Dockerfile               # BlackArch-based image; bakes VS_IN_CONTAINER=1
docker-compose.yaml                # DefectDojo stack
docker-compose.scanner.yaml        # Scanner service
docker-compose.target.yaml        # Vulnerable test targets (Juice Shop, WebGoat)
scanner.sh                        # Convenience wrapper — runs the scanner via docker compose
poc.sh                            # End-to-end quick-start script (DefectDojo + targets + scanner)

Hinzufügen eines neuen Tools

Für einmalige oder private Werkzeuge verwenden Sie das Plugin-System — legen Sie eine .py-Datei in ./plugins/ ab, ohne Codeänderungen. Für Werkzeuge, die mit dem Projekt ausgeliefert werden sollen:

  1. Erstellen Sie vuln_scanner/tools/mytool.py:```python from vuln_scanner.tools.abstract import AbstractTool from vuln_scanner.tools.enums import Severity, TargetType from vuln_scanner.tools.models import Finding, ScanInput

class MyTool(AbstractTool): name: str = "mytool" category: str = "web" # Declare which target types this tool supports. # The orchestrator skips mismatched (tool, target) pairs automatically. applicable_targets: frozenset[TargetType] = frozenset({TargetType.URL, TargetType.HOST})

root@kitploit:~
def build_command(self, target: str, scan_input: ScanInput) -> list[str]:
    return ["mytool", "--target", target]

def parse_output(self, raw: str, target: str) -> list[Finding]:
    findings = []
    for line in raw.splitlines():
        if "VULN" in line:
            findings.append(Finding(
                title="Example finding",
                severity=Severity.HIGH,
                description=line,
                tool=self.name,
                target=target,
            ))
    return findings
root@kitploit:~
2. Registriere es in `vuln_scanner/tools/__init__.py`:```python
from vuln_scanner.tools.mytool import MyTool

TOOL_REGISTRY: dict[str, type[AbstractTool]] = {
    ...
    "mytool": MyTool,
}
  1. Füge die Binärdatei zur Dockerfile hinzu:```dockerfile RUN pacman -Sy --noconfirm mytool
root@kitploit:~
**Tipps:**
- Verwenden Sie bei Tools, die in eine Datei statt in stdout schreiben, `OUTPUT_FILE_SENTINEL` in `build_command()` und überschreiben Sie `run()`, um `self._run_with_tempfile()` aufzurufen.
- Tools mit `applicable_targets = frozenset(TargetType)` (Standard) werden für alle Zieltypen ausgeführt – verwenden Sie dies nur für wirklich universelle Tools.
- Binärdatei nicht gefunden → `ScanStatus.SKIPPED` (im Bericht verborgen). Tool-Fehler → `ScanStatus.FAILED` (in Anhang A angezeigt).

---

## Entwicklung```bash
# Install with dev dependencies
uv sync

# Run tests (host-safe only — no real tool execution)
uv run pytest tests/ -v

# Lint
uv run ruff check .
uv run ruff format .

Testkategorien:

  • tests/test_config.py — Konfigurationszusammenführung und -validierung
  • tests/test_target_typing.py — classify_target() und applies_to()
  • tests/test_orchestrator_gating.py — Typ-Gating mit Mock-Tools
  • tests/test_llm.py — LLM-Funktionen, gemockter Client, PoC-Runner-Container-Guard
  • tests/test_reports.py — alle drei Reporter (Markdown, HTML, JSON)
  • tests/test_nmap.py — Nmap-Ausgabe-Parser

Sicherheitsregel: Führen Sie niemals echte Scan-Tools auf dem Host aus. Die gesamte Tool-Ausführung erfolgt innerhalb des Docker-Containers gegen die isolierten Ziel-Container. Der PocRunner erzwingt dies – er prüft VS_IN_CONTAINER=1, bevor ein PoC-Skript ausgeführt wird, und das Docker-Image enthält diese Variable fest integriert.


DefectDojo-Integration

Ergebnisse werden automatisch übertragen, wenn api_key und product_name konfiguriert sind.

API-Schlüssel abrufen:

  1. Öffnen Sie DefectDojo unter http://localhost:8080
  2. Melden Sie sich an (Standard: admin / admin)
  3. Gehen Sie zu Profil → API v2-Schlüssel

Manueller Push:```bash VS_DEFECTDOJO_API_KEY=your-key
VS_DEFECTDOJO_PRODUCT="My App"
uv run vuln-scanner --targets 192.168.1.1

root@kitploit:~