MisbahSangi/VulneraX

GitHub: MisbahSangi/VulneraX

一个基于 FastAPI 的轻量级 Web 漏洞扫描器,通过浏览器仪表盘提供实时进度展示、多类安全检查和 PDF 报告生成。

Stars: 0 | Forks: 0

# VulneraX - Web 漏洞扫描器 VulneraX 是一个基于 FastAPI 的 Web 漏洞扫描器,配备浏览器仪表盘。它扫描目标 URL,运行多项安全检查,显示实时进度,存储扫描历史,并生成 PDF 报告。 ## 本项目的作用 - 提供用于运行扫描和检查结果的 Web 仪表盘。 - 验证用户提供的目标 URL,并阻止对 localhost/私有 IP 的扫描。 - 发现内部链接并扫描已发现的页面。 - 运行多项漏洞检查(XSS、SQLi、Headers、CSRF、TLS 等)。 - 将扫描进度和日志流式传输到前端。 - 将发现的结果存储在文本日志中。 - 生成结构化的 PDF 报告。 - 通过过滤器、图表、趋势和导出选项对发现的结果进行可视化展示。 ## 项目结构 ``` project_root/ main.py config/ settings.json reports/ vulnerability_log.txt vulnerability_report.pdf scanner_core/ __init__.py crawler.py logger.py payloads.py pdf_exporter.py remediation_advice.py scanner.py static/ main.js templates/ index.html ``` ## 端到端流程(从开始到结束) 1. 应用启动 (`main.py`) - FastAPI 应用启动。 - 创建/确保 `reports/` 目录存在。 - 挂载静态文件和 Jinja 模板。 - 初始化内存中的扫描状态: - 用于实时进度和日志的 `SCAN_STATE`。 - 用于最新发现和摘要的 `LATEST_RESULT`。 2. 用户打开仪表盘 (`GET /`) - 渲染 `templates/index.html`。 - 从配置中注入默认启用的检查项。 - 从文本日志中注入最近的扫描历史。 - 从内存中注入上一次已知的扫描结果。 3. 用户开始扫描 (`POST /scan`) - 前端发送 URL + 启用的检查项。 - 后端验证并规范化 URL。 - 拒绝 localhost/私有/内部主机。 - 重置扫描状态。 - 启动后台扫描任务。 4. 后台扫描器运行 (`scanner_core/scanner.py`) - 加载启用的检查项。 - 从目标中发现内部链接。 - 按顺序扫描发现的链接。 - 发出进度消息和阶段更新。 - 汇总发现的结果并构建摘要。 - 将扫描摘要写入日志文件。 - 写入详细的漏洞条目。 - 生成 PDF 报告。 5. 前端轮询实时状态 (`GET /scan-status`) - 进度条更新。 - 当前检查阶段可视化更新。 - 实时扫描日志出现在 UI 中。 - 显示估计的剩余时间。 6. 扫描完成 - 状态变为 `done`。 - 前端使用 `GET /last-results` 刷新结果。 - 发现结果表格、图表和历史记录更新。 - 触发可选的完成提示音/通知。 7. 报告下载 (`GET /download-report`) - 如果可用,则提供 `reports/vulnerability_report.pdf`。 ## 后端 API 端点 - `GET /` - 返回仪表盘页面。 - `POST /scan` - 启动后台扫描。 - Body 字段包括 `target_url` 以及用于检查项的复选框字段。 - `GET /scan-status` - 返回 `{status, progress, phase, log_lines, target}`。 - `POST /cancel-scan` - 将内存中的状态重置为空闲/已取消(UI 级别的取消)。 - `GET /last-results` - 返回上一次的目标、发现结果、摘要和历史记录。 - `GET /download-report` - 返回生成的 PDF 报告。 ## 扫描器检查项及其工作原理 ### 1) XSS - 查找页面上的表单。 - 提交来自 `payloads.py` 的 payloads。 - 标记响应正文中出现的反射 payload。 ### 2) SQL 注入 - 通过表单提交 SQLi payloads。 - 在响应中查找已知的 SQL 错误文本。 ### 3) 安全 Headers - 请求 headers 并检查: - Content-Security-Policy - X-Content-Type-Options - X-Frame-Options - Referrer-Policy - Strict-Transport-Security - 缺少 headers 将产生发现结果。 ### 4) CSRF - 扫描 POST 表单。 - 标记没有类似 token 输入名称的表单。 ### 5) 目录列表 - 对于以斜杠结尾的路径,检查页面内容中是否存在目录索引标记。 ### 6) 弱 TLS / 不安全传输 - HTTP scheme -> 不安全传输发现。 - 无 HSTS 的 HTTPS scheme -> 弱 TLS 发现。 ### 7) 开放重定向 (基于模式) - 检查发现的链接和查询字符串中是否存在类似重定向的参数模式。 ### 8) 敏感信息泄露 - 扫描响应正文以查找危险关键字(password、token、private key、traceback 等)。 ### 9) 点击劫持 - 标记缺少 `X-Frame-Options` 以及缺少 CSP `frame-ancestors` 的情况。 ### 10) Cookie 安全 - 解析 `Set-Cookie` header。 - 标记缺少 `HttpOnly` 以及(在 HTTPS 上)缺少 `Secure` 的情况。 ## 前端功能 - 具有本地持久性的浅色/深色主题切换。 - 扫描控制和检查项选择 UI。 - 实时进度、阶段网格和日志。 - 严重性摘要卡片。 - 发现结果表格包含: - 排序 - 过滤 - 搜索 - 分页 - 证据展开 - 修复建议 - 行选择和 JSON 导出 - 图表: - 按类型的圆环图 - 按类型堆叠的严重性图 - 扫描历史的趋势图 - 最近扫描面板。 ## 日志记录和报告 - `scanner_core/logger.py` - 写入详细的漏洞块。 - 写入用于历史记录的单行扫描摘要。 - `scanner_core/pdf_exporter.py` - 构建包含摘要、详细信息和可选原始日志的 PDF。 - `scanner_core/remediation_advice.py` - 为每种漏洞类型提供描述、修复步骤和默认严重级别。 ## 配置 在 `config/settings.json` 中定义: - `crawler.max_pages` - `crawler.max_depth` - `crawler.request_timeout` - `scan.max_scan_time_seconds` - `checks.*` 默认检查项开关 ## 当前缺陷(重要)以及如何完善它们 ### 1) 取消仅限于 UI 层面,并非真正的任务取消 缺陷: - `POST /cancel-scan` 会重置状态,但正在运行的后台扫描可以在服务器端继续执行。 如何完善: - 添加在每个扫描循环和请求调用边界内检查的协作取消 token/event。 - 通过 ID 跟踪扫描作业并安全停止活动作业。 - 更新 API 以返回作业 ID 并允许定向取消。 ### 2) 开放重定向检查较弱,可能会遗漏或过度标记 缺陷: - 当前逻辑使用简单的 URL/查询模式启发式方法。 如何完善: - 从内部端点解析已知的重定向参数。 - 使用受控的外部 URL 主动测试重定向行为。 - 验证实际的 Location header/domain 转换。 - 添加误报抑制逻辑。 ### 3) XSS 和 SQLi 检查属于基本的启发式检查 缺陷: - 反射/错误字符串检测较为浅显,可能会遗漏真实问题或标记无害情况。 如何完善: - 添加上下文感知 payloads (HTML、attribute、JS context)。 - 添加响应差异和编码分析。 - 添加时间分析和特定于 DB 的 SQLi 特征。 - 添加置信度评分 (高/中/低置信度)。 ### 4) 爬取深度有限且无 JS 渲染 缺陷: - 扫描器基于 requests/BeautifulSoup;会遗漏 JS 渲染的路由和动态表单。 如何完善: - 集成可选的无头浏览器爬取模式 (Playwright)。 - 合并静态和动态路由发现。 - 添加 robots/sitemap 解析。 ### 5) 内存中的运行时状态对多 worker 并不安全 缺陷: - `SCAN_STATE` 和 `LATEST_RESULT` 是进程内存全局变量。 如何完善: - 将状态移至 Redis 或 DB。 - 添加按用户/按作业的状态隔离。 - 支持并发扫描和持久化进度跟踪。 ### 6) 日志格式混杂且难以可靠解析 缺陷: - 同一个文本文件中包含摘要行和详细块。 如何完善: - 将规范化的发现结果存储在结构化的 JSON/DB 表中。 - 将人类可读的日志作为派生输出保留。 - 添加报告版本控制和 schema。 ### 7) 扫描端点没有身份验证/速率限制 缺陷: - 任何可以访问应用的人都可以触发扫描。 如何完善: - 添加身份验证 (JWT/session)、RBAC 和 API key 支持。 - 添加请求节流和配额。 - 添加扫描器操作的审计日志。 ### 8) 缺少依赖清单 缺陷: - 工作区中没有 `requirements.txt` 或 `pyproject.toml`。 如何完善: - 添加固定版本的依赖文件和安装说明。 - 添加可重现的环境 (venv + lockfile)。 ### 9) 没有自动化测试 缺陷: - 没有针对扫描器行为的单元/集成测试。 如何完善: - 为每个检查模块添加测试。 - 为确定性扫描添加模拟的 HTTP fixtures。 - 为端点和扫描生命周期添加 API 测试。 ### 10) 严重性模型是静态且简化的 缺陷: - 严重性通常由漏洞类型固定,而非上下文感知。 如何完善: - 添加类似 CVSS 的上下文评分。 - 包括可利用性、影响和置信度。 - 添加环境标签 (prod/stage/internal)。 ## 最佳的未来计划和增强功能 ## 阶段 1:稳定性和正确性(近期) 1. 添加真正可取消的扫描作业。 2. 添加结构化结果存储。 3. 引入依赖清单并锁定版本。 4. 添加健壮的异常遥测和错误分类。 5. 为端点和扫描器检查添加自动化测试。 交付物: - 基于作业的扫描生命周期 (`queued`、`running`、`cancelling`、`cancelled`、`done`、`failed`)。 - 来源于 DB 的可靠历史 API。 - 运行测试和 linting 的 CI 流水线。 ## 阶段 2:更好的检测质量 1. 重新设计开放重定向检测为主动验证。 2. 通过上下文感知的 payload 策略改进 XSS 和 SQLi 引擎。 3. 添加置信度评分和证据快照。 4. 添加去重和规范化的发现结果指纹识别。 交付物: - 更低的误报率。 - 报告中更好的漏洞可追溯性。 - 通过置信度 + 严重性实现更好的优先级排序。 ## 阶段 3:扩大覆盖范围 1. 为重度依赖 JS 的应用提供无头浏览器爬取模式。 2. 添加身份验证支持 (cookie/session 脚本)。 3. 添加可选的检查模块: - SSRF 模式 - IDOR 启发式算法 - CORS 错误配置 - 暴露的 admin 端点 4. 添加 API/OpenAPI 端点扫描模式。 交付物: - 更好地覆盖现代 SPA 和 API 驱动的系统。 - 更大的漏洞类别覆盖范围。 ## 阶段 4:产品化和规模化 1. 多租户架构。 2. 用户账户、角色管理和审计追踪。 3. 分布式扫描 worker 和队列。 4. 导出集成 (JSON、SARIF、SIEM/webhooks)。 5. 定期扫描和运行间的差异报告。 交付物: - 可扩展的扫描平台。 - 对团队友好的工作流和合规性报告。 ## 展望未来的建议工程标准 - 添加类型注解和静态检查 (`mypy`、`ruff`、`black`)。 - 添加 API schema 文档和端点契约测试。 - 使用模块化的检查器接口 (插件架构)。 - 保持漏洞证据的确定性和可重现性。 - 在 UI/API 中添加安全默认设置和法律护栏。 ## 快速开始(建议) 1. 创建并激活虚拟环境。 2. 安装依赖项。 3. 使用 Uvicorn 运行应用。 4. 打开仪表盘并开始扫描。 示例运行命令: ``` uvicorn main:app --reload ``` ## 教育与法律声明 本扫描器仅用于教育和授权的安全测试。 请仅扫描您拥有或已获得明确测试许可的系统。
标签:AV绕过, CISA项目, CSRF检测, FastAPI, HTTP/HTTPS抓包, HTTP安全头检测, PDF导出, Python, Splunk, SQL注入检测, TLS/SSL检查, Web安全, Web漏洞扫描器, XSS检测, 代码生成, 安全可视化, 安全基线检查, 安全报告生成, 安全测试, 安全防守工具, 态势感知, 攻击性安全, 攻击面梳理, 无后门, 渗透测试工具, 网站安全, 网络安全, 蓝队分析, 逆向工具, 隐私保护