Scanner de vulnérabilités web construit avec C++17 et Qt 6, doté d'une interface graphique, d'une CLI, d'un crawling configurable et de rapports JSON. Reconstruit à des fins éducatives.
Un scanner de vulnérabilités web construit avec C++17 et Qt 6, doté d'interfaces graphique et en ligne de commande.
Ce dépôt contient une reconstruction de SmartScanner 3.0.0 à des fins éducatives. Il combine un moteur d'exploration web, des modules de détection de vulnérabilités et un rapport JSON.
robots.txt et des sitemaps, profondeur et périmètre d'exploration configurables.Les modules exécutés dépendent de la configuration et des ressources découvertes lors de l'analyse.
| Composant | Version / détails |
|---|
| CMake | 3.21 ou ultérieur |
| Compilateur | Compatible C++17 |
| Qt | 6.2 ou ultérieur |
| Modules Qt | Core, Gui, Widgets, Network, WebChannel, WebEngineWidgets, Xml |
| Ninja | Requis par les scripts de build Windows inclus |
Les instructions ci-dessous ciblent Windows, en utilisant les outils de build C++ de Visual Studio et un kit Qt MSVC compatible. Le point d'entrée de l'interface graphique utilise directement l'API Windows (windows.h), donc compiler le projet complet sous Linux ou macOS nécessite des modifications.
Les dépendances de l'interface graphique Qt sont également requises lors de la configuration du projet pour la CLI, car les deux exécutables partagent la même bibliothèque.
Ouvrez un terminal PowerShell avec l'environnement de build Visual Studio configuré, puis naviguez jusqu'à la racine du dépôt. Ajustez le chemin Qt pour qu'il corresponde à votre installation.
.\build.ps1 -QtPath "C:\Qt\6.8.3\msvc2022_64" -BuildType Release
.\deploy.ps1 -QtPath "C:\Qt\6.8.3\msvc2022_64"
Le premier script compile le projet avec Ninja. Le second copie les bibliothèques Qt disponibles, les plugins et les ressources WebEngine dans le répertoire 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"
La compilation produit deux exécutables :
build/sms.exe : interface en ligne de commande.build/gui.exe : interface graphique.Le répertoire assets est automatiquement copié à côté des exécutables lors de la compilation. Conservez-le avec eux, car il est nécessaire pour charger la configuration par défaut.
.\build\gui.exe
Les exemples suivants utilisent une application de test locale à l'adresse 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 | Description |
|---|---|
-u, --url <URL> | Ajoute une cible ; peut être répétée |
-f, --file <FILE> | Lit les cibles depuis un fichier |
-c, --config <FILE> | Charge une configuration JSON |
-o, --output <FILE> | Enregistre le rapport JSON |
-d, --crawl-depth <DEPTH> | Définit la profondeur d'exploration : 0 désactive l'exploration, 1 ne récupère que les URL d'entrée, et 2 ou plus suit les liens |
--no-discovery | Équivalent à --crawl-depth 0 |
--no-follow | Équivalent à --crawl-depth 1 |
-s, --scope <REGEX> | Définit le périmètre à l'aide d'une expression régulière |
-t, --test <TESTS> | Sélectionne les modules ; peut être répétée |
--auth-basic <user:pass> | Définit les identifiants HTTP Basic |
--proxy <URL> | Configure un proxy avec un port explicite |
--proxy-auth <user:pass> | Définit les identifiants du proxy |
--user-agent <STRING> | Définit un User-Agent personnalisé |
--exit-on <LEVEL> | Arrête l'analyse au seuil de gravité informational, low, medium ou high |
La CLI accepte les proxys utilisant les schémas http:// et socks://. Le schéma socks5:// mentionné dans son texte d'aide actuel est rejeté par l'analyseur.
Avec --exit-on, l'analyse s'arrête lorsqu'un problème atteint ou dépasse la gravité demandée. Cependant, l'implémentation actuelle ne renvoie le code de sortie 1 que si une découverte correspond exactement à la gravité demandée.
Le fichier assets/default-scan-config.json fournit la configuration par défaut : modules activés, délais d'attente HTTP, requêtes parallèles, exploration, exclusions, authentification et paramètres de formulaire.
Pour créer votre propre configuration :
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
Les identifiants de modules acceptés par --test sont listés sous tests.scripts dans ce fichier. L'option --test remplace la sélection de modules de la configuration.
Les découvertes apparaissent dans la console au fur et à mesure de l'analyse. L'option --output écrit un rapport JSON à la fin de l'analyse, contenant :
Le répertoire de destination doit déjà exister. Un fichier de rapport existant est écrasé.
Les tests de fumée (*_smoke.cpp) peuvent être activés avec BUILD_TESTS :
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
La configuration CTest actuelle exécute tous les tests sans arguments. Certains tests, notamment sms_cli_smoke, issuedb_smoke et httpheader_smoke, nécessitent un argument et doivent être exécutés séparément avec les chemins appropriés. L'exécution de la suite CTest complète peut donc signaler des échecs causés par cette configuration.
Par exemple, exécutez le test de la CLI avec :
.\build\sms_cli_smoke.exe .\build\sms.exe
Les tests de l'interface graphique nécessitent un environnement capable d'initialiser Qt et WebEngine.
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
La documentation originale décrit ce projet comme propriétaire, reconstruit à des fins éducatives (« Proprietary — Reconstructed for educational purposes »). Aucun fichier LICENSE distinct n'est inclus dans ce dépôt.