Tktirth/ai-web-vulnerability-scanner

GitHub: Tktirth/ai-web-vulnerability-scanner

一款集成了机器学习严重程度分类的Python Web漏洞扫描器,通过智能评级帮助安全测试者优先处理真正高危的漏洞发现。

Stars: 0 | Forks: 0

[README.md](https://github.com/user-attachments/files/26029775/README.md) # AI 驱动的 Web 漏洞扫描器 我开发这个工具的原因在于,我试过的每一个免费扫描器都有同样令人头疼的问题——它会向你倾泻 60 个发现结果,并且把缺失 `X-XSS-Protection` 头与原生的 SQL 注入视为同等紧急。结果你花在整理输出上的时间反而比实际修复漏洞的时间还要长。 所以我编写了自己的工具。这个工具会首先爬取你的目标,运行五个检测模块,然后将每个发现结果输入到一个经过训练的 ML 模型中,该模型会根据漏洞的实际*本质*对其严重程度进行评分——而不是依据某些硬编码的优先级列表。整个工具都集成在一个带有实时终端的 Streamlit 仪表板中,因此你可以观察它的运行过程。扫描完成后,你会得到一份干净的 JSON 报告,你可以将其保存、分享,或者通过管道传入你现有的任何工作流中。 ## 它能测试什么 扫描器不仅仅是 ping 一个 URL。它首先使用 BFS 遍历对网站进行爬取,发现直至你设定的深度限制的内部页面,然后根据其发现的所有内容展开全面扫描。 **跨站脚本攻击 (XSS)** 向它发现的每一个 URL 参数和 HTML 表单输入抛出 10 个 payload。它不仅仅是检查原始反射——它还能通过模式匹配捕获部分编码绕过。GET 参数和 POST 表单字段都会被独立覆盖测试。 **SQL 注入** 两种策略同时运行。基于错误的检测会监听来自 MySQL、PostgreSQL、MSSQL、Oracle 和 SQLite 的数据库错误特征——总共超过 25 种模式。基于布尔的检测通过比较 `1=1` 和 `1=2` 条件下的响应长度,以捕获服务器保持静默但行为仍有差异的情况。URL 参数和表单输入都会被测试。 **安全 Header** 检查八个 header:`X-Frame-Options`、`X-Content-Type-Options`、`X-XSS-Protection`、`Content-Security-Policy`、`Strict-Transport-Security`、`Referrer-Policy`、`Permissions-Policy` 和 `Cache-Control`。同时也会标记出那些会泄露信息的 header——`Server`、`X-Powered-By`、`X-Generator`——这些会让攻击者无需进行任何操作就能获取你的完整技术栈信息。 **开放重定向** 使用 9 个 payload 测试超过 20 个带有重定向意味的参数名(`url`、`next`、`return`、`goto`、`redirect`、`callback`、`destination` 等)。能够捕获服务端 3xx 重定向以及隐藏在 meta-refresh 标签或 `window.location` 调用中的客户端重定向。 **目录和文件发现** 探测 40 多个人们常常忘记加以访问控制的路径:管理后台、`.env` 文件、`.git/config`、原始数据库转储、备份 zip 文件、Swagger UI、服务器状态页、上传目录等。任何返回 200、301 或 302 状态码的内容都会被标记。 每一个发现的结果都会经过 AI 模块处理,并在输出时被标记为 `Critical`、`High`、`Medium` 或 `Low`。 ## 快速开始 Python 3.9 或更高版本。这是唯一真正的硬性要求。 ``` cd ai-web-vulnerability-scanner pip install -r requirements.txt streamlit run app.py ``` 它会在 `http://localhost:8501` 打开。 ## 运行扫描 1. 将你的目标 URL 输入到顶部的输入框中——支持 `http://` 或 `https://`,两者均可处理 2. 从左侧边栏中选择你要运行的模块(默认全部开启) 3. 如果默认设置不合适,请调整你的爬取深度、延迟和超时时间 4. 按下 **▶ SCAN** 5. 在每个阶段运行时查看实时终端输出 6. 获取结果后,使用过滤器筛选出你最关心的内容 7. 从底部的导出面板获取 JSON 报告 有一点需要注意:侧边栏中的 **Request delay**(请求延迟)滑块控制着扫描器访问服务器的速度。不要仅仅因为可以调,就把它设置为零。 ## 项目结构 ``` ai-web-vulnerability-scanner/ │ ├── app.py ← Dashboard UI, state management, results rendering ├── scanner_engine.py ← Runs each phase in order, wires progress callbacks ├── crawler.py ← BFS link crawler with depth control and URL deduplication ├── requirements.txt │ ├── ai/ │ └── vulnerability_ai.py ← RandomForest classifier, feature extraction, severity scoring │ ├── detectors/ │ ├── xss_detector.py ← XSS via URL params and form fields │ ├── sql_detector.py ← Error-based and boolean-based SQLi │ ├── header_detector.py ← Missing headers, weak values, server info leakage │ ├── redirect_detector.py ← Open redirect parameter injection │ └── directory_detector.py ← Sensitive path and exposed file detection │ ├── utils/ │ ├── request_manager.py ← Shared HTTP session, retry handling, SSL fallback │ └── payloads.py ← Every payload in one place, easy to extend │ └── reports/ └── report_generator.py ← JSON report structure, risk scoring, export logic ``` 每个检测器都是完全独立的。如果你只想针对单个 endpoint 运行 header 检查,只需导入 `detect_missing_headers` 并直接调用它——无需拖入整个引擎。 ## 示例报告输出 ``` { "report_metadata": { "tool": "AI Web Vulnerability Scanner", "version": "1.0.0", "generated_at": "20260316_142205", "target": "http://testphp.vulnweb.com", "total_findings": 8 }, "executive_summary": { "risk_level": "CRITICAL", "total_vulnerabilities": 8, "pages_scanned": 14, "requests_made": 387, "scan_duration_seconds": 42.1, "severity_breakdown": { "Critical": 2, "High": 2, "Medium": 2, "Low": 2 } }, "vulnerabilities": [ { "id": "VULN-0001", "type": "SQLi", "subtype": "Error-based SQL Injection", "severity": "Critical", "severity_score": 4, "url": "http://testphp.vulnweb.com/listproducts.php", "parameter": "cat", "http_method": "GET", "payload_used": "' OR 1=1 --", "evidence": "Database error message exposed in response", "description": "SQL injection confirmed in parameter 'cat'. The app returned a raw database error, meaning user input is going straight into the query without any sanitization.", "remediation": "Switch to parameterized queries or prepared statements. Kill verbose error messages in production — they're free recon for attackers." }, { "id": "VULN-0002", "type": "XSS", "subtype": "Reflected XSS", "severity": "High", "severity_score": 3, "url": "http://testphp.vulnweb.com/search.php", "parameter": "q", "http_method": "GET", "payload_used": "", "evidence": "Payload reflected in response body without encoding", "remediation": "Encode all output before it touches HTML. Add a Content-Security-Policy header while you're at it." } ], "remediation_priority": [ { "vulnerability_type": "SQLi", "severity": "Critical", "count": 2, "remediation": "Use parameterized queries. Remove raw database errors from responses." }, { "vulnerability_type": "XSS", "severity": "High", "count": 2, "remediation": "Encode user output. Implement Content-Security-Policy." } ] } ``` ## AI 分类器的工作原理 该模型是一个基于合成特征向量训练的 RandomForest。每个漏洞在分类前都会被转换为九个数值特征: - **Type score(类型评分)** — 漏洞类别的基础风险权重(SQLi = 4,XSS = 3,headers = 1 等) - **Subtype score(子类型评分)** — 特定变体的更细粒度风险 - **Method score(方法评分)** — POST 比 GET 承载更高的权重 - **Has payload(包含 payload)** — 是否使用了主动注入 payload 来触发该发现 - **Has evidence(包含证据)** — 是否捕获了确凿的证实信息(错误消息、反射、重定向) - **Is injection(是注入)** — 用于 XSS 和 SQLi 类别的二元标志 - **Is header(是 header)** — 用于基于 header 的发现的二元标志 - **Is redirect(是重定向)** — 用于基于重定向的发现的二元标志 - **Is disclosure(是披露)** — 用于信息暴露和目录发现的二元标志 这种方法意味着分类器不仅仅是将类型名称与严重程度相匹配。它是在对漏洞被发现和证实的完整上下文进行推理。一个带有证据的盲注 SQLi 的级别始终会高于理论上的 SQLi,而缺失的 header 会保持在较低级别,除非它们是 `Strict-Transport-Security` 或 `Content-Security-Policy`。 ## 技术栈 | 库 | 在此项目中的作用 | |---|---| | Python | 一切基础 | | Streamlit | 仪表板 UI 和实时状态管理 | | Requests | HTTP session、重试、SSL 回退 | | BeautifulSoup | 用于链接和表单提取的 HTML 解析 | | scikit-learn | 用于严重程度评分的 RandomForest 分类器 | | NumPy | 特征向量构建 | | Pandas | UI 中的结果表格展示 | ## 合法的练习目标 请勿扫描任何你无法控制或未获得书面测试授权的目标。以下目标是专门设计为存在漏洞的: | 目标 | 其实用价值 | |---|---| | `http://testphp.vulnweb.com` | Acunetix 故意设计的易受攻击的 PHP 应用。内置了 SQLi、XSS 和开放重定向漏洞。是最佳的起步练习场。 | | `https://ginandjuice.shop` | PortSwigger 的漏洞练习商店。非常适合用于测试重定向和注入检测。 | | `http://zero.webappsecurity.com` | 演示银行应用。适用于 header 审计。 | ## 客观的局限性 **它不进行身份认证。** 它无法发现存储型 XSS、IDOR、失效的访问控制或任何逻辑层的漏洞。请将其视为一次表面扫描——这是一个扎实的起点,但不能替代真正的渗透测试。 **AI 模型是在合成数据上训练的。** 它并不从 CVE 数据库或实时漏洞利用馈源中提取数据。它通过推理特征模式来进行工作,这在优先级排序方面效果很好,但不会为你提供 CVSS 评分或 CWE 映射。 **SSL 问题会被自动处理。** 如果证书已过期或是自签名的,请求管理器会回退到跳过验证。无论哪种情况,扫描都会继续进行。 **速率限制是开启的,这是有原因的。** 系统内置了请求延迟。这能防止扫描器看起来像是在发起 DDoS 攻击,避免你的 IP 被封锁,这也是运行此类工具的专业做法。 ## 法律声明 未经明确书面许可扫描系统是违法的。这在美国(《计算机欺诈和滥用法》)、英国(《计算机滥用法》)、印度(《IT 法》)以及大多数其他司法管辖区均适用。此项目的存在是为了授权的安全测试、CTF 练习和学习。如何使用它完全取决于你自己。 ## 作者 **Tirth** — IT 本科生,拥有 IIT Delhi 道德黑客认证,正在进修 IIT Guwahati AI/ML 轨道课程。 GitHub: [@Tktirth](https://github.com/Tktirth) ## 📜 许可证 本项目基于 MIT 许可证授权。
标签:Apex, CISA项目, DOE合作, Kubernetes, Python, Splunk, Streamlit, Web漏洞扫描, 字符串匹配, 无后门, 机器学习, 访问控制, 逆向工具