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漏洞扫描, 字符串匹配, 无后门, 机器学习, 访问控制, 逆向工具