MFDosiir/web-vulnerability-scanner

GitHub: MFDosiir/web-vulnerability-scanner

一款轻量级的 Python 命令行 Web 漏洞扫描器,旨在帮助用户学习 AppSec 概念并对常见 Web 安全配置缺陷进行基础检测。

Stars: 0 | Forks: 0

# 🔍 Web 漏洞扫描器 一款轻量级、教育性质的命令行工具,用于扫描网站中常见的安全配置缺陷——旨在帮助您学习真实的 AppSec 概念,并在个人作品集中进行展示。 ## 检测内容 ### 1 · 安全 Header 检查 HTTP 响应头中缺失或配置不当的安全控制项。 每个 header 都映射到 [OWASP Top 10](https://owasp.org/www-project-top-ten/) 中的真实攻击类别。 | Header | 预防的攻击 | OWASP 参考 | |---|---|---| | `Strict-Transport-Security` | SSL 剥离 / 降级攻击 | A02 | | `Content-Security-Policy` | 跨站脚本攻击 (XSS) | A03 | | `X-Frame-Options` | 点击劫持 | A05 | | `X-Content-Type-Options` | MIME 类型嗅探攻击 | A05 | | `Referrer-Policy` | 会话 token 泄露 | A01 | | `Permissions-Policy` | 功能滥用(摄像头、麦克风、定位) | A05 | ### 2 · 暴露的敏感文件 探测约 25 个常见路径,查找绝不应公开访问的文件: `.git/config`、`.env`、`phpinfo.php`、数据库转储文件、管理面板等。 ### 3 · 反射型 XSS 发现目标页面上的 HTML 表单,并使用无害的 payload 探测文本输入框,以检测响应体中是否存在未转义的反射。 ### 4 · SQL 注入 向表单字段提交常见的 SQL 错误触发 payload,并标记泄露数据库错误字符串(MySQL、PostgreSQL、SQLite、MSSQL、Oracle)的响应。 ### 5 · 服务器版本泄露 检查 `Server`、`X-Powered-By` 和 `X-AspNet-Version` header 中是否包含可帮助攻击者指纹识别技术栈的版本字符串。 ### 6 · Cookie 标志分析 检查 `Set-Cookie` header 是否缺失 `Secure`、`HttpOnly` 和 `SameSite` 标志,并解释每种缺失标志可能带来的风险。 ## 快速开始 ``` # 1. Clone 仓库 git clone https://github.com/MFDosiir/web-vulnerability-scanner.git cd web-vulnerability-scanner # 2. 安装依赖项(需要 Python 3.8+) pip install -r requirements.txt # 3. 扫描目标 — 终端输出 python -m scanner.main https://example.com # 对于本地练习目标(例如 localhost 上的 Juice Shop): python -m scanner.main http://localhost:3000 --allow-internal # 4. 生成 HTML 报告 python -m scanner.main https://example.com --output html # → 报告保存至 reports/report_YYYYMMDD_HHMMSS.html # 5. 生成 JSON 报告(用于 CI/CD pipelines) python -m scanner.main https://example.com --output json # → 报告保存至 reports/report_YYYYMMDD_HHMMSS.json # 6. 使用自定义 config 文件 python -m scanner.main https://example.com --config config.example.yml # 7. 运行测试 pytest tests/ -v ``` ## 输出示例(终端) ``` ============================================================ SCAN REPORT Target : https://juice-shop.herokuapp.com Time : 2024-12-01 14:32:11 ============================================================ [ Security Headers ] 1 passed 5 failed (of 6 checked) ✔ Strict-Transport-Security ✘ Content-Security-Policy [HIGH] Why: Missing CSP makes XSS attacks far easier ... Ref: OWASP A03 – Injection (XSS) Fix: Add header → default-src 'self'; script-src 'self' ... [ Exposed Files ] Checked 25 paths · 2 exposed · 0 blocked [EXPOSED] CRITICAL /.git/config Git config file — can expose repo URL and credentials URL: https://juice-shop.herokuapp.com/.git/config ``` ## 项目结构 ``` web-vuln-scanner/ ├── scanner/ │ ├── main.py # CLI entry point (parallel scan orchestration) │ ├── config.py # YAML config loader │ ├── report.py # Terminal, HTML, and JSON report generator │ ├── utils/ │ │ ├── forms.py # Shared HTML form discovery helpers │ │ ├── http_client.py # HTTP requests with SSRF guards and size limits │ │ └── url_safety.py # URL validation and same-origin checks │ └── checks/ │ ├── headers.py # Security headers check │ ├── exposed_files.py # Sensitive file/path probing │ ├── xss.py # Reflected XSS form probing │ ├── sqli.py # Error-based SQL injection detection │ ├── server_info.py # Server banner / version disclosure │ └── cookies.py # Cookie flag analysis ├── tests/ # Unit tests (pytest) ├── reports/ # Generated reports (git-ignored) ├── config.example.yml # Sample YAML config ├── requirements.txt ├── SECURITY.md # How to report vulnerabilities in this tool └── README.md ``` ## 路线图 - [x] 向发现的表单注入基础 XSS payload - [x] SQL 注入检测(基于错误) - [x] 服务器标识 / 版本泄露检测 - [x] Cookie 标志分析(`Secure`、`HttpOnly`、`SameSite`) - [x] 多线程扫描提升速度 - [x] 输出 JSON 以集成到 CI/CD pipeline - [x] 通过配置文件自定义路径列表和 payload ## 局限性 本扫描器专为**学习及对自己拥有的网站进行快速检查**而设计。 它不能替代完整的渗透测试,也无法替代 OWASP ZAP 或 Burp Suite 等专业工具。 | 领域 | 局限性 | |---|---| | **扫描范围** | 仅限单个 URL —— 不进行爬虫或多页面发现 | | **表单发现** | 仅限静态 HTML (BeautifulSoup)。无法检测 JavaScript 渲染的表单(例如许多 SPA) | | **XSS / SQLi** | 仅限反射型 XSS 和基于错误的 SQLi —— 不支持存储型、基于 DOM、盲注或基于时间的检测 | | **暴露文件** | 只要返回 `200` 响应即视为已暴露。对于每个路径都返回 `200` 的 SPA,可能会产生误报 | | **SSRF 防护** | 会阻止 localhost、私有 IP 和混淆的 IP 字面量。无法完全防御 DNS 重绑定主机名(例如 `*.nip.io`) | | **合规性** | 扫描结果仅供参考,不具有权威性 —— 请勿用于审计或合规性审批 | 显示清晰的报告仅意味着**在此工具的检测范围内未发现问题**,并不代表目标是绝对安全的。 ## 安全性 该扫描器包含基础的安全加固(SSRF 防护、HTML 报告转义、资源限制)。 有关如何报告**此工具本身**的漏洞,请参阅 [SECURITY.md](SECURITY.md)。 **本地练习目标** —— 扫描 `localhost` 或私有 IP 地址需要显式授权: ``` python -m scanner.main http://localhost:3000 --allow-internal ``` `--allow-internal` 是一个**仅限 CLI** 的标志(无法通过 YAML 设置),应仅用于故意设计为存在漏洞的本地靶场,例如 Juice Shop 或 DVWA。 ## 涵盖概念 构建此项目将教会您: - HTTP 请求/响应循环在 header 层面的工作原理 - OWASP Top 10 以及每个类别在实际中的含义 - 为什么暴露 `.git`、`.env` 等类似文件会造成灾难性后果 - 基于表单的注入测试(XSS 和基于错误的 SQLi) - Cookie 安全标志与服务器版本泄露 - 专业扫描工具(Nikto、OWASP ZAP)的枚举方法 - Python 的 `requests`、参数解析、并发、文件 I/O 以及单元测试 ## 安全练习目标 以下是为学习设计的** intentionally vulnerable**(故意存在漏洞)应用: | 目标 | 运行方式 | |---|---| | [OWASP Juice Shop](https://owasp.org/www-project-juice-shop/) | `docker run -p 3000:3000 bkimminich/juice-shop` | | [DVWA](https://dvwa.co.uk/) | `docker run -p 80:80 vulnerables/web-dvwa` | | [HackTheBox](https://www.hackthebox.com/) | 基于 Web 的实验室(提供免费额度) | ## 许可证 MIT —— 可免费使用、学习和扩展。
标签:CISA项目, LNA, Python, Splunk, Web安全, 加密, 安全规则引擎, 文档结构分析, 无后门, 漏洞扫描器, 蓝队分析, 逆向工具