Scanner di vulnerabilità web realizzato con C++17 e Qt 6, con GUI, CLI, crawling configurabile e report JSON. Ricostruito per scopi educativi.
Uno scanner di vulnerabilità web realizzato con C++17 e Qt 6, dotato di interfacce grafica e a riga di comando.
Questo repository contiene una ricostruzione di SmartScanner 3.0.0 a scopo didattico. Combina un motore di web crawling, moduli di rilevamento delle vulnerabilità e reportistica JSON.
robots.txt e sitemap, profondità e ambito di scansione configurabili.I moduli eseguiti dipendono dalla configurazione e dalle risorse scoperte durante la scansione.
| Componente | Versione / dettagli |
|---|
| CMake | 3.21 o successivo |
| Compilatore | compatibile con C++17 |
| Qt | 6.2 o successivo |
| Moduli Qt | Core, Gui, Widgets, Network, WebChannel, WebEngineWidgets, Xml |
| Ninja | Richiesto dagli script di build inclusi per Windows |
Le istruzioni seguenti sono rivolte a Windows, utilizzando i Visual Studio C++ build tools e un kit Qt MSVC compatibile. Il punto di ingresso della GUI utilizza direttamente l'API di Windows (windows.h), quindi la compilazione dell'intero progetto su Linux o macOS richiede modifiche.
Le dipendenze della GUI Qt sono richieste anche quando si configura il progetto per la CLI, poiché entrambi gli eseguibili condividono la stessa libreria.
Aprire un terminale PowerShell con l'ambiente di build di Visual Studio configurato, quindi spostarsi nella radice del repository. Adeguare il percorso di Qt alla propria installazione.
.\build.ps1 -QtPath "C:\Qt\6.8.3\msvc2022_64" -BuildType Release
.\deploy.ps1 -QtPath "C:\Qt\6.8.3\msvc2022_64"
Il primo script compila il progetto con Ninja. Il secondo copia le librerie Qt disponibili, i plugin e le risorse WebEngine nella directory 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 compilazione produce due eseguibili:
build/sms.exe: interfaccia a riga di comando.build/gui.exe: interfaccia grafica.La directory assets viene copiata automaticamente accanto agli eseguibili durante la compilazione. Conservarla insieme a essi, poiché è necessaria per caricare la configurazione predefinita.
.\build\gui.exe
Gli esempi seguenti utilizzano un'applicazione di test locale all'indirizzo 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
| Opzione | Descrizione |
|---|---|
-u, --url <URL> | Aggiunge un target; può essere ripetuta |
-f, --file <FILE> | Legge i target da un file |
-c, --config <FILE> | Carica una configurazione JSON |
-o, --output <FILE> | Salva il report JSON |
-d, --crawl-depth <DEPTH> | Imposta la profondità di crawling: 0 disabilita il crawling, 1 recupera solo gli URL di input, e 2 o superiore segue i link |
--no-discovery | Equivalente a --crawl-depth 0 |
--no-follow | Equivalente a --crawl-depth 1 |
-s, --scope <REGEX> | Definisce l'ambito tramite un'espressione regolare |
-t, --test <TESTS> | Seleziona i moduli; può essere ripetuta |
--auth-basic <user:pass> | Imposta le credenziali HTTP Basic |
--proxy <URL> | Configura un proxy con porta esplicita |
--proxy-auth <user:pass> | Imposta le credenziali del proxy |
--user-agent <STRING> | Imposta uno User-Agent personalizzato |
--exit-on <LEVEL> | Interrompe la scansione alla soglia di gravità informational, low, medium o high |
La CLI accetta proxy con schemi http:// e socks://. Lo schema socks5:// menzionato nel testo di aiuto attuale viene rifiutato dal parser.
Con --exit-on, la scansione si interrompe quando un problema raggiunge o supera la gravità richiesta. Tuttavia, l'implementazione attuale restituisce il codice di uscita 1 solo se un risultato corrisponde esattamente alla gravità richiesta.
Il file assets/default-scan-config.json fornisce la configurazione predefinita: moduli abilitati, timeout HTTP, richieste parallele, crawling, esclusioni, autenticazione e parametri dei form.
Per creare una configurazione personalizzata:
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
Gli identificatori dei moduli accettati da --test sono elencati sotto tests.scripts in questo file. L'opzione --test sostituisce la selezione dei moduli della configurazione.
I risultati compaiono nella console man mano che la scansione procede. L'opzione --output scrive un report JSON al termine della scansione, contenente:
La directory di destinazione deve esistere già. Un file di report esistente viene sovrascritto.
Gli smoke test (*_smoke.cpp) possono essere abilitati con 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
L'attuale configurazione CTest esegue tutti i test senza argomenti. Alcuni test, tra cui sms_cli_smoke, issuedb_smoke e httpheader_smoke, richiedono un argomento e devono essere eseguiti separatamente con i percorsi appropriati. L'esecuzione dell'intera suite CTest può quindi segnalare errori causati da questa configurazione.
Ad esempio, eseguire il test della CLI con:
.\build\sms_cli_smoke.exe .\build\sms.exe
I test della GUI richiedono un ambiente in grado di inizializzare Qt e 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 documentazione originale descrive questo progetto come proprietario, ricostruito a scopo didattico ("Proprietary — Reconstructed for educational purposes"). In questo repository non è incluso alcun file LICENSE separato.