Веб-сканер уязвимостей, созданный на C++17 и Qt 6, с графическим интерфейсом, CLI, настраиваемым сканированием и отчётами в формате JSON. Воссоздан в образовательных целях.
Сканер веб-уязвимостей, созданный на C++17 и Qt 6, с графическим и командным интерфейсами.
Этот репозиторий содержит реконструкцию SmartScanner 3.0.0 в образовательных целях. Он объединяет движок веб-сканирования, модули обнаружения уязвимостей и формирование отчётов в формате JSON.
robots.txt и карты сайта, настраиваемая глубина и область сканирования.Выполняемые модули зависят от конфигурации и ресурсов, обнаруженных в ходе сканирования.
| Компонент | Версия / подробности |
|---|
| CMake | 3.21 или новее |
| Компилятор | Совместимый с C++17 |
| Qt | 6.2 или новее |
| Модули Qt | Core, Gui, Widgets, Network, WebChannel, WebEngineWidgets, Xml |
| Ninja | Требуется включёнными скриптами сборки для Windows |
Приведённые ниже инструкции ориентированы на Windows с использованием инструментов сборки Visual Studio C++ и совместимого набора Qt MSVC. Точка входа GUI напрямую использует Windows API (windows.h), поэтому для сборки полного проекта на Linux или macOS требуются изменения.
Зависимости Qt GUI также необходимы при настройке проекта для CLI, поскольку оба исполняемых файла используют одну и ту же библиотеку.
Откройте терминал PowerShell с настроенной средой сборки Visual Studio, затем перейдите в корень репозитория. Настройте путь к Qt в соответствии с вашей установкой.
.\build.ps1 -QtPath "C:\Qt\6.8.3\msvc2022_64" -BuildType Release
.\deploy.ps1 -QtPath "C:\Qt\6.8.3\msvc2022_64"
Первый скрипт собирает проект с помощью Ninja. Второй копирует доступные библиотеки Qt, плагины и ресурсы WebEngine в каталог 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"
Сборка создаёт два исполняемых файла:
build/sms.exe: интерфейс командной строки.build/gui.exe: графический интерфейс.Каталог assets автоматически копируется рядом с исполняемыми файлами во время сборки. Храните его вместе с ними, так как он необходим для загрузки конфигурации по умолчанию.
.\build\gui.exe
В следующих примерах используется локальное тестовое приложение по адресу 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
| Параметр | Описание |
|---|---|
-u, --url <URL> | Добавить цель; можно повторять |
-f, --file <FILE> | Читать цели из файла |
-c, --config <FILE> | Загрузить конфигурацию JSON |
-o, --output <FILE> | Сохранить отчёт JSON |
-d, --crawl-depth <DEPTH> | Задать глубину сканирования: 0 отключает сканирование, 1 загружает только входные URL, а 2 или выше следует по ссылкам |
--no-discovery | Эквивалентно --crawl-depth 0 |
--no-follow | Эквивалентно --crawl-depth 1 |
-s, --scope <REGEX> | Определить область с помощью регулярного выражения |
-t, --test <TESTS> | Выбрать модули; можно повторять |
--auth-basic <user:pass> | Задать учётные данные HTTP Basic |
--proxy <URL> | Настроить прокси с явным портом |
--proxy-auth <user:pass> | Задать учётные данные прокси |
--user-agent <STRING> | Задать пользовательский User-Agent |
--exit-on <LEVEL> | Остановить сканирование при достижении порога серьёзности informational, low, medium или high |
CLI принимает прокси со схемами http:// и socks://. Схема socks5://, упомянутая в текущем тексте справки, отклоняется парсером.
При использовании --exit-on сканирование останавливается, когда проблема достигает запрошенного уровня серьёзности или превышает его. Однако текущая реализация возвращает код выхода 1 только в том случае, если находка точно соответствует запрошенному уровню серьёзности.
Файл assets/default-scan-config.json предоставляет конфигурацию по умолчанию: включённые модули, тайм-ауты HTTP, параллельные запросы, сканирование, исключения, аутентификацию и параметры форм.
Чтобы создать собственную конфигурацию:
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
Идентификаторы модулей, принимаемые --test, перечислены в разделе tests.scripts этого файла. Параметр --test заменяет выбор модулей из конфигурации.
Находки отображаются в консоли по мере выполнения сканирования. Параметр --output записывает отчёт JSON по завершении сканирования, содержащий:
Каталог назначения должен уже существовать. Существующий файл отчёта перезаписывается.
Дымовые тесты (*_smoke.cpp) можно включить с помощью 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
Текущая конфигурация CTest запускает все тесты без аргументов. Некоторые тесты, включая sms_cli_smoke, issuedb_smoke и httpheader_smoke, требуют аргумента и должны запускаться отдельно с соответствующими путями. Поэтому запуск полного набора CTest может сообщать о сбоях, вызванных этой конфигурацией.
Например, запустите тест CLI с помощью:
.\build\sms_cli_smoke.exe .\build\sms.exe
Тесты GUI требуют среды, способной инициализировать Qt и 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
Оригинальная документация описывает этот проект как проприетарный, реконструированный в образовательных целях («Proprietary — Reconstructed for educational purposes»). Отдельный файл LICENSE в этот репозиторий не включён.