
die blitzschnelle Pentesting-Suite.
Installation · Verwendung · Module · Dokumentation · Mitwirken
Schnelle, gleichzeitige Recon bis hin zur Ausnutzung in einer einzigen Binärdatei. Jeder Scanner teilt sich einen HTTP-Client mit Verbindungspool.
sif ist ein Recon- und Exploitation-Scanner, der die gesamte Kette in einer einzigen Binärdatei ausführt: Subdomain-Enumeration, Portscan, Crawler, Nuclei, Framework-/CVE-Erkennung, JS-Geheimnisextraktion, Web-Sicherheitslücken-Tests (CORS/XSS/Redirect), Cloud- und Übernahme-Checks. 25+ Scantypen, ein Befehl.
sif -u https://example.com -dnslist -ports -crawl -js -framework -nuclei
Nuclei und Colly sind als Bibliotheken einkompiliert und werden nicht als externes Programm ausgeführt (es gibt kein exec.Command im Quelltext), sodass es sich um eine einzige statische Binärdatei ohne Laufzeitabhängigkeiten handelt, die nichts verbinden muss.
Jeder Scanner läuft über einen gemeinsamen HTTP-Client und eine Work-Stealing-Worker-Pool. -proxy, -H, -cookie und -rate-limit gelten für den gesamten Durchlauf auf einmal, Verbindungen werden über den Scan hinweg gepoolt und wiederverwendet (ein Single-Host-Durchlauf verwendet eine Verbindung für ~50 Anfragen, anstatt 50-mal zu verbinden), und ein langsamer Host hält den Rest nicht auf. Dieser gemeinsame Client ist der praktische Grund, es anstelle einer Verkettung mehrerer separater Tools zu verwenden. Der Portscan basiert auf connect(), daher sind rustscan und nmap bei Roh-Portscans immer noch schneller.
Es liest Ziele von stdin und gibt Ergebnisse unter -silent einzeln pro Zeile aus, sodass es sich in Pipes verwenden lässt:
subfinder -d example.com | sif -silent -crawl -js -nuclei | notify
-diff macht einen erneuten Scan zu einem Monitor, der nur Änderungen meldet. -notify sendet Ergebnisse an Slack/Discord/Telegram/Webhook, und die Ausführung erfolgt als Export nach SARIF und Markdown.
brew tap vmfunc/sif
brew install sif
Installation mit einem bevorzugten AUR-Helfer:
yay -S sif
# or
paru -S sif
# nixpkgs (deklarativ: zu configuration.nix oder home-manager hinzufügen)
environment.systemPackages = [ pkgs.sif ];
# oder imperativ
nix profile install nixpkgs#sif
# oder einfach ausführen ohne Installation
nix run nixpkgs#sif -- -u https://example.com -headers -sh -framework
Das Repository enthält auch eine Flake, falls Sie aus dem Quellcode bauen möchten:
nix run github:vmfunc/sif
curl -1sLf 'https://dl.cloudsmith.io/public/sif/deb/setup.deb.sh' | sudo -E bash
sudo apt-get install sif
Laden Sie die neueste Binärdatei von den Releases herunter.
git clone https://github.com/vmfunc/sif.git
cd sif
make
Erfordert Go 1.25+
git clone https://aur.archlinux.org/sif.git
cd sif
makepkg -si
# Basis-Scan
./sif -u https://example.com
# Directory-Fuzzing
./sif -u https://example.com -dirlist medium
# Subdomain-Enumeration
./sif -u https://example.com -dnslist medium
# Portscan
./sif -u https://example.com -ports common
# JavaScript-Framework-Erkennung + Cloud-Fehlkonfiguration
./sif -u https://example.com -js -c3
# Shodan-Host-Intelligenz (erfordert SHODAN_API_KEY-Umgebungsvariable)
./sif -u https://example.com -shodan
# SecurityTrails-Domain-Discovery (erfordert SECURITYTRAILS_API_KEY-Umgebungsvariable)
# Entdeckt Subdomains + zugehörige Domains, scannt dann alle
./sif -u https://example.com -securitytrails -headers
# SQL-Recon + LFI-Scan
./sif -u https://example.com -sql -lfi
# Web-Sicherheitslücken-Tests (CORS, Open Redirect, Reflektiertes XSS)
./sif -u https://example.com -cors -redirect -xss
# Framework-Erkennung (mit CVE-Suche)
./sif -u https://example.com -framework
# Ein breiter Sweep
./sif -u https://example.com -dirlist small -dnslist small -ports common -headers -sh -cms -framework -git -whois
Führen Sie ./sif -h für alle Optionen aus.
Einige Unterbefehle laufen ohne Scan:
# Version ausgeben (Release-Builds sind gestempelt; lokale Builds verwenden git describe)
./sif version
# Die neuesten Release-Notes anzeigen (auch -pn)
./sif patchnote
Beim ersten Ausführen einer neuen Version gibt sif die Notizen dieser Version einmal aus. Setzen Sie SIF_NO_PATCHNOTES=1, um dies zu deaktivieren.
sif hat eine modulare Architektur. Module werden in YAML definiert und können von Benutzern erweitert werden.
Diese gelten für jede ausgehende Anfrage über alle Scanner hinweg:
# Scan durch einen socks5-Proxy mit benutzerdefiniertem Header, Cookie und 20 req/s Limit
./sif -u https://example.com -headers -proxy socks5://127.0.0.1:1080 -H "Authorization: Bearer tok" -cookie "session=abc" -rate-limit 20
Ein Scanner, der explizit einen Header setzt (z. B. einen API-Key), gewinnt immer über die globale Voreinstellung.
Schreibt die Ergebnisse des Durchlaufs zur Verwendung in CI/CD oder zur Triage in eine Datei:
# Scannen und sowohl einen SARIF- als auch einen Markdown-Bericht ausgeben
./sif -u https://example.com -headers -cors -sarif out.sarif -md out.md
Die SARIF-Ausgabe kann von GitHub Code Scanning aufgenommen werden; Markdown ist eine lesbare Zusammenfassung pro Ziel.
-diff macht einen erneuten Scan zu einem Monitor: sif erstellt einen Snapshot der normalisierten Ergebnisse jedes Ziels in einer JSON-Datei und meldet beim nächsten Durchlauf nur das Delta (+ new / - gone) gegenüber diesem Snapshot und überschreibt ihn dann. Der erste Durchlauf für ein Ziel hat keine Baseline, daher ist alles + new. Die Snapshots landen in -store (eine bereinigte Datei pro Ziel); wenn nicht gesetzt, wird das Log-Verzeichnis verwendet, mit Fallback auf <user-config>/sif/state.
# Baseline-Durchlauf, dann später erneut scannen und nur sehen, was sich geändert hat
./sif -u https://example.com -sh -cors -diff
./sif -u https://example.com -sh -cors -diff
Der Snapshot wird immer überschrieben, sodass jeder Durchlauf gegen den vorherigen differiert. Das Delta wird unterdrückt (es wird über den normalen Ausgabe-Sink / stderr unter -silent ausgegeben), nicht der Ergebnisse-Stream.
Senden Sie Ergebnisse an einen Chat/Webhook-Sink, sodass ein kontinuierlicher Recon-Durchlauf auf das Gefundene aufmerksam macht. Jeder Anbieter ist ein einzelner POST durch den gemeinsamen HTTP-Client, sodass die globale Proxy/Rate-Limit/Header-Konfiguration gilt.
Anbieter werden zuerst über Umgebungsvariablen konfiguriert; eine YAML-Datei (-notify-config) überschreibt pro Feld. Die YAML-Schlüssel entsprechen projectdiscovery/notify, sodass eine bestehende Konfiguration portiert werden kann:
# Slack bei Ergebnissen mit Schweregrad medium+ während eines Scans benachrichtigen
export SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
./sif -u https://example.com -cors -xss -notify -notify-severity medium
Ein Anbieter ohne Ziel wird übersprungen; wenn nichts konfiguriert ist, ist -notify eine stille Nulloperation. Slack/Discord/Telegram erhalten einen festformatigen Ergebniskasten; der generische Webhook erhält strukturiertes JSON ({count, findings[]}).
sif liest Ziele von stdin und akzeptiert nackte Hosts, sodass es in eine Unix-Pipe passt. -silent leitet alle Banner/Spinner/Log-Chrome an stderr und gibt ein normiertes Ergebnis pro Zeile ([severity] target module title) an stdout aus:
# subfinder füttert Hosts, sif prüft, notify versendet die Ergebnisse
subfinder -d example.com | sif -silent -probe | notify
| Flag | Beschreibung |
|---|---|
| stdin | Ein gepipeter Ziel-Stream (ein Host/URL pro Zeile) wird zusätzlich zu -u/-f gelesen |
Hosts ohne Schema verwenden standardmäßig https://; ein explizites http:///https:// bleibt erhalten; jedes andere Schema (ftp://, ...) wird abgelehnt.
Verfügbare Module auflisten:
./sif -lm
Bestimmte Module ausführen:
# Nach ID ausführen
./sif -u https://example.com -m sqli-error-based,xss-reflected
# Nach Tag ausführen
./sif -u https://example.com -mt owasp-top10
# Alle Module ausführen
./sif -u https://example.com -am
Erstellen Sie Ihre eigenen Module in ~/.config/sif/modules/. Module verwenden ein YAML-Format, das Nuclei-Templates ähnelt:
id: my-custom-check
info:
name: my custom security check
author: you
severity: medium
description: checks for something specific
tags: [custom, recon]
type: http
http:
method: GET
paths:
- "{{BaseURL}}/admin"
- "{{BaseURL}}/login"
matchers:
- type: status
status:
- 200
- type: word
part: body
words:
- "admin panel"
- "login"
condition: or
Weitere Informationen zum vollständigen Modulformat finden Sie unter docs/modules.md.
Beiträge willkommen. Weitere Richtlinien finden Sie unter contributing.md.
# Formatieren
gofmt -w .
# Lint
go run github.com/golangci/golangci-lint/v2/cmd/[email protected] run
# Testen
go test ./...
Treten Sie unserem Discord bei für Support, Feature-Diskussionen und Pentesting-Tipps:
| Flag | Beschreibung |
|---|
-dirlist | Directory- und Datei-Fuzzing (small/medium/large) |
-mc | dirlist: Diese Statuscodes abgleichen (Komma-getrennt, z. B. 200,301) |
-fc | dirlist: Diese Statuscodes herausfiltern (Komma-getrennt) |
-fs | dirlist: Antworten mit diesen Body-Größen herausfiltern (Komma-getrennt) |
-fw | dirlist: Antworten mit diesen Wortanzahlen herausfiltern (Komma-getrennt) |
-fr | dirlist: Antworten herausfiltern, deren Body diesem Regex entspricht |
-ac | Auto-Kalibrierung der Soft-404-Wildcard-Baseline (dirlist, sql) |
-w | dirlist: Benutzerdefinierte Wortliste (lokale Datei oder URL; überschreibt -dirlist-Größe) |
-e | dirlist: Erweiterungen, die an jedes Wort angehängt werden (Komma-getrennt, z. B. php,bak,env) |
-dnslist | Subdomain-Enumeration (small/medium/large) |
-ports | Portscan (common/full) |
-nuclei | Schwachstellen-Scan mit Nuclei-Templates |
-dork | Automatisiertes Google-Dorking |
-js | JavaScript-Analyse + Extraktion von Geheimnissen und Endpunkten |
-c3 | Cloud-Speicher-Fehlkonfiguration |
-headers | HTTP-Header-Analyse |
-sh | Sicherheitsheader-Analyse (fehlende/schwache Header) |
-st | Subdomain-Übernahme-Erkennung |
-cms | CMS-Erkennung |
-whois | Whois-Abfragen |
-git | Erkennung von exponierten Git-Repositories |
-shodan | Shodan-Abfrage (erfordert SHODAN_API_KEY) |
-securitytrails | Domain-Discovery + Zielerweiterung (erfordert SECURITYTRAILS_API_KEY) |
-sql | SQL-Recon |
-lfi | Local File Inclusion |
-jwt | JWT-Erkennung + Offline-Schwachstellenanalyse (alg:none, schwaches HMAC, exp, sensible Claims) |
-openapi | OpenAPI/Swagger-Spezifikations-Exponierungs-Sonde (zählt Pfade + nicht authentifizierte Endpunkte auf) |
-favicon | Favicon-Hash-Fingerabdruck (Shodan-artig mmh3, Technologie-Match + Pivot-Abfrage) |
-cors | CORS-Fehlkonfigurations-Sonde |
-redirect | Open-Redirect-Sonde |
-xss | Reflektierte XSS-Sonde |
-framework | Framework-Erkennung mit CVE-Suche |
-crawl | Web-Crawler (spider Same-Host-Links/Skripte/Formulare) |
-crawl-depth | Maximale Crawl-Rekursionstiefe (Standard 2) |
-passive | Passive Subdomain/URL-Discovery (kein Traffic zum Ziel) |
-probe | Live-Host-Sonde (Status, Titel, Server, Redirect-Kette) |
| Flag | Beschreibung |
|---|
-proxy | Leite den gesamten Verkehr über einen Proxy (http/https/socks5-URL) |
-H, --header | Benutzerdefinierter Header zum Senden (wiederholbar oder komma-getrennt, "Key: Value") |
-cookie | Cookie-Header, der mit jeder Anfrage gesendet wird |
-rate-limit | Maximale Anfragen pro Sekunde (0 = unbegrenzt, Standard 0) |
| Flag | Beschreibung |
|---|
-sarif | Schreibe einen SARIF 2.1.0-Bericht in diese Datei |
-markdown, -md | Schreibe einen Markdown-Bericht in diese Datei |
-silent | Klare Ausgabe: Chrom unterdrücken (stderr), ein Ergebnis pro Zeile an stdout (für Pipelines) |
-diff | Nur Ergebnisse zeigen, die seit dem letzten Snapshot jedes Ziels hinzugefügt/entfernt wurden |
-store | Snapshot-Verzeichnis für -diff (Standard: Log-Verzeichnis, ansonsten <user-config>/sif/state) |
| Flag | Beschreibung |
|---|
-notify | Senden Sie die Ergebnisse nach dem Scan an jeden konfigurierten Anbieter |
-notify-severity | Mindestschweregrad zum Senden (info/low/medium/high/critical, Standard medium) |
-notify-config | Pfad zu einer notify-kompatiblen YAML-Konfiguration (überschreibt Umgebungsvariablen) |
| Umgebungsvariable | YAML-Schlüssel | Anbieter |
|---|
SLACK_WEBHOOK_URL | slack_webhook_url | Slack Incoming Webhook |
DISCORD_WEBHOOK_URL | discord_webhook_url | Discord Webhook |
TELEGRAM_BOT_TOKEN | telegram_api_key | Telegram Bot API (benötigt auch Chat-ID) |
TELEGRAM_CHAT_ID | telegram_chat_id | Telegram-Ziel-Chat |
NOTIFY_WEBHOOK_URL | webhook_url | Generischer JSON-Webhook (strukturierte Ergebnisse) |
![]() vmfunc 🚧 🧑🏫 📆 🛡️ 💻 | ![]() ProjectDiscovery 📦 | ![]() macdoos 💻 | ![]() Matthieu Witrowiez 🤔 | ![]() tessa 🚇 💬 📓 | ![]() Eva 📝 🖋 🔬 🛡️ ⚠️ 💻 | ![]() Zoa Hickenlooper 💻 |
![]() acxtrilla 📦 |