
C++17とQt 6で構築されたWeb脆弱性スキャナー。GUI、CLI、設定可能なクローリング、JSONレポートを備える。教育目的で再構築されたもの。
C++17 と Qt 6 で構築された Web 脆弱性スキャナ。グラフィカルインターフェースとコマンドラインインターフェースを備えています。
このリポジトリには、教育目的で再構築された SmartScanner 3.0.0 が含まれています。Web クローリングエンジン、脆弱性検出モジュール、および 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 でプロジェクト全体をビルドするには修正が必要です。
両方の実行ファイルが同じライブラリを共有するため、CLI 用にプロジェクトを構成する場合も Qt GUI 依存関係が必要です。
Visual Studio ビルド環境が構成された PowerShell ターミナルを開き、リポジトリのルートに移動します。Qt のパスはご自身のインストールに合わせて調整してください。
.\build.ps1 -QtPath "C:\Qt\6.8.3\msvc2022_64" -BuildType Release
.\deploy.ps1 -QtPath "C:\Qt\6.8.3\msvc2022_64"
最初のスクリプトは Ninja でプロジェクトをビルドします。2 番目のスクリプトは、利用可能な 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"
ビルドにより 2 つの実行ファイルが生成されます:
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 ファイルは含まれていません。