mahadzulfiqar09/Webguard

GitHub: mahadzulfiqar09/Webguard

WebGuard 是一款模块化的 Python Web 应用漏洞扫描器,通过爬取目标站点并检测常见 OWASP 漏洞来辅助渗透测试人员完成应用层安全评估。

Stars: 0 | Forks: 0

# 🛡️ WebGuard — 模块化 Web 漏洞扫描器

Python Version License Platform Status PRs Welcome

**WebGuard** 是一款轻量级、模块化的 Web 应用程序漏洞扫描器 —— 即 **ReconX** 的主动式应用层兄弟工具。它会爬取目标站点,映射其攻击面,并针对常见的 OWASP 类漏洞运行一系列独立且非破坏性的检查,最后生成一份带有严重性评级的报告。 ## 📌 目录 - [概述](#-overview) - [目标](#-objectives) - [范围与限制](#-scope--limitations) - [功能](#-features) - [项目结构](#-project-structure) - [架构](#-architecture) - [技术栈](#-technology-stack) - [前置条件](#-prerequisites) - [安装](#-installation) - [用法](#-usage) - [模块详情](#-module-details) - [报告](#-reporting) - [示例输出](#-sample-output) - [测试与性能](#-testing--performance) - [故障排除 / FAQ](#-troubleshooting--faq) - [路线图](#-roadmap) - [贡献](#-contributing) - [团队与鸣谢](#-team--credits) - [致谢](#-acknowledgments) - [免责声明](#-disclaimer) - [许可证](#-license) ## 🧭 概述 WebGuard 自动化执行渗透测试中应用层的漏洞评估阶段。它通过对目标域名进行蜘蛛爬取来发现页面和 HTML 表单,然后测试所发现的内容是否存在缺少安全标头、不安全的 Cookie、反射型 XSS 以及基于错误的 SQL 注入等问题 —— 最终将所有结果打包成一份清晰、带有严重性评级的报告。 ## 🎯 目标 - 构建模块化的 CLI Web 漏洞扫描器 - 自动检测常见的 OWASP Top 10 类问题:XSS、SQLi、安全配置错误、不安全的 Cookie - 提供一个可运行的爬虫,将发现的表单/参数馈送到下游测试模块中 - 为渗透测试人员生成清晰、带有严重性评级的报告 - 保持每一次检查都是非破坏性的,并确保在授权测试中的安全性 ## 🔒 范围与限制 WebGuard 仅执行**检测** —— 它会识别漏洞信号(例如响应中反射出的未转义标记,或返回的数据库错误字符串),但不会进行利用、提取数据或修改目标上的任何内容。标记为“Vulnerable (unconfirmed)”的发现结果在被视为已确认之前,应始终进行手动验证。本工具严格仅用于针对您拥有或具有明确书面测试许可的系统进行**授权的安全测试**。 ## 🧠 功能 ### 🕷️ 爬虫与发现 | 能力 | 描述 | |---|---| | 站点爬虫 | 对目标域名内的内部链接进行广度优先爬取 | | 表单发现 | 检测 HTML `
` 元素及其输入字段,用于下游测试 | ### 🔒 安全配置错误 | 模块 | 描述 | |---|---| | 安全标头 | 标记缺失的 `Content-Security-Policy`、`Strict-Transport-Security`、`X-Frame-Options`、`X-Content-Type-Options`、`Referrer-Policy` 和 `Permissions-Policy` | | 服务器标头暴露 | 标记泄露的 `Server` / `X-Powered-By` 标头 | ### 🍪 会话与 Cookie 安全 | 模块 | 描述 | |---|---| | Cookie 标记 | 检查每个 `Set-Cookie` 标头是否包含 `Secure`、`HttpOnly` 和 `SameSite` 属性 | ### 🧨 注入测试 | 模块 | 描述 | |---|---| | 反射型 XSS | 向每个发现的参数/表单字段注入一个唯一的惰性标记,并检查是否存在未转义的反射 | | SQL 注入 | 发送一个无害的 `'` 探测,并检查响应中是否包含已知的数据库错误签名(基于错误的检测) | ### 📄 报告 - 带有严重性评级的发现结果:**Critical / High / Medium / Low / Info** - 结构化的 `.txt` 和带有颜色标记的 `.html` 报告,均包含时间戳 - 包含执行摘要徽章行以及针对每个模块的详细细分 ### ⚙️ 模块化与 CLI 控制 - 每个模块独立运行,并可通过 CLI 标志调用 - `cli.py` 使用 `argparse` 子解析器来实现 `all`(全面扫描)和 `single`(单一模块)模式 - `main.py` 提供了一个交互式的全流程入口点 ## 📁 项目结构 ``` WebGuard/ ├── main.py # Interactive controller — runs the full scan pipeline ├── cli.py # Flag-based CLI — run the full scan or a single module ├── modules/ │ ├── crawler.py # Site spider — discovers pages and forms │ ├── headers_check.py # Security header analysis │ ├── cookie_check.py # Cookie flag analysis (Secure/HttpOnly/SameSite) │ ├── xss_scan.py # Reflected XSS detection (marker-based) │ ├── sqli_scan.py # SQL injection detection (error-signature based) │ └── report.py # Timestamped .txt / .html report generator ├── reports/ # Output folder for generated reports ├── requirements.txt # Dependency list ├── .gitignore # Excludes venv, __pycache__, and report output ├── LICENSE # MIT License └── README.md # Project documentation ``` ## 🏗️ 架构 ``` User | v cli.py / main.py | v crawler.py (discovers pages + forms) | +--------------+--------------+--------------+ | | | | headers_check cookie_check xss_scan sqli_scan | | | | +--------------+------+-------+--------------+ | v report.py (timestamped .txt / .html) ``` ## 🛠️ 技术栈 - **语言:** Python 3 - **库:** `requests`、`beautifulsoup4`、`argparse` - **环境:** 跨平台 —— 已在 Windows、Linux 和 macOS 上经过测试 ## ✅ 前置条件 - Python **3.6+** - `pip` 包管理器 - 访问目标站点的互联网连接 - 无需 API 密钥 **`requirements.txt`** ``` requests>=2.31.0 beautifulsoup4>=4.12.0 ``` ## 🚀 安装 ``` git clone https://github.com/mahadzulfiqar/WebGuard.git cd WebGuard pip install -r requirements.txt ``` ``` python3 -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate pip install -r requirements.txt ``` **在 Windows 上**,如果无法直接识别 `pip`,请使用: ``` python -m pip install -r requirements.txt ``` ## 🚀 用法 ### 以交互方式运行全面扫描 ``` python3 main.py ``` 提示输入目标 URL 并依次运行爬虫 → 标头 → Cookie → XSS → SQLi → 报告,生成 `.txt` 和 `.html` 两种报告。 ### 通过 CLI 标志运行全面扫描 ``` python3 cli.py -t https://example.com -o html all python3 cli.py -t https://example.com -o txt all ``` ### 运行单个模块 ``` python3 cli.py -t https://example.com single --tool crawl python3 cli.py -t https://example.com single --tool headers python3 cli.py -t https://example.com single --tool cookies python3 cli.py -t https://example.com single --tool xss python3 cli.py -t https://example.com single --tool sqli ``` ### 示例命令 ``` python3 cli.py -t https://example.com -o html all python3 cli.py -t https://example.com single --tool headers ``` ## 🔍 模块详情 ### 爬虫 对目标域名执行广度优先爬取(默认上限:25 个页面),并保持在同一域名内。使用 BeautifulSoup 解析每个页面,收集内部链接以及任何 `` 元素及其输入字段名称 —— 这将成为 XSS 和 SQLi 模块的攻击面。 ### 安全标头 获取目标的响应标头并检查六个标准的防御性标头。每个缺失的标头都会被标记相应的严重级别,以反映其实际影响(例如缺失 CSP/HSTS = High,缺失 Referrer-Policy = Low)。 ### Cookie 安全 检查目标返回的每个 `Set-Cookie` 标头是否包含 `Secure`、`HttpOnly` 和 `SameSite` 属性,如果发现缺失某些标记,则会标记出该问题并解释相关的风险(会话窃取、CSRF 等)。 ### 反射型 XSS 对于每个发现的 URL 参数和表单字段,注入一个包含在 `<...>` 中的唯一标记字符串,并检查它是否在 HTML 响应中**未被转义**地返回。未被转义的反射是一个强烈的信号,表明用户输入在渲染之前没有被净化。 ### SQL 注入 对于每个发现的 URL 参数和表单字段,附加一个单引号字符 `'`,并检查响应中是否包含已知的数据库错误签名(MySQL、PostgreSQL、MSSQL、SQLite、Oracle)。如果返回错误,则意味着输入直接进入了未经净化的原始查询中。 ## 📄 报告 每次扫描都会在 `/reports/` 目录中生成两个文件,均带有时间戳: - **`.txt`** —— 包含严重性细分和各模块详细信息的纯文本摘要报告,非常适合用于日志/归档 - **`.html`** —— 带有颜色标记、可在浏览器中查看的报告,包含摘要徽章行和各模块的细分表格 ## 🖥️ 示例输出 针对 `https://example.com` 进行扫描的实际输出: ``` === WebGuard - Web Vulnerability Scanner === Enter target URL (e.g., https://example.com): https://example.com --- CRAWLING & DISCOVERY --- [Crawler] Starting crawl of https://example.com (max 25 pages) [+] Crawled: https://example.com [+] Crawl complete: 1 pages, 0 forms with input fields --- SECURITY HEADERS --- [MISSING] Content-Security-Policy - High severity [MISSING] Strict-Transport-Security - High severity [MISSING] X-Frame-Options - Medium severity [MISSING] X-Content-Type-Options - Medium severity [MISSING] Referrer-Policy - Low severity [INFO] Server header exposed: cloudflare --- COOKIE SECURITY --- [INFO] No cookies set by this endpoint. --- REFLECTED XSS --- [INFO] No testable parameters or forms found on this URL. --- SQL INJECTION --- [INFO] No testable parameters or forms found on this URL. --- GENERATING REPORT --- [+] Report saved to: reports/webguard_example.com_20260711_225506.txt [+] HTML report saved to: reports/webguard_example.com_20260711_225506.html [+] Scan complete. ``` **该次运行的严重性摘要:** `Critical: 0 · High: 2 · Medium: 2 · Low: 3 · Info: 3` ## 📸 截图 **HTML 报告 — 摘要与安全标头** ![WebGuard 报告摘要与安全标头表格](https://static.pigsec.cn/wp-content/uploads/repos/cas/93/93fbe45195c193ef320f1afeac9d677f38f2b0a7da706da8660c8e9f55189e12.png) **HTML 报告 — Cookie 安全、XSS 与 SQLi 部分** report-details ## 🧪 测试与性能 ### 测试策略 每个模块都经过了单独测试,并作为全流程的一部分针对 `https://example.com`(一个极简的静态站点)进行了测试,以验证在“干净”和“被标记”场景下的正确行为,包括对无法访问的目标和没有表单的页面进行平滑处理。 ### 测试用例 - 爬虫能够正确发现同一域名内的页面和表单 - 安全标头检查能够正确标记所有缺失的六个标头,并在存在时予以确认 - Cookie 模块能够正确解析 `Secure` / `HttpOnly` / `SameSite` 标记 - XSS/SQLi 模块能够正确跳过没有可测试参数的页面,而不是报错 - 报告生成器能够生成有效、格式良好的 `.txt` 和 `.html` 输出,且严重性计数准确 - 无法访问的目标得到了平滑处理,显示清晰的连接错误,而不是导致程序崩溃 ### 性能指标 | 模块 | 大致耗时(单页) | |---|---| | 爬取(25 个页面) | 3–10秒(取决于站点) | | 安全标头 | < 1秒 | | Cookie 安全 | < 1秒 | | 反射型 XSS(每个参数/表单) | ~0.5–1秒 | | SQL 注入(每个参数/表单) | ~0.5–1秒 | | 全面扫描 + 报告 | 5–15秒(典型的小型站点) | ## 🛠️ 故障排除 / FAQ **问:在 Windows 上无法识别 `pip`。** 答:请使用 `python -m pip install -r requirements.txt`,而不是直接调用 `pip`。 **问:安装时出现 `ERROR: Invalid requirement` 错误。** 答:您的 `requirements.txt` 中可能将所有包放在了同一行。每个包必须单独占一行: ``` requests>=2.31.0 beautifulsoup4>=4.12.0 ``` **问:出现 `AttributeError: module 'modules.X' has no attribute 'Y'` 错误。** 答:模块文件不完整,或者在复制/粘贴或解压过程中已损坏。请删除 `modules/__pycache__`,并使用完整、正确的内容重新保存受影响的文件。 **问:报告中显示 `�` 而不是破折号。** 答:这是文本编码不匹配的问题,通常是由于在 Windows 记事本中以非 UTF-8 编码粘贴所致。WebGuard 的源码仅使用纯 ASCII 字符,并在写入报告时明确指定使用 `UTF-8` 编码以避免此问题 —— 如果仍然看到此现象,请重新下载/重新保存受影响的文件。 **问:目标超时或连接失败。** 答:这是一个网络层面的问题(防火墙、DNS、目标停机或 ISP 屏蔽),而不是扫描器的 bug。请先使用 `https://example.com` 进行验证,以确认 WebGuard 本身能正常工作,然后再重新测试原始目标。 **问:XSS/SQLi 模块报告 "No testable parameters or forms found."(未找到可测试的参数或表单)。** 答:当目标页面没有 URL 参数或 `` 字段时,这是正确的行为 —— 因为根本没有任何可以注入的地方。请尝试寻找带有搜索栏、登录表单或 `?id=` 风格 URL 的目标。 **问:扫描现代站点(React/Angular/Vue)时显示 0 个表单,尽管该站点明显有登录/搜索框。** 答:WebGuard 的爬虫读取的是服务器返回的原始 HTML —— 它不会执行 JavaScript。单页应用(SPA)通常是在页面加载后在客户端渲染其表单,因此它们不会出现在初始的 HTML 响应中。这是一个已知的限制(请参阅[路线图](#-roadmap)) —— 未来的版本可以添加无头浏览器渲染(例如 Playwright)来处理此问题。您仍然可以通过将带有查询参数的 URL 传递给 `xss`/`sqli` 单模块命令,来直接测试已知的 API endpoint。 ## 🔮 路线图 - [ ] 无头浏览器爬虫(Playwright/Selenium)以支持 JavaScript 渲染的 SPA - [ ] 多线程爬取和扫描,以实现更快的全面扫描 - [ ] 基于布尔和基于时间的 SQLi 检测(除基于错误的检测外) - [ ] 跨多步骤页面流程的存储型 XSS 检测 - [ ] 基于指纹识别的软件版本进行 CVE 查询集成 - [ ] PDF 报告导出 - [ ] Docker 化部署 - [ ] 可配置的扫描配置文件(快速扫描与全面扫描) - [ ]工具链拼接的 JSON 输出 ## 🤝 贡献 欢迎您的贡献!如需做出贡献: 1. Fork 本仓库 2. 创建一个功能分支(`git checkout -b feature/your-feature`) 3. 使用清晰的信息提交您的更改 4. 发起一个 Pull Request,描述您所做的更改及其原因 对于较大的更改,请先发起一个 Issue 进行讨论,说明您希望添加或修改的内容。 ## 👤 作者与开发者 **Mahad Zulfiqar** WebGuard 的唯一设计者和开发者 —— 负责架构、爬虫、全部五个检测模块、报告引擎以及 CLI。 本项目是作为早期侦察工具 (ReconX) 的后续项目独立构建的,将其扩展到了全面的 Web 应用程序漏洞扫描领域。 ## 🙏 致谢 - [OWASP Top 10](https://owasp.org/www-project-top-ten/) —— 漏洞分类参考 - [OWASP Testing Guide](https://owasp.org/www-project-web-security-testing-guide/) —— 方法论参考 - [Requests](https://docs.python-requests.org/) —— Python 的 HTTP 库 - [Beautiful Soup](https://www.crummy.com/software/BeautifulSoup/) —— HTML 解析库 - [OWASP ZAP](https://www.zaproxy.org/) / [Nikto](https://github.com/sullo/nikto) —— 扫描器架构的灵感来源 ## ⚠️ 免责声明 WebGuard **仅严格用于教育目的和授权的安全测试**。在未经所有者**明确书面许可**的情况下,对任何系统或域名运行此工具都是非法且不道德的。扫描结果仅为检测信号,并非已确认的漏洞利用,在采取任何行动之前,应始终进行手动验证。 作者和贡献者对因使用此工具而造成的任何误用或损害不承担任何责任。请始终在签署的合约或授权协议的范围内进行操作。 ## 📜 许可证 本项目采用 [MIT License](LICENSE) 发布 —— 欢迎在使用时注明出处后自由使用、修改和分发。
标签:CISA项目, Python, SQL注入检测, Web漏洞扫描, XSS检测, 无后门, 逆向工具