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安全, 加密, 安全规则引擎, 文档结构分析, 无后门, 漏洞扫描器, 蓝队分析, 逆向工具