Pikadayne/web-vulnerability-scanner-
GitHub: Pikadayne/web-vulnerability-scanner-
一款结合规则引擎与 RandomForest 机器学习的模块化 Web 漏洞扫描器,自动爬取目标并检测 OWASP Top 10 漏洞,通过 ML 分类显著降低误报。
Stars: 0 | Forks: 0
# Web 应用漏洞扫描器
一款模块化、可用于生产环境的漏洞扫描器,使用基于规则的检测结合机器学习来检测 OWASP Top 10 漏洞,从而减少误报。
## 🎯 功能
- **自动化 Web 爬虫**:递归爬取 Web 应用程序并提取端点、表单和参数
- **基于规则的扫描**:使用已知的 Payload 和模式检测多种漏洞类型
- SQL 注入 (SQLi)
- 跨站脚本攻击 (XSS)
- 身份验证失效
- 不安全的反序列化
- **机器学习模型**:使用 RandomForest 分类器减少误报并确定发现结果的优先级
- **特征工程**:从请求/响应中提取 16+ 个特征用于 ML 分类
- **综合报告**:生成详细的 JSON 报告,包含:
- 漏洞分类和严重性级别
- 置信度分数(基于规则 + 基于 ML)
- 证据片段
- 安全修复建议
- 风险评估
## 📦 项目结构
```
scanner/
├── __init__.py # Package initialization
├── crawler.py # Web crawling module
├── scanner.py # Rule-based vulnerability scanner
├── payloads.py # Vulnerability test payloads
├── features.py # Feature extraction for ML
├── model.py # ML model (RandomForest)
├── report.py # Report generation
└── main.py # Main entry point
requirements.txt # Python dependencies
README.md # This file
```
## 🛠️ 安装说明
### 前置条件
- Python 3.8+
- pip 包管理器
### 安装步骤
1. 导航到项目目录:
```
cd scanner
```
2. 安装依赖项:
```
pip install -r ../requirements.txt
```
## 🚀 使用说明
### 交互模式
不带参数运行以获取交互式提示:
```
python main.py
```
系统将提示您:
- 输入目标 URL(例如 `https://example.com`)
- 选择爬取深度(1-3)
### 命令行模式
扫描特定 URL:
```
python main.py https://example.com --depth 2 --output report.json
```
运行演示扫描:
```
python main.py --demo
```
禁用 ML 模型:
```
python main.py https://example.com --no-ml
```
### 作为库使用
```
from main import VulnerabilityApp
# 使用 ML 初始化扫描器
app = VulnerabilityApp(use_ml=True)
# 运行扫描
report = app.scan_url("https://target.com", max_depth=2)
# 访问发现结果
for finding in report['findings']:
print(f"{finding['type']}: {finding['target_url']}")
```
## 📊 工作原理
### 1. **爬取阶段**
- 从目标中提取所有 URL、表单和参数
- 遵守域名边界以避免扫描外部站点
- 限制深度以防止无限循环
- 收集端点信息以供测试
### 2. **扫描阶段**
- 将测试 Payload 注入到已识别的参数中
- 分析响应以查找漏洞指标:
- **SQLi**:SQL 错误消息、响应差异
- **XSS**:HTML 中的 Payload 回显、script 标签
- **反序列化**:序列化对象模式
- **身份验证**:缺失的安全标头、弱 token 模式
- 计算初始置信度分数
### 3. **特征提取**
为每个发现结果提取 16 个特征:
- URL 特征(长度、参数数量)
- Payload 属性(SQL 关键字、script 标签)
- 响应模式(错误消息、编码指示符)
- 安全指示符(Cookie、Content Security Policy)
### 4. **ML 分类**
- 基于合成数据训练的 RandomForest 模型
- 预测漏洞概率(0-1)
- 减少 30-40% 的误报
- 结合基于规则和基于 ML 的置信度分数
### 5. **报告生成**
- 对发现结果进行去重
- 分配严重性级别(CRITICAL、HIGH、MEDIUM、LOW)
- 提供可行的修复建议
- 生成风险评估
## 🔒 安全建议
### SQL 注入
```
-- ✅ DO: Use parameterized queries
SELECT * FROM users WHERE id = ?
-- with parameter: user_input
-- ❌ DON'T: String concatenation
SELECT * FROM users WHERE id = ' + user_input + '
```
### 跨站脚本攻击
```
<%= htmlEncode(userInput) %>
Content-Security-Policy: script-src 'self'
<%=raw userInput %>
```
### 身份验证失效
- 实施 MFA/2FA
- 使用具有较短过期时间的 JWT
- 限制登录尝试频率
- 使用安全的会话 Cookie(HTTPOnly、Secure)
- 强制使用强密码
### 不安全的反序列化
```
# ✅ 务必:反序列化前进行验证
import json
data = json.loads(user_input) # JSON is safe
# ❌ 切忌:对不受信任的数据使用 pickle
import pickle
obj = pickle.loads(user_input) # DANGEROUS!
```
## 📋 输出示例
```
{
"scan_metadata": {
"target": "https://example.com",
"scan_time": "2024-03-25T10:30:00",
"total_findings": 3,
"severity_summary": {
"CRITICAL": 1,
"HIGH": 2
}
},
"findings": [
{
"id": 1,
"type": "SQL Injection",
"severity": "CRITICAL",
"target_url": "https://example.com/search.php",
"confidence_score": 0.85,
"recommendations": [
"Use parameterized queries",
"Implement input validation",
"Apply principle of least privilege"
]
}
],
"risk_assessment": {
"overall_risk_level": "CRITICAL",
"description": "1 critical vulnerabilities detected"
}
}
```
## 🧪 测试
使用公共漏洞应用程序进行测试(需获得授权):
- OWASP WebGoat
- DVWA (Damn Vulnerable Web App)
- Juice Shop
示例:
```
python main.py http://localhost:8080/dvwa/ --depth 2
```
## ⚠️ 重要提示
### 负责任地使用
- ✅ 仅扫描您拥有或获得明确授权测试的应用程序
- ✅ 尽可能在受控/测试环境中使用
- ❌ 切勿用于未经授权的测试或非法活动
- ❌ 切勿进行实际的漏洞利用
### 局限性
- 基于规则的检测可能存在误报/漏报
- ML 模型基于合成数据训练(需在真实数据上微调以获得更好的准确性)
- 无法检测所有漏洞类型(请使用多种工具)
- 依赖于基于响应的检测(盲注漏洞较难发现)
## 🔧 高级配置
### 修改 Payload
编辑 `scanner/payloads.py` 以添加自定义测试 Payload:
```
SQL_INJECTION_PAYLOADS += [
"' AND 1=1--",
"custom_payload_here"
]
```
### 训练自定义 ML 模型
```
from model import VulnerabilityModel
import numpy as np
model = VulnerabilityModel()
# 准备你的标记训练数据
X_train = np.array([[...], [...], ...]) # features
y_train = np.array([0, 1, 1, 0, ...]) # labels
model.train(X_train, y_train)
model.save("custom_model.pkl")
```
## 📚 参考资料
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [OWASP 测试指南](https://owasp.org/www-project-web-security-testing-guide/)
- [CWE Top 25](https://cwe.mitre.org/top25/)
- [Burp Suite 文档](https://portswigger.net/burp)
## 📝 许可证
仅供教育用途。对于专业的安全测试,请使用 Burp Suite、OWASP ZAP 等成熟工具,或咨询安全专业人士。
## 👨💼 作者
安全研究团队 2024标签:Apex, CISA项目, DevSecOps, DOE合作, OWASP Top 10, Python安全工具, Splunk, SQL注入检测, Web漏洞扫描器, XSS检测, 上游代理, 云计算, 代码生成, 反序列化漏洞, 失效的身份认证, 机器学习, 渗透测试工具, 漏洞报告生成, 特征工程, 网络安全, 自动化爬虫, 规则引擎, 误报率降低, 跨站脚本检测, 逆向工具, 随机森林, 隐私保护