Escáner de vulnerabilidades web construido con C++17 y Qt 6, con GUI, CLI, rastreo configurable e informes JSON. Reconstruido con fines educativos.
Un escáner de vulnerabilidades web construido con C++17 y Qt 6, que incluye interfaces gráfica y de línea de comandos.
Este repositorio contiene una reconstrucción de SmartScanner 3.0.0 con fines educativos. Combina un motor de rastreo web, módulos de detección de vulnerabilidades y generación de informes en JSON.
robots.txt y sitemaps, profundidad y alcance de rastreo configurables.Los módulos ejecutados dependen de la configuración y de los recursos descubiertos durante el escaneo.
| Componente | Versión / detalles |
|---|
| CMake | 3.21 o posterior |
| Compilador | Compatible con C++17 |
| Qt | 6.2 o posterior |
| Módulos de Qt | Core, Gui, Widgets, Network, WebChannel, WebEngineWidgets, Xml |
| Ninja | Requerido por los scripts de compilación incluidos para Windows |
Las instrucciones a continuación están dirigidas a Windows, utilizando las herramientas de compilación de Visual Studio C++ y un kit de Qt MSVC compatible. El punto de entrada de la GUI utiliza directamente la API de Windows (windows.h), por lo que compilar el proyecto completo en Linux o macOS requiere modificaciones.
Las dependencias de la GUI de Qt también son necesarias al configurar el proyecto para la CLI, ya que ambos ejecutables comparten la misma biblioteca.
Abra una terminal de PowerShell con el entorno de compilación de Visual Studio configurado y navegue hasta la raíz del repositorio. Ajuste la ruta de Qt para que coincida con su instalación.
.\build.ps1 -QtPath "C:\Qt\6.8.3\msvc2022_64" -BuildType Release
.\deploy.ps1 -QtPath "C:\Qt\6.8.3\msvc2022_64"
El primer script compila el proyecto con Ninja. El segundo copia las bibliotecas, plugins y recursos de WebEngine de Qt disponibles en el directorio 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 compilación produce dos ejecutables:
build/sms.exe: interfaz de línea de comandos.build/gui.exe: interfaz gráfica.El directorio assets se copia automáticamente junto a los ejecutables durante la compilación. Consérvelo junto a ellos, ya que es necesario para cargar la configuración predeterminada.
.\build\gui.exe
Los siguientes ejemplos utilizan una aplicación de prueba local en 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
| Opción | Descripción |
|---|---|
-u, --url <URL> | Añade un objetivo; puede repetirse |
-f, --file <FILE> | Lee los objetivos desde un archivo |
-c, --config <FILE> | Carga una configuración JSON |
-o, --output <FILE> | Guarda el informe JSON |
-d, --crawl-depth <DEPTH> | Establece la profundidad de rastreo: 0 desactiva el rastreo, 1 obtiene solo las URL de entrada y 2 o superior sigue los enlaces |
--no-discovery | Equivalente a --crawl-depth 0 |
--no-follow | Equivalente a --crawl-depth 1 |
-s, --scope <REGEX> | Define el alcance mediante una expresión regular |
-t, --test <TESTS> | Selecciona módulos; puede repetirse |
--auth-basic <user:pass> | Establece credenciales HTTP Basic |
--proxy <URL> | Configura un proxy con un puerto explícito |
--proxy-auth <user:pass> | Establece credenciales del proxy |
--user-agent <STRING> | Establece un User-Agent personalizado |
--exit-on <LEVEL> | Detiene el escaneo en el umbral de severidad informational, low, medium o high |
La CLI acepta proxies con los esquemas http:// y socks://. El esquema socks5:// mencionado en su texto de ayuda actual es rechazado por el analizador.
Con --exit-on, el escaneo se detiene cuando un problema alcanza o supera la severidad solicitada. Sin embargo, la implementación actual devuelve el código de salida 1 solo si un hallazgo coincide exactamente con la severidad solicitada.
El archivo assets/default-scan-config.json proporciona la configuración predeterminada: módulos habilitados, tiempos de espera HTTP, solicitudes paralelas, rastreo, exclusiones, autenticación y parámetros de formulario.
Para crear su propia configuración:
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
Los identificadores de módulos aceptados por --test se enumeran en tests.scripts dentro de este archivo. La opción --test reemplaza la selección de módulos de la configuración.
Los hallazgos aparecen en la consola a medida que avanza el escaneo. La opción --output escribe un informe JSON al finalizar el escaneo, que contiene:
El directorio de destino debe existir previamente. Un archivo de informe existente se sobrescribe.
Las pruebas de humo (*_smoke.cpp) se pueden habilitar 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
La configuración actual de CTest ejecuta todas las pruebas sin argumentos. Algunas pruebas, incluidas sms_cli_smoke, issuedb_smoke y httpheader_smoke, requieren un argumento y deben ejecutarse por separado con las rutas adecuadas. Por lo tanto, ejecutar la suite completa de CTest puede reportar fallos causados por esta configuración.
Por ejemplo, ejecute la prueba de la CLI con:
.\build\sms_cli_smoke.exe .\build\sms.exe
Las pruebas de la GUI requieren un entorno capaz de inicializar Qt y 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 documentación original describe este proyecto como propietario, reconstruido con fines educativos ("Proprietary — Reconstructed for educational purposes"). No se incluye ningún archivo LICENSE independiente en este repositorio.