ajmalajmal9960-png/web-vuln_scanner

GitHub: ajmalajmal9960-png/web-vuln_scanner

一款全栈实时 Web 漏洞扫描器,支持离线演示与实网检测并生成按严重程度分级的报告。

Stars: 0 | Forks: 0

# Sentinel — Web 漏洞扫描器(小型项目) 一款全栈、实时的 Web 漏洞扫描器,覆盖 SQL 注入、跨站脚本攻击 (XSS)、CSRF、不安全的 HTTP 头、不安全的 Cookie 以及服务器信息泄露,并内置**离线演示/预览模式**,让您无需实际目标即可立即查看完整的报告。 ## 本版本的新特性 - **更准确的检测** - 扩展了针对 MySQL、PostgreSQL、Oracle、MSSQL、SQLite 和 MongoDB 的 SQL 错误特征 - 基于时间的盲注现在会与该特定表单的**实时基准响应时间**进行比较,而不是使用固定阈值,从而大幅减少在天然缓慢的 endpoint 上的误报 - XSS 检测使用**每个请求唯一的 canary token**,因此匹配项绝对不会与无关的页面内容混淆 - 新增检查项:**不安全的 Cookie 标志**(HttpOnly / Secure / SameSite)和**服务器/版本信息泄露**(`Server`、`X-Powered-By` 等) - 针对确认存在数据库错误特征的 SQL 注入,新增了 **Critical(严重)** 危害级别 - **实时爬取** — 受限、礼貌且仅限同域的爬取(深度为 1,最多 6 个页面),现在可以测试真实站点中多个页面(登录、搜索、联系等)上的表单,而不仅仅是您粘贴的那一个 URL - **URL 参数测试** — 如果目标 URL 本身带有查询参数(`?q=...`),也会直接对其进行测试,而不仅仅是 `
` 元素 - **离线演示/预览模式** — 一个“尝试演示扫描”按钮会对内置的模拟数据集(基于 WebGoat/NodeGoat 建模)运行*完全相同*的检测函数,因此您随时都可以展示一份完整且正确的报告,且完全没有网络依赖 - **不再需要 flask-cors 依赖** — CORS 头现在通过三行代码手动添加,移除了一个可能会导致安装失败并破坏整个应用的外部包 ## 如何对应您的 10 点指导意见 | # | 指导意见 | 实现位置 | |---|---|---| | 1 | 定义范围(SQLi、XSS、CSRF、headers) | `backend/scanner.py` — payload 列表,`SECURITY_HEADERS`,`INFO_DISCLOSURE_HEADERS` | | 2 | 选择目标 URL(仅限测试站点) | 在仪表盘中输入,默认为本地 WebGoat/NodeGoat;演示模式使用内置数据集 | | 3 | 通过 HTTP 库收集请求/响应数据 | `scanner.get_page` / `submit_form` / `discover_pages` 中的 `requests` | | 4 | 预处理输入(参数/表单) | `scanner.extract_forms`,`scanner.extract_url_params`(使用 `BeautifulSoup`) | | 5 | 基于规则的漏洞检测 | `check_sql_injection`,`check_xss`,`check_csrf`,`check_headers`,`check_cookies`,`check_info_disclosure` | | 6 | 模拟攻击 payload | `SQLI_PAYLOADS`,`XSS_PAYLOAD_VARIANTS` | | 7 | 分析服务器响应 | 错误特征正则匹配、基于基准的计时、canary token 反射 | | 8 | 生成严重程度报告 | `run_full_scan` 将发现结果按 Critical → High → Medium → Low 排序 | | 9 | 存储结果 | `backend/database.py` → SQLite (`scans.db`),标记为 `live` 或 `demo` | | 10 | 手动验证 | 仪表盘会显示确切的 payload + 证据 + 爬取的页面,方便您手动复核 | ## 技术栈 - **后端:** Python 3、Flask、`requests`、`BeautifulSoup4`(不需要 flask-cors) - **前端:** HTML、CSS、原生 JavaScript(fetch API) — 由 Flask 提供服务,无需构建步骤 - **数据库:** 默认使用 SQLite(零配置,单文件)。MySQL 可作为直接替换方案 — 见第 6 节。 ## 项目结构 ``` webvuln-scanner/ ├── backend/ │ ├── app.py # Flask API + serves frontend + demo-scan endpoint │ ├── scanner.py # Live detection engine (SQLi/XSS/CSRF/headers/cookies/crawling) │ ├── demo_data.py # Offline preview dataset, reuses scanner.py's own detectors │ ├── database.py # SQLite persistence (tags scans as live/demo) │ └── requirements.txt ├── frontend/ │ ├── index.html │ ├── style.css │ └── script.js └── README.md ``` ## 1. 立即尝试 — 预览无需任何设置 点击仪表盘上的 **“尝试演示扫描(离线预览)”**。这会针对基于 WebGoat/NodeGoat 行为建模的固定模拟数据集,运行真实的检测引擎(`scanner.py` 自身的签名列表和匹配逻辑),让您在不到一秒的时间内获得一份完整、准确且按严重程度分级的报告,非常适合用于项目展示或在进行实时扫描前向导师展示。 ## 2. 设置安全的实时扫描目标 ``` # OWASP WebGoat (Java) — https://github.com/WebGoat/WebGoat docker run -p 8080:8080 -p 9090:9090 webgoat/webgoat # OWASP NodeGoat (Node.js/MongoDB) — https://github.com/OWASP/NodeGoat git clone https://github.com/OWASP/NodeGoat.git cd NodeGoat docker-compose up ``` WebGoat 将位于 `http://localhost:8080/WebGoat`,NodeGoat 通常位于 `http://localhost:4000`。将基础 URL 粘贴到仪表盘中 — 扫描器将自动爬取几个链接页面,并测试它发现的每一个表单和 URL 参数。 ## 3. 运行项目 ``` cd webvuln-scanner/backend python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install -r requirements.txt python app.py ``` 打开 **http://127.0.0.1:5000** — 首先尝试演示扫描,然后粘贴您的 WebGoat/NodeGoat URL 并点击 **Run scan**。结果、严重程度摘要和历史记录都将存储在 `backend/scans.db` 中,并在 UI 中实时显示。 ## 4. 使用 MySQL 替代 SQLite(可选) 如果您的课程特别要求使用 MySQL: ``` pip install mysql-connector-python ``` 替换 `database.py` 中的 `get_connection()`: ``` import mysql.connector def get_connection(): return mysql.connector.connect( host="localhost", user="root", password="yourpassword", database="vuln_scanner" ) ``` 将 SQL 语句中的 `?` 占位符更改为 `%s`(MySQL 的参数风格),并首先手动创建 `vuln_scanner` 数据库和 `scans` 表(列与 `init_db()` 中的 `CREATE TABLE` 相同,外加 `mode` 列)。 ## 5. 数据集与参考资料链接 **预览/演示数据集:** `backend/demo_data.py` — 基于 OWASP WebGoat 和 NodeGoat 行为建模的模拟请求/响应对,通过与实时扫描器相同的检测函数运行。 **实时测试目标:** - OWASP WebGoat — https://github.com/WebGoat/WebGoat - OWASP NodeGoat — https://github.com/OWASP/NodeGoat **参考资料:** - OWASP Top 10 — https://owasp.org/www-project-top-ten/ - Nikto(用于对比发现结果的参考扫描器) — https://github.com/sullo/nikto - OWASP ZAP(参考扫描器) — https://github.com/OWASP/owasp-zap ## 6. 进一步扩展(非常适合作为报告中的“未来范围”部分) - 添加更多 payload 系列(LFI/RFI、命令注入、开放重定向) - 将爬取深度增加到超过 1 跳,并设置已访问页面上限 - 添加经过身份验证的扫描(会话 Cookie / 登录流程) - 从扫描历史记录中导出 PDF/CSV 报告 - 为大型站点添加速率限制/并发控制 ## 7. 将此项目上传到 GitHub 在 `webvuln-scanner` 文件夹内: ``` # 1. 初始化 git(仅一次) git init # 2. .gitignore 已经排除了 venv/DB 文件 # 3. 暂存并提交所有内容 git add . git commit -m "Initial commit: Sentinel web vulnerability scanner minor project" # 4. 在 github.com 上创建一个新的空仓库(无 README/license, # 以免与本地已有的内容冲突),然后: git branch -M main git remote add origin https://github.com//.git git push -u origin main ``` 之后,任何未来的更改只需: ``` git add . git commit -m "Describe what changed" git push ``` **提示:** 首先在 github.com → "New repository" → 命名 → **不要**勾选 "Add a README" → 将其显示的 HTTPS URL 复制到上面的 `git remote add origin ...` 命令中。
标签:CISA项目, DOE合作, Web安全, 多模态安全, 安全测试, 攻击性安全, 数据可视化, 蓝队分析