Scanner de vulnerabilidades web criado com C++17 e Qt 6, com GUI, CLI, crawling configurável e relatórios JSON. Reconstruído para fins educacionais.
Um scanner de vulnerabilidades web construído com C++17 e Qt 6, com interfaces gráfica e de linha de comando.
Este repositório contém uma reconstrução do SmartScanner 3.0.0 para fins educacionais. Ele combina um mecanismo de rastreamento web, módulos de detecção de vulnerabilidades e relatórios em JSON.
robots.txt e sitemap, profundidade e escopo de rastreamento configuráveis.Os módulos executados dependem da configuração e dos recursos descobertos durante o rastreamento.
| Componente | Versão / detalhes |
|---|
| CMake | 3.21 ou posterior |
| Compilador | Compatível com C++17 |
| Qt | 6.2 ou posterior |
| Módulos Qt | Core, Gui, Widgets, Network, WebChannel, WebEngineWidgets, Xml |
| Ninja | Necessário para os scripts de build do Windows incluídos |
As instruções abaixo são voltadas para Windows, usando as ferramentas de build C++ do Visual Studio e um kit Qt MSVC compatível. O ponto de entrada da GUI usa a API do Windows diretamente (windows.h), portanto compilar o projeto completo no Linux ou macOS exige modificações.
As dependências da GUI do Qt também são necessárias ao configurar o projeto para a CLI, pois ambos os executáveis compartilham a mesma biblioteca.
Abra um terminal PowerShell com o ambiente de build do Visual Studio configurado e navegue até a raiz do repositório. Ajuste o caminho do Qt para corresponder à sua instalação.
.\build.ps1 -QtPath "C:\Qt\6.8.3\msvc2022_64" -BuildType Release
.\deploy.ps1 -QtPath "C:\Qt\6.8.3\msvc2022_64"
O primeiro script compila o projeto com Ninja. O segundo copia as bibliotecas, plugins e recursos do WebEngine do Qt disponíveis para o diretório 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"
A compilação produz dois executáveis:
build/sms.exe: interface de linha de comando.build/gui.exe: interface gráfica.O diretório assets é copiado automaticamente junto aos executáveis durante a compilação. Mantenha-o junto deles, pois é necessário para carregar a configuração padrão.
.\build\gui.exe
Os exemplos a seguir usam uma aplicação de teste local em 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
| Opção | Descrição |
|---|---|
-u, --url <URL> | Adiciona um alvo; pode ser repetida |
-f, --file <FILE> | Lê alvos de um arquivo |
-c, --config <FILE> | Carrega uma configuração JSON |
-o, --output <FILE> | Salva o relatório JSON |
-d, --crawl-depth <DEPTH> | Define a profundidade de rastreamento: 0 desativa o rastreamento, 1 busca apenas as URLs de entrada e 2 ou mais segue links |
--no-discovery | Equivalente a --crawl-depth 0 |
--no-follow | Equivalente a --crawl-depth 1 |
-s, --scope <REGEX> | Define o escopo usando uma expressão regular |
-t, --test <TESTS> | Seleciona módulos; pode ser repetida |
--auth-basic <user:pass> | Define credenciais HTTP Basic |
--proxy <URL> | Configura um proxy com porta explícita |
--proxy-auth <user:pass> | Define credenciais do proxy |
--user-agent <STRING> | Define um User-Agent personalizado |
--exit-on <LEVEL> | Interrompe o rastreamento no limite de severidade informational, low, medium ou high |
A CLI aceita proxies usando os esquemas http:// e socks://. O esquema socks5:// mencionado em seu texto de ajuda atual é rejeitado pelo parser.
Com --exit-on, o rastreamento é interrompido quando um problema atinge ou excede a severidade solicitada. No entanto, a implementação atual retorna o código de saída 1 apenas se uma descoberta corresponder exatamente à severidade solicitada.
O arquivo assets/default-scan-config.json fornece a configuração padrão: módulos habilitados, timeouts HTTP, requisições paralelas, rastreamento, exclusões, autenticação e parâmetros de formulário.
Para criar sua própria configuração:
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
Os identificadores de módulos aceitos por --test estão listados em tests.scripts neste arquivo. A opção --test substitui a seleção de módulos da configuração.
As descobertas aparecem no console conforme o rastreamento avança. A opção --output grava um relatório JSON ao final do rastreamento, contendo:
O diretório de destino já deve existir. Um arquivo de relatório existente é sobrescrito.
Os smoke tests (*_smoke.cpp) podem ser habilitados com 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
A configuração atual do CTest executa todos os testes sem argumentos. Alguns testes, incluindo sms_cli_smoke, issuedb_smoke e httpheader_smoke, exigem um argumento e devem ser executados separadamente com os caminhos apropriados. Portanto, executar a suíte completa do CTest pode reportar falhas causadas por essa configuração.
Por exemplo, execute o teste da CLI com:
.\build\sms_cli_smoke.exe .\build\sms.exe
Os testes da GUI exigem um ambiente capaz de inicializar o Qt e o 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
A documentação original descreve este projeto como proprietário, reconstruído para fins educacionais ("Proprietary — Reconstructed for educational purposes"). Nenhum arquivo LICENSE separado está incluído neste repositório.