Web-Schwachstellen-Scanner, entwickelt mit C++17 und Qt 6, mit GUI, CLI, konfigurierbarem Crawling und JSON-Berichten. Für Bildungszwecke rekonstruiert.
Ein Web-Schwachstellenscanner, entwickelt mit C++17 und Qt 6, mit grafischer und Kommandozeilen-Schnittstelle.
Dieses Repository enthält eine Rekonstruktion von SmartScanner 3.0.0 zu Bildungszwecken. Es kombiniert eine Web-Crawling-Engine, Module zur Schwachstellenerkennung und JSON-Berichterstattung.
robots.txt und Sitemaps, konfigurierbare Crawling-Tiefe und -Reichweite.Die ausgeführten Module hängen von der Konfiguration und den während des Scans entdeckten Ressourcen ab.
| Komponente | Version / Details |
|---|
| CMake | 3.21 oder höher |
| Compiler | C++17-kompatibel |
| Qt | 6.2 oder höher |
| Qt-Module | Core, Gui, Widgets, Network, WebChannel, WebEngineWidgets, Xml |
| Ninja | Erforderlich für die enthaltenen Windows-Build-Skripte |
Die folgenden Anweisungen sind auf Windows ausgerichtet und verwenden die Visual Studio C++-Build-Tools sowie ein kompatibles Qt MSVC-Kit. Der GUI-Einstiegspunkt verwendet direkt die Windows-API (windows.h), sodass das Erstellen des vollständigen Projekts unter Linux oder macOS Änderungen erfordert.
Qt-GUI-Abhängigkeiten sind auch beim Konfigurieren des Projekts für die CLI erforderlich, da beide ausführbaren Dateien dieselbe Bibliothek verwenden.
Öffnen Sie ein PowerShell-Terminal mit konfigurierter Visual Studio-Build-Umgebung und navigieren Sie dann zum Repository-Stammverzeichnis. Passen Sie den Qt-Pfad an Ihre Installation an.
.\build.ps1 -QtPath "C:\Qt\6.8.3\msvc2022_64" -BuildType Release
.\deploy.ps1 -QtPath "C:\Qt\6.8.3\msvc2022_64"
Das erste Skript erstellt das Projekt mit Ninja. Das zweite kopiert verfügbare Qt-Bibliotheken, Plugins und WebEngine-Ressourcen in das Verzeichnis build.
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="C:\Qt\6.8.3\msvc2022_64"
cmake --build build --parallel
.\deploy.ps1 -QtPath "C:\Qt\6.8.3\msvc2022_64"
Der Build erzeugt zwei ausführbare Dateien:
build/sms.exe: Kommandozeilen-Schnittstelle.build/gui.exe: grafische Schnittstelle.Das Verzeichnis assets wird während des Builds automatisch neben die ausführbaren Dateien kopiert. Bewahren Sie es zusammen mit ihnen auf, da es zum Laden der Standardkonfiguration benötigt wird.
.\build\gui.exe
Die folgenden Beispiele verwenden eine lokale Testanwendung unter http://localhost:8080.
# Display help and version information
.\build\sms.exe --help
.\build\sms.exe --version
# Scan a target and save a JSON report
.\build\sms.exe -u http://localhost:8080 -o report.json
# Scan multiple targets
.\build\sms.exe -u http://localhost:8080 -u http://localhost:8081
# Load a file containing one URL per line
.\build\sms.exe -f targets.txt -o report.json
# Limit crawl depth
.\build\sms.exe -u http://localhost:8080 --crawl-depth 2
# Use HTTP Basic authentication
.\build\sms.exe -u http://localhost:8080 --auth-basic "username:password"
# Use an HTTP proxy
.\build\sms.exe -u http://localhost:8080 --proxy http://localhost:8082
# Select a test module
.\build\sms.exe -u http://localhost:8080 -t httpheaders@o=owasp,others
| Option | Beschreibung |
|---|---|
-u, --url <URL> | Fügt ein Ziel hinzu; kann wiederholt werden |
-f, --file <FILE> | Liest Ziele aus einer Datei |
-c, --config <FILE> | Lädt eine JSON-Konfiguration |
-o, --output <FILE> | Speichert den JSON-Bericht |
-d, --crawl-depth <DEPTH> | Legt die Crawling-Tiefe fest: 0 deaktiviert das Crawling, 1 ruft nur die Eingabe-URLs ab, und 2 oder höher folgt Links |
--no-discovery | Entspricht --crawl-depth 0 |
--no-follow | Entspricht --crawl-depth 1 |
-s, --scope <REGEX> | Definiert den Geltungsbereich mithilfe eines regulären Ausdrucks |
-t, --test <TESTS> | Wählt Module aus; kann wiederholt werden |
--auth-basic <user:pass> | Legt HTTP-Basic-Anmeldedaten fest |
--proxy <URL> | Konfiguriert einen Proxy mit explizitem Port |
--proxy-auth <user:pass> | Legt Proxy-Anmeldedaten fest |
--user-agent <STRING> | Legt einen benutzerdefinierten User-Agent fest |
--exit-on <LEVEL> | Stoppt den Scan bei der Schweregradschwelle informational, low, medium oder high |
Die CLI akzeptiert Proxys mit den Schemata http:// und socks://. Das in ihrem aktuellen Hilfetext erwähnte Schema socks5:// wird vom Parser abgelehnt.
Mit --exit-on wird der Scan beendet, wenn ein Problem den angeforderten Schweregrad erreicht oder überschreitet. Die aktuelle Implementierung gibt jedoch nur dann den Exit-Code 1 zurück, wenn ein Befund genau dem angeforderten Schweregrad entspricht.
Die Datei assets/default-scan-config.json stellt die Standardkonfiguration bereit: aktivierte Module, HTTP-Timeouts, parallele Anfragen, Crawling, Ausschlüsse, Authentifizierung und Formularparameter.
So erstellen Sie Ihre eigene Konfiguration:
Copy-Item assets/default-scan-config.json scan-config.json
# Edit scan-config.json, then start the scan
.\build\sms.exe -c scan-config.json -u http://localhost:8080 -o report.json
Die von --test akzeptierten Modulbezeichner sind in dieser Datei unter tests.scripts aufgeführt. Die Option --test ersetzt die Modulauswahl aus der Konfiguration.
Befunde erscheinen während des Scanfortschritts in der Konsole. Die Option --output schreibt am Ende des Scans einen JSON-Bericht, der Folgendes enthält:
Das Zielverzeichnis muss bereits existieren. Eine vorhandene Berichtsdatei wird überschrieben.
Smoke-Tests (*_smoke.cpp) können mit BUILD_TESTS aktiviert werden:
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="C:\Qt\6.8.3\msvc2022_64" -DBUILD_TESTS=ON
cmake --build build --parallel
ctest --test-dir build --output-on-failure
Die aktuelle CTest-Konfiguration führt alle Tests ohne Argumente aus. Einige Tests, darunter sms_cli_smoke, issuedb_smoke und httpheader_smoke, erfordern ein Argument und müssen separat mit den entsprechenden Pfaden ausgeführt werden. Das Ausführen der vollständigen CTest-Suite kann daher Fehler melden, die durch diese Konfiguration verursacht werden.
Führen Sie beispielsweise den CLI-Test aus mit:
.\build\sms_cli_smoke.exe .\build\sms.exe
GUI-Tests erfordern eine Umgebung, die Qt und WebEngine initialisieren kann.
SmartScanner-Source/
├── CMakeLists.txt # Shared library, executables, and tests
├── src/ # Engine, crawler, detectors, CLI, and GUI
├── tests/ # Smoke tests
├── assets/ # Configuration, definitions, and scan resources
├── gui_assets/ # Embedded web interface: HTML, CSS, and JavaScript
├── sms_resources.qrc # CLI Qt resources
├── gui_resources.qrc # GUI Qt resources
├── build.bat # Windows build script
├── build.ps1 # PowerShell build script
└── deploy.ps1 # Copies Qt dependencies for Windows
Die ursprüngliche Dokumentation beschreibt dieses Projekt als proprietär, zu Bildungszwecken rekonstruiert („Proprietary — Reconstructed for educational purposes"). Es ist keine separate LICENSE-Datei in diesem Repository enthalten.