rohit-1006/Web-Vulnerability-Scanner

GitHub: rohit-1006/Web-Vulnerability-Scanner

基于 Python 的异步 Web 漏洞扫描器,通过爬取目标应用检测 SQL 注入、XSS 和 CSRF 漏洞并生成包含 PoC 的结构化报告。

Stars: 0 | Forks: 0

# Web 漏洞扫描器 一个用 Python 构建的异步、多模块 Web 漏洞扫描器。检测爬取的 Web 应用程序中的 SQL Injection、Cross-Site Scripting (XSS) 和 Cross-Site Request Forgery (CSRF) 漏洞,提供结构化报告和完整的概念验证 (PoC) 捕获。 ## 目录 - [概述](#overview) - [安装说明](#installation) - [使用方法](#usage) - [扫描模块](#scan-modules) - [工作原理](#how-it-works) - [项目结构](#project-structure) - [演示](#demo) - [故障排除](#troubleshooting) - [贡献指南](#contributing) - [更新日志](#changelog) - [许可证](#license) ## 概述 该扫描器使用异步请求引擎进行高效并发扫描,自动化发现三个攻击面 —— SQL Injection、XSS 和 CSRF —— 的漏洞。它爬取目标应用程序,映射所有页面、表单和 URL 参数,运行配置的扫描模块,并生成包含 CWE ID、CVSS 评分、完整 HTTP 交换日志和修复建议的报告。 **核心功能:** - 具有可配置深度、并发和范围的异步爬虫 - 技术指纹识别(WordPress、React、Django、Rails、ASP.NET 等) - 针对 MySQL、PostgreSQL、MSSQL、Oracle 和 SQLite 的基于错误的 SQL 检测 - 通过随机金丝雀令牌 (canary tokens) 在多个注入上下文中进行 XSS 检测 - 对 POST 表单的 CSRF 分析,包括 SameSite cookie 属性检查 - HTML、JSON 和 Markdown 报告格式 - 代理支持和自定义 header/cookie 注入 - 基于会话的身份验证,用于扫描登录后页面 ## 安装说明 ### 环境要求 - Python 3.8 或更高版本 - pip ### 步骤 ``` # 克隆仓库 git clone https://github.com/rohit-1006/Web-Vulnerability-Scanner.git cd Web-Vulnerability-Scanner # 创建并激活虚拟环境(推荐) python3 -m venv venv source venv/bin/activate # macOS / Linux venv\Scripts\activate # Windows # 安装依赖 pip install -r requirements.txt ``` ### 依赖项 | Package | Version | Purpose | |---------|---------|---------| | `aiohttp` | >=3.9.0 | Async HTTP client | | `beautifulsoup4` | >=4.12.0 | HTML 解析和表单发现 | | `lxml` | >=5.0.0 | XML/HTML parser backend | ## 使用方法 ### 基本扫描 ``` python3 main.py -u http://your-app.local ``` ### 身份验证扫描 ``` python3 main.py -u http://your-app.local \ --auth-url http://your-app.local/login \ --auth-data "username=admin&password=secret" ``` ### 通过代理(例如 Burp Suite) ``` python3 main.py -u http://your-app.local --proxy http://127.0.0.1:8080 --no-verify-ssl ``` ### 完整 CLI 参考 ``` Usage: python3 main.py [OPTIONS] Required: -u, --url URL Target URL to scan Crawl Options: -d, --depth N Crawl depth (default: 3) --max-pages N Maximum pages to crawl (default: 100) --delay N Delay between requests in seconds (default: 0.5) -c, --concurrency N Concurrent requests (default: 5) --follow-external Follow links outside the target domain Scan Modules: --no-sqli Disable SQL Injection scanning --no-xss Disable XSS scanning --no-csrf Disable CSRF scanning Authentication: --auth-url URL Login page URL --auth-data DATA POST data for login (e.g. username=admin&password=pass) --cookie name=value Add a cookie (repeatable) --header "Name: Value" Add a custom header (repeatable) Output: -o, --output FILENAME Output filename without extension (default: scan_report) -f, --format {html,json,markdown} Report format (default: html) -v, --verbose Enable debug logging Network: --proxy URL HTTP proxy (e.g. http://127.0.0.1:8080) --no-verify-ssl Disable SSL certificate verification ``` ## 扫描模块 ### SQL Injection 检测 URL 参数和表单字段中基于错误的 SQL 注入。Payload 被提交到每个注入点,并根据以下数据库后端的错误模式匹配响应: - MySQL / MariaDB - PostgreSQL - Microsoft SQL Server - Oracle - SQLite 检测方法包括单/双引号探测、`ORDER BY` 枚举、`UNION SELECT` 注入和时间延迟堆叠 Payload。 ### XSS (Cross-Site Scripting) 使用随机金丝雀令牌 (canary tokens) 唯一标识每次注入尝试的反射。测试以下上下文: | Context | Example | |---------|---------| | HTML body | `` | | Event handler | `` | | SVG element | `` | | Quoted attribute | `" onmouseover="alert(...)"` | | Unquoted attribute | `' onmouseover='alert(...)'` | | Tag breakout | `">` | | JavaScript string | `';alert('...');//` | ### CSRF (Cross-Site Request Forgery) 分析 POST 表单中缺失或薄弱的 CSRF 防护。检查包括: - CSRF token 字段的存在(支持常见命名约定:`csrf_token`、`_token`、`authenticity_token`、`__RequestVerificationToken` 等) - 状态更改表单的检测(密码更改、账户更新、删除、转账等) - `SameSite` cookie 属性验证 发现结果被归类为高危(未受保护的状态更改表单)或中危(未受保护的非关键表单)。 ## 工作原理 **阶段 1 —— 爬取** 异步爬虫递归发现目标域内所有可达页面,直到配置的深度。它映射 URL 参数,发现表单及其输入字段,收集电子邮件地址,并执行技术指纹识别(WordPress、Drupal、React、Angular、jQuery、Bootstrap、ASP.NET、PHP、Rails 等)。 **阶段 2 —— 漏洞扫描** 每个启用的扫描器接收完整的爬取结果,并针对所有发现的注入点并发运行。发现结果记录了触发 Payload、证据、完整 HTTP 交换(请求 + 响应)、CWE 参考、CVSS 评分和修复指南。 **阶段 3 —— 报告生成** 所有发现结果按严重性排序并写入配置的输出格式。风险评分计算为所有发现结果的严重性权重之和。日志也会写入工作目录中的 `vulnscan.log`。 ### 示例输出 ``` ============================================================ SCAN COMPLETE ============================================================ Duration: 42.18s Requests: 284 URLs Crawled: 18 Forms Found: 6 Vulnerabilities: 5 CRITICAL : 1 HIGH : 2 MEDIUM : 2 Report: scan_report.html ============================================================ ``` ## 项目结构 ``` Web-Vulnerability-Scanner/ ├── main.py # CLI entry point and scan orchestrator ├── config.py # ScanConfig dataclass and defaults ├── requirements.txt ├── README.md ├── LICENSE │ ├── models/ │ └── vulnerability.py # Data models: Vulnerability, FormData, CrawlResult │ ├── scanner/ │ ├── base_scanner.py # Shared scanner base class │ ├── crawler.py # Async crawler with tech fingerprinting │ ├── request_engine.py # Async HTTP client with auth and rate limiting │ ├── sqli_scanner.py # SQL Injection detection module │ ├── xss_scanner.py # XSS detection module │ └── csrf_scanner.py # CSRF detection module │ ├── reporter/ │ └── report_generator.py # HTML, JSON, and Markdown report generation │ └── utils/ └── helpers.py # Shared utility functions ``` ## 演示 这两个示例都使用为安全培训设计的故意存在漏洞的应用程序。 ### DVWA (Damn Vulnerable Web Application) ``` docker run -d -p 80:80 vulnerables/web-dvwa python3 main.py \ -u http://localhost \ --auth-url http://localhost/login.php \ --auth-data "username=admin&password=password" \ -f json \ -o dvwa_report \ -v ``` ### OWASP Juice Shop ``` docker run -d -p 3000:3000 bkimminich/juice-shop python3 main.py \ -u http://localhost:3000 \ -f html \ -o juiceshop_report \ -c 10 ``` ## 故障排除 **启动时出现 `ModuleNotFoundError`** 确保已激活虚拟环境并安装了依赖项: ``` source venv/bin/activate pip install -r requirements.txt ``` **扫描器速度慢或超时** 降低并发和爬取深度,或增加延迟: ``` python3 main.py -u http://target -c 2 -d 2 --delay 1.0 ``` **在已知易受攻击的应用程序上未发现漏洞** 启用详细模式以检查发送和接收的内容: ``` python3 main.py -u http://target -v ``` **身份验证未跨页面持久保持** 验证 `--auth-data` 字段名称是否与登录表单提交的完全一致。使用浏览器 DevTools → Network 选项卡检查正确的参数名称。 **HTTPS 目标上的 SSL 错误** 对本地或自签名证书环境禁用证书验证: ``` python3 main.py -u https://target --no-verify-ssl ``` **CSRF 误报** 基于 DOM 的 CSRF 发现结果需要手动验证。在报告之前,请查看标记表单的 action、method 以及应用程序的服务器端 token 验证。 ## 贡献指南 欢迎做出贡献。请遵循以下步骤: 1. Fork 仓库并克隆你的 Fork 2. 创建一个功能分支:`git checkout -b feature/rohit-1006` 3. 使用祈使语气进行专注、范围明确的提交:*"Add time-based SQLi detection"* 4. 在提交之前针对 DVWA 或 Juice Shop 测试你的更改 5. 向 `main` 分支发起 Pull Request,并附上清晰的更改描述 对于重要的新功能或扫描模块,请先开启一个 Issue 进行讨论。 ### 报告 Bug 开启一个 GitHub Issue,包含: - Python 版本和操作系统 - 你运行的确切命令 - 完整的错误输出或意外行为描述 - 目标类型(DVWA、Juice Shop、自定义应用) ### 路线图 - 盲注 SQLi 检测(基于时间、带外) - 带回调服务器的 Blind XSS 检测 - WAF 指纹识别和绕过 - REST 和 GraphQL API 模糊测试 - Docker 容器化 - 自动化测试套件 - 基于 Web 的报告仪表板 ## 更新日志 ### v1.0.0 - 初始发布 - 具有技术指纹识别的异步爬虫(WordPress、React、Django、Rails 等) - SQL Injection 检测:针对 MySQL、PostgreSQL、MSSQL、Oracle、SQLite 的基于错误的模式 - XSS 检测:跨 7 种以上注入上下文的金丝雀令牌方法 - CSRF 检测:缺失 token 分析和 SameSite cookie 检查 - HTML、JSON 和 Markdown 报告格式,包含 CVSS 评分、CWE ID 和 PoC HTTP 交换 - 基于会话的身份验证支持 - 代理支持和自定义 header/cookie 注入 - 可配置的爬取深度、并发和请求延迟 ## 参考资料 | Resource | URL | |----------|-----| | OWASP SQL Injection | https://owasp.org/www-community/attacks/SQL_Injection | | OWASP XSS Guide | https://owasp.org/www-community/attacks/xss/ | | OWASP CSRF Guide | https://owasp.org/www-community/attacks/csrf | | CWE-89: SQL Injection | https://cwe.mitre.org/data/definitions/89.html | | CWE-79: XSS | https://cwe.mitre.org/data/definitions/79.html | | CWE-352: CSRF | https://cwe.mitre.org/data/definitions/352.html | | PortSwigger Web Security Academy | https://portswigger.net/web-security | ## 许可证 该项目基于 [MIT License](LICENSE) 授权。
标签:BeEF, C2日志可视化, CISA项目, CSRF检测, CVE/CWE, DOE合作, Python, SQL注入检测, Web安全, XSS检测, 异步编程, 指纹识别, 攻击路径可视化, 无后门, 爬虫, 网络安全, 蓝队分析, 逆向工具, 隐私保护, 黑客工具