wwang210/web-vuln-scanner
GitHub: wwang210/web-vuln-scanner
一款基于 Python 的命令行 Web 漏洞扫描器,通过自动爬取目标站点并检测 XSS、SQLi、开放重定向和 CORS 配置错误等常见安全问题,帮助用户在授权环境下快速评估 Web 应用安全状况。
Stars: 1 | Forks: 0
# Web 漏洞扫描器
一个轻量级的 Python CLI 工具,可以爬取目标网站并自动检测常见的 Web 安全漏洞。专为教育用途、授权的渗透测试和 CTF 挑战而构建。
## ⚠️ 法律免责声明
## 功能
| 检查项 | 技术 |
|-------|-----------|
| **反射型 XSS** | 向参数注入探测 payload;检测是否有未转义的原始标签被回显 |
| **SQL 注入** | 基于错误(数据库错误字符串匹配)+ 布尔盲注指示器(响应大小差异) |
| **开放重定向** | 检测遵循域外 `3xx` 响应的重定向类参数 |
| **CORS 错误配置** | 探测 origin 反射 + `Access-Control-Allow-Credentials: true` |
## 工作原理
### 阶段 1 — 爬取
爬虫从您的目标 URL 开始,并 BFS(广度优先)抓取所有同源页面(绝不跟随域外链接)。对于每个页面,它会收集:
- 已发现链接中的 URL 查询参数
- 表单的 action URL、方法(GET/POST)和输入字段名称
### 阶段 2 — 扫描
每个检查模块都会接收到完整的已发现 endpoint 列表,并遍历每一个参数:
**XSS** — 将类似 `` 和 `">
` 的 payload 发送到每个参数中,并检查 HTML 响应中是否出现了未经转义的原始标签。
**SQLi** — 两种检测策略:
- *基于错误*:注入 `'`、`"`、`\\` 并扫描已知的数据库错误字符串(MySQL、PostgreSQL、MSSQL、Oracle、SQLite)
- *布尔盲注指示器*:比较真实条件(`' OR '1'='1'`)与虚假条件(`' OR '1'='2'`)下的响应大小 —— 显著的差异表明这是一个可注入的参数
**开放重定向** — 查找名为 `next`、`redirect`、`return_url`、`goto` 等的参数,注入外部 canary URL,并检查服务器是否发出了指向域外的 `3xx` 响应。
**CORS** — 发送带有精心构造的 `Origin` 头部(`evil.example.com`、`null`、`evil.your-target.com`)的请求,并标记出服务器将攻击者的 origin 回显并附带 `Access-Control-Allow-Credentials: true` 的响应。
### 阶段 3 — 报告
终端中的检测结果会按严重程度以颜色区分,并可选择导出为 JSON 格式。
```
Target URL
│
▼
Crawler (BFS links + form extraction)
│
▼
Endpoint list [{url, method, params}]
│
├──▶ XSS check
├──▶ SQLi check
├──▶ Open Redirect check
└──▶ CORS check
│
▼
Reporter (colored terminal + optional JSON)
```
## 安装
**环境要求:** Python 3.10+,pip
```
git clone https://github.com/your-username/web-vuln-scanner.git
cd web-vuln-scanner
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
```
## 用法
### 基础扫描(所有检查项)
```
python main.py https://your-target.com
```
### 常用选项
```
# 将结果保存到 JSON 报告
python main.py https://your-target.com --out report.json
# 仅运行特定检查
python main.py https://your-target.com --checks xss sqli
# 扫描已认证的 session
python main.py https://your-target.com --cookies "session=abc123; csrf=xyz"
# 限制 crawl 深度并减慢请求
python main.py https://your-target.com --max-pages 30 --delay 0.5
# 跳过 TLS 证书验证(自签名证书)
python main.py https://your-target.com --no-verify
```
### 所有标志
| 标志 | 默认值 | 描述 |
|------|---------|-------------|
| `--checks` | all | 以空格分隔的列表:`xss sqli redirect cors` |
| `--max-pages` | `100` | 最大爬取页面数 |
| `--delay` | `0.2` | 请求之间的间隔秒数 |
| `--cookies` | — | 认证 cookies,格式为 `"name=val; name2=val2"` |
| `--user-agent` | `VulnScanner/1.0` | 自定义 User-Agent 字符串 |
| `--no-verify` | false | 禁用 TLS 证书验证 |
| `--out` | — | 将 JSON 报告写入此文件路径 |
## 授权测试目标
**绝对不要对您不拥有的网站进行测试。** 请使用以下合法目标之一代替:
### 本地(Docker — 推荐)
```
# OWASP Juice Shop — 现代、真实的 Node.js 应用
docker run -d -p 3000:3000 bkimminich/juice-shop
python main.py http://localhost:3000
# DVWA — 涵盖 XSS、SQLi、CSRF 等的经典 PHP 应用
docker run -d -p 80:80 vulnerables/web-dvwa
python main.py http://localhost:80
# WebGoat — Java/Spring,OWASP 维护
docker run -d -p 8080:8080 webgoat/goat-and-wolf
python main.py http://localhost:8080
```
### 在线实验平台
- [PortSwigger Web Security Academy](https://portswigger.net/web-security/all-labs) — 免费的基于浏览器的实验室,每个实验室都提供一个唯一的授权子域名
- [HackTheBox](https://www.hackthebox.com/) / [TryHackMe](https://tryhackme.com/) — 启动一台机器,在 VPN 内进行扫描
- [OWASP Juice Shop (在线演示)](https://juice-shop.herokuapp.com) — 公开托管,已授权用于测试
## 项目结构
```
web-vuln-scanner/
├── main.py # CLI entry point
├── requirements.txt
└── scanner/
├── crawler.py # BFS site crawler
├── xss.py # Reflected XSS detection
├── sqli.py # SQL injection detection
├── redirect.py # Open redirect detection
├── cors.py # CORS misconfiguration detection
├── models.py # Finding / Severity dataclasses
└── reporter.py # Terminal + JSON output
```
## 示例输出
```
Web Vulnerability Scanner
================================================================
Target : http://localhost:3000
Checks : cors, redirect, sqli, xss
Pages : up to 100
================================================================
Only use on systems you own or have permission to test.
[*] Crawling http://localhost:3000 ...
Found 42 pages, 138 endpoints/forms
[*] Running XSS checks ...
3 finding(s)
[*] Running SQLi checks ...
2 finding(s)
[*] Running open-redirect checks ...
1 finding(s)
[*] Running CORS checks ...
0 finding(s)
================================================================
Target : http://localhost:3000
Pages : 42
Elapsed : 38.2s
Findings: 6
================================================================
[HIGH] (3 issues)
------------------------------------------------------------
Reflected XSS
GET http://localhost:3000/search param=q
Payload reflected: ">
...
```
## 许可证
MIT — 可免费使用、修改和分发。详情请参阅 `LICENSE`。
标签:CISA项目, Python, Web安全, 加密, 文档结构分析, 无后门, 漏洞扫描器, 蓝队分析, 逆向工具