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检测, 上游代理, 云计算, 代码生成, 反序列化漏洞, 失效的身份认证, 机器学习, 渗透测试工具, 漏洞报告生成, 特征工程, 网络安全, 自动化爬虫, 规则引擎, 误报率降低, 跨站脚本检测, 逆向工具, 随机森林, 隐私保护