feadal/Web-vuln-scanner
GitHub: feadal/Web-vuln-scanner
一款轻量级 Python Web 漏洞扫描器,结合被动安全配置检查与主动 payload 探测,帮助开发者在已授权环境下快速发现并验证常见 Web 安全漏洞。
Stars: 0 | Forks: 0
# webscan
[](https://github.com/feadal/Web-vuln-scanner/actions/workflows/ci.yml)
[](LICENSE)
[](https://www.python.org/)
**webscan** 是一个轻量级的 Python **主动式** Web 漏洞扫描器,专为**已授权的**渗透测试、安全培训以及评估您自己的应用程序而设计。
它会爬取目标以获取输入点(URL 参数和表单字段),然后使用无害的 payload 对每个输入点进行探测,以**检测**真实的漏洞 —— 包括反射型 XSS、SQL 注入、OS 命令注入、路径遍历/LFI 和开放重定向 —— 同时还会对安全标头、cookies、TLS 和信息泄露进行被动检查。
## ⚠️ 法律声明
**仅**在您拥有或已获得明确书面测试授权的系统上使用 webscan。在许多司法管辖区,未经授权的扫描是非法的(例如美国的 CFAA、英国的 Computer Misuse Act)。您需对自己的工具使用行为负责;作者对此不承担责任。请参阅 [SECURITY.md](SECURITY.md)。
## 功能
### 主动检查(发送探测 —— 仅限已授权目标)
| 检查项 | 检测内容 | 技术 |
|---|---|---|
| `xss` | 反射型跨站脚本攻击 | HTML 元字符中的唯一 token,检查未编码的反射 |
| `sqli` | SQL 注入 | 基于报错(数据库错误特征)+ 布尔型差异分析 |
| `cmd-injection` | OS 命令注入 | 算术回显探测 (`$((A*B))`) —— shell 输出的乘积不在原始 payload 中 |
| `path-traversal` | 路径遍历 / LFI | `../` 样式的 payload,通过回读 `/etc/passwd` 进行确认 |
| `open-redirect` | 开放重定向 | 在重定向参数中使用无害的外部主机,检查 `Location` 标头 |
### 被动检查(始终安全)
| 检查项 | 检测内容 |
|---|---|
| `security-headers` | 缺失的 CSP、HSTS、X-Frame-Options、X-Content-Type-Options、Referrer-Policy |
| `cookies` | 缺少 `Secure` / `HttpOnly` / `SameSite` 属性的 cookies |
| `server-disclosure` | 通过 `Server`、`X-Powered-By` 导致的版本信息泄露 |
| `tls` | 纯 HTTP、无 HTTPS 重定向、无效的证书 |
| `sensitive-files` | 暴露的 `.git/`、`.env`、备份文件、目录列表 |
| `forms` | 通过 HTTP 传输的表单、通过 GET 提交密码、缺失 CSRF token |
**安全防护机制:** 同一主机的爬取范围、严格的请求预算(`--max-requests`)、可选的限流(`--delay`)以及受限的爬取深度(`--max-pages`)。
## 安装说明
```
git clone https://github.com/feadal/Web-vuln-scanner.git
cd Web-vuln-scanner
python -m venv .venv && source .venv/bin/activate
pip install -e .
```
## 用法
```
# 完整扫描(passive + active)
webscan https://example.com
# 仅 passive — 不发送任何 probes
webscan https://example.com --passive-only
# 选择特定检查
webscan https://example.com --checks xss,sqli,security-headers
# 调整 scope / politeness
webscan https://example.com --max-pages 20 --max-requests 500 --delay 0.2
# 面向 CI 的 JSON 报告
webscan https://example.com --format json --output report.json
# 列出所有检查
webscan --list-checks
```
退出代码:当未发现严重程度达到或高于 `--fail-on`(默认为 `medium`)的问题时返回 `0`,否则返回 `1` —— 非常适合在 CI 流水线中使用。
## 在内置的演示目标上进行尝试
该仓库提供了一个**刻意包含漏洞的**演示应用程序(仅限 localhost),以便您可以安全地观察扫描器的工作过程:
```
python examples/vulnerable_app.py # serves http://127.0.0.1:8000
webscan http://127.0.0.1:8000 # in another terminal
```
```
webscan 0.2.0 — target: http://127.0.0.1:8000
crawled injection points: 5 · requests sent: 96
[HIGH] cmd-injection OS command injection
↳ Shell evaluated probe on 'host' -> wvs578120end → param 'host'
[HIGH] path-traversal Path traversal / local file inclusion
↳ /etc/passwd content via 'file': root:x:0:0: → param 'file'
[HIGH] sqli Error-based SQL injection
↳ DB error on 'id': You have an error in your SQL syntax → param 'id'
[HIGH] xss Reflected cross-site scripting (XSS)
↳ Probe reflected un-encoded in parameter 'q' → param 'q'
[MEDIUM] open-redirect Open redirect
↳ Location -> https://wvs-...example.org/ (param 'next') → param 'next'
Total: 14 findings (6 high, 5 medium, 3 low)
```
## 工作原理
```
target ──▶ fetch landing page ──▶ passive checks (headers, cookies, TLS, …)
│
▼
crawler (same-host, bounded) ──▶ injection points (query params + form fields)
│
▼
for each point × active check ──▶ benign probe ──▶ analyse response ──▶ findings
```
## 开发说明
```
pip install -e ".[dev]"
pytest # 25 offline tests, no network
ruff check .
```
通过在 `webscan/checks/` 中继承 `PassiveCheck` 或 `ActiveCheck` 并在 `webscan/checks/__init__.py` 中注册,即可添加新的检查项。详情请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 许可证
[MIT](LICENSE)
标签:CISA项目, DOE合作, Python, Web漏洞扫描, 安全测试, 安全规则引擎, 攻击性安全, 无后门, 逆向工具