AbhyudaySura001/Web-Application-Vulnerability-Scanner

GitHub: AbhyudaySura001/Web-Application-Vulnerability-Scanner

一款模块化的 Python Web 漏洞扫描器,自动爬取目标站点并检测 SQL 注入、反射型 XSS、目录穿越等 OWASP Top 10 漏洞,生成附带证据和修复建议的结构化报告。

Stars: 0 | Forks: 0

# Web 应用漏洞扫描器 一个定制的、模块化的 Web 应用漏洞扫描器,使用 Python 构建,旨在用于攻击安全学习、渗透测试实践和漏洞赏金技能提升。它会爬取目标 Web 应用,映射其攻击面,并(在整个开发路线图中)测试最常见的 OWASP Top 10 漏洞类别,生成具有可操作性的报告。 ## 为什么会有这个项目 本仓库展示了在以下方面的实际动手能力: - Web 应用安全评估 - HTTP 协议操作与自动化 - 攻击面映射与爬取 - Payload 构造与漏洞检测逻辑(路线图) - 使用简洁、经过测试且模块化的 Python 进行安全测试自动化 它是根据为期五周的开发路线图逐步构建的,因此每个组件都很小巧、经过充分测试,并且可以独立进行审查——这正是开发真实安全工具的方式。 ## 状态 — v1.0,所有 5 个路线图阶段均已完成 ✅(115 项测试通过) 已完成端到端验证:在一个已知基准事实的受控基准目标上,扫描器获得了 **精确率 1.000 / 召回率 1.000 / F1 1.000** 的成绩,且零误报。参见 [`docs/VALIDATION.md`](docs/VALIDATION.md) 和 [`docs/accuracy_report.md`](docs/accuracy_report.md)。 **第 1 周 — 爬虫与攻击面映射。** 只读发现:爬取应用程序并将每个 URL、表单和参数映射到 `SiteMap` 中。 | 功能 | 状态 | |---|---| | 递归(广度优先)爬取 | ✅ | | URL 规范化与去重 | ✅ | | 范围控制(强制执行范围内的域名) | ✅ | | 表单与输入字段提取 | ✅ | | 查询与表单参数发现(攻击面) | ✅ | | 站点地图数据结构 + JSON 输出 | ✅ | | 安全控制:超时、速率限制、重试、深度/页面限制 | ✅ | **第 2 周 — SQL 注入检测。** 消费 `SiteMap`,测试每个注入点,并发出结构化的 `Finding`。 | 功能 | 状态 | |---|---| | 基于错误的检测(DBMS 错误特征) | ✅ | | 基于布尔的检测(差分响应比较) | ✅ | | 基于时间的盲注检测(计时 + 零延迟控制) | ✅ | | 置信度评分(Low → Confirmed),与严重程度分离 | ✅ | | 误报缓解(基线差异比对、数字掩码、控制请求) | ✅ | | 惰性、只读的 Payload 库(无破坏性 SQL) | ✅ | | 包含证据和修复建议的发现模型(可直接用于报告) | ✅ | **第 3 周 — 反射型 XSS 与目录穿越。** 在共享的注入基础上增加两个检测器,外加一个 Payload 编码工具包。 | 功能 | 状态 | |---|---| | 反射型 XSS:反射探测 + 上下文检测(HTML / 属性 / JS) | ✅ | | 通过未转义特征反射进行 XSS 验证(感知编码) | ✅ | | Payload 编码器(URL、双重 URL、HTML 实体/十进制、JS Unicode、大小写混合) | ✅ | | 带有真实文件内容指纹的目录穿越 / LFI | ✅ | | 穿越误报防护(基线特征差异比对) | ✅ | | 共享的 `BaseInjectionScanner`(一个引擎,三个检测器) | ✅ | **第 4 周 — 安全头与报告。** 头部分析,以及将每个 `Finding` 转化为可分享报告的引擎。 | 功能 | 状态 | |---|---| | 安全头分析(CSP、HSTS、X-Frame-Options、X-Content-Type-Options、Referrer-Policy、Permissions-Policy) | ✅ | | 信息泄露检查(X-Powered-By) | ✅ | | CVSS 风格评分 + 定性评级 | ✅ | | 综合风险摘要(按严重程度统计、总体评级) | ✅ | | 带样式的独立 **HTML 报告**(Payload 已被安全转义) | ✅ | | 结构化的 **JSON 报告** | ✅ | 渲染示例见 [`sample_report.html`](sample_report.html)。 **第 5 周 — 验证与准确性。** 可重现的准确性测试套件,以及实战实验室方法论。 | 功能 | 状态 | |---|---| | 内置的故意存在漏洞的基准测试应用(已知基准事实) | ✅ | | 基于基准事实测量精确率 / 召回率 / F1 | ✅ | | 自动化准确性报告(Markdown + JSON) | ✅ | | 将准确性验证集成到测试套件中(CI 保障) | ✅ | | DVWA / WebGoat / Juice Shop 实验室方法论 + 结果模板 | ✅ | | 已记录的局限性 + 优先优化建议 | ✅ | ## 架构 ``` ┌───────────────┐ seed URL ──► │ ScannerConfig │ (timeouts, scope, limits, logging) └───────┬───────┘ │ ┌───────▼────────┐ enqueue in-scope links (BFS) │ Crawler │ ◄──────────────────────────────┐ │ (requests) │ │ └───┬────────┬───┘ │ GET HTML│ │ ParsedPage │ ▼ ▼ │ ┌────────────┐ ┌──────────────┐ links/params ┌────┴───────┐ │ parser │ │ UrlManager │ ───────────────►│ frontier │ │ (bs4/lxml) │ │ scope+dedup │ │ (deque) │ └─────┬──────┘ └──────┬───────┘ └────────────┘ │ │ forms+inputs attack surface └────────┬───────┘ ▼ ┌───────────┐ │ SiteMap │ pages, forms, parameters, errors └───────────┘ ``` ### 模块职责 | 模块 | 职责 | |---|---| | `scanner/config.py` | 所有可调参数(范围、超时、速率限制、深度/页面限制)的唯一真理来源。在构造时验证输入。 | | `scanner/logger.py` | 结构化日志记录工厂 — 跨模块提供一致、可审计的输出。 | | `scanner/crawler/url_manager.py` | URL **规范化**(去重键)、**范围**强制执行、**去重**、BFS **边界**以及**参数**捕获。 | | `scanner/crawler/parser.py` | 纯函数 HTML 解析 → 链接、表单和输入。没有网络 I/O,因此测试起来非常简单。 | | `scanner/crawler/crawler.py` | BFS 爬取引擎;将 session、parser 和 URL manager 串联在一起并生成 `SiteMap`。 | | `scanner/scanners/findings.py` | 所有检测器使用的共享 `Finding` 模型(严重程度、置信度、证据、修复建议)。 | | `scanner/scanners/injection.py` | `BaseInjectionScanner`:注入点构造、HTTP 发送、所有检测器共享的扫描/去重循环。 | | `scanner/scanners/payload_library.py` | 精选的惰性 Payload:SQLi(错误/布尔/时间)+ 数据库错误特征、上下文感知的 XSS、穿越 Payload + 文件特征。 | | `scanner/scanners/payload_encoder.py` | 标记生成 + URL/HTML/JS 编码器,用于反射测试和过滤器绕过。 | | `scanner/scanners/response_analyzer.py` | 纯 SQLi 响应比较引擎 — 检测大脑。无网络 I/O。 | | `scanner/scanners/sqli_scanner.py` | SQL 注入检测器。 | | `scanner/scanners/xss_scanner.py` | 反射型 XSS 检测器(反射探测 → 上下文 → 验证)。 | | `scanner/scanners/traversal_scanner.py` | 目录穿越 / LFI 检测器。 | | `scanner/scanners/header_analyzer.py` | 安全头分析(纯 `analyze_headers` + HTTP 包装器)。 | | `scanner/reporting/scoring_engine.py` | CVSS 风格评分和聚合 `RiskSummary`。 | | `scanner/reporting/report_generator.py` | HTML + JSON 报告渲染(转义所有动态内容)。 | | `main.py` | 命令行入口点。 | ### SQL 注入检测方法 扫描器从爬取结果中提取**注入点**(每个 GET 查询参数和每个表单字段各一个),为每个注入点捕获**基线**响应,然后运行多达三种技术: | 技术 | 判定方式 | 误报防护 | |---|---|---| | **基于错误** | Payload 引发基线中不存在的 DBMS 错误特征 | 忽略基线中已有的错误 | | **基于布尔** | 发送一个永真条件和一个永假条件;当 TRUE ≈ 基线但 FALSE 明显不同时触发 | 要求有*差异*,并带有数字串掩码,这样时间戳/计数器就不会被识别为变化 | | **基于时间的盲注** | 延迟 Payload(例如 `SLEEP(5)`)使响应明显变慢 | **零延迟控制**请求必须很快 — 排除天生缓慢的 endpoint | `severity`(严重程度)和 `confidence`(置信度)分开记录,因此该工具可以进行激进的测试,同时如实进行报告。 ### 反射型 XSS 检测方法 1. **反射探测** — 注入一个唯一的随机标记并检查它是否出现在响应中。立即跳过无反射的参数(不浪费 Payload)。 2. **上下文检测** — 检查反射标记周围的字符以对上下文进行分类:`