omarmohamedhassan24/Web_vulnerability_scanner

GitHub: omarmohamedhassan24/Web_vulnerability_scanner

一款基于 Python 的教育型 Web 漏洞扫描器,通过自动爬取和 payload 注入检测 XSS、SQL 注入及缺失安全标头,并附带靶场应用供安全练习。

Stars: 1 | Forks: 1

# Web 漏洞扫描器 一个基于 Python 命令行的 Web 漏洞扫描器,作为大学网络安全项目构建。它会爬取目标站点,将受控的测试 payload 注入到发现的输入框中,分析响应以寻找漏洞证据,并生成带有颜色的 CLI 摘要和样式化的 HTML/JSON 报告。 该扫描器配备了一个故意设计存在漏洞的 Flask “目标应用”,以便在一个安全、独立的环境中演练每一种检测技术。 ## 检测范围 | 模块 | OWASP 2021 | |---|---| | 跨站脚本攻击 (XSS,反射型) | A03 — Injection | | SQL 注入 (基于报错) | A03 — Injection | | 缺失的安全标头 (CSP, X-Frame-Options, HSTS, X-Content-Type-Options, Referrer-Policy) | A05 — Security Misconfiguration | ## 安装 ``` python -m venv .venv .venv\Scripts\activate pip install -r requirements.txt ``` ## 用法 在一个终端中启动故意设计存在漏洞的 Flask 应用: ``` cd target_app python app.py ``` 它运行在 `http://localhost:5000`。 在另一个终端中运行扫描器: ``` # 完整扫描 python scanner.py --url http://localhost:5000 # 仅特定模块 python scanner.py --url http://localhost:5000 --modules xss sqli # 自定义输出和计时 python scanner.py --url http://localhost:5000 --output reports/demo.html --timeout 10 --delay 0.3 ``` 打开生成的报告: ``` start reports\scan_report.html ``` ### CLI 标志 | 标志 | 默认值 | 用途 | |---|---|---| | `--url` | (必填) | 目标 URL。必须是 `localhost`、`127.0.0.1` 或白名单中的测试域名。 | | `--output` | `reports/scan_report.html` | HTML 报告路径。JSON 文件将使用相同的主文件名存放在同目录下。 | | `--timeout` | `5` | 每次请求的超时时间(秒)。 | | `--delay` | `0.0` | 请求之间的休眠时间(秒)(针对公共目标的礼貌策略)。 | | `--modules` | 全部 | 模块子集,可选 `headers`、`xss`、`sqli`。 | ## 项目结构 ``` scanner.py CLI entry point modules/ crawler.py BFS crawler — extracts URLs and forms headers.py Missing-security-headers check xss.py Reflected XSS scanner (threaded, context-aware) sqli.py Error-based SQL injection scanner (threaded) reporter.py HTML (Jinja2) + JSON report generation utils.py load_payloads, CVSS-lite scoring config.py Shared DELAY / TIMEOUT (set from CLI) payloads/ xss_payloads.txt sqli_payloads.txt reports/ report_template.html Jinja2 HTML template scan_report.html (generated) scan_report.json (generated) target_app/ app.py Deliberately vulnerable Flask app ``` ## 技术栈 - Python 3 - 使用 `requests` 处理 HTTP - 使用 `beautifulsoup4` 解析 HTML - 使用 `jinja2` 渲染 HTML 报告 - 使用 `colorama` 提供 CLI 颜色 - 使用 `concurrent.futures.ThreadPoolExecutor` 进行并行表单扫描 - 使用 `flask` 作为内置的漏洞目标应用 ## 包含的额外功能 - **多线程** — `scan_xss` 和 `scan_sqli` 通过 `ThreadPoolExecutor` 在各个表单间并发执行。 - **CVSS-lite 风险评分** — 每份报告都包含一个综合的 0–10 严重程度评分(`Critical=9, High=7, Medium=5, Low=3`,根据发现的结果取平均值)。 ## 超出范围(刻意未实现) 本次提交的重点是上述三个模块。以下内容在项目计划中有所描述,但尚未构建: - **开放重定向** (A01 — Broken Access Control) - **目录遍历** (A01 — Broken Access Control) - **敏感路径暴露探测** (A05 — Security Misconfiguration;在计划中与目录遍历模块打包在一起) 因此,CLI 的 `--modules` 标志仅公开了实际存在的模块。 ## 已知限制 - **XSS 检测** 具有反射上下文感知能力(通过 `_payload_executes_in_html`),但并非完整上下文感知 —— 它不对属性边界、JS 字符串上下文或 DOM sink 进行建模。误报被最小化,但并未完全消除。 - **SQLi 检测** 仅限于基于报错的检测。屏蔽原始异常的框架(Spring Data, Django ORM, 加固过的 Flask)即使存在盲注/时间盲注也会显示为无漏洞。 - **爬虫不执行 JavaScript** — 单页应用将无法被充分探测。 ## 免责声明 本工具作为大学网络安全课程的一部分,仅出于教育目的而构建。 - 仅扫描您拥有或获得 **明确书面许可** 进行测试的系统。 - 在大多数国家,未经许可扫描任何系统都是违法的。 - 内置的 Flask 应用仅供练习使用。 - 扫描器包含一个域名白名单(`localhost`、`127.0.0.1`、`testphp.vulnweb.com`),并拒绝扫描其他任何目标。
标签:CISA项目, Python, Web安全, 加密, 无后门, 漏洞扫描器, 蓝队分析