Mapfoi/Web-vulnerability-scanner
GitHub: Mapfoi/Web-vulnerability-scanner
基于 Python asyncio 的高性能 Web 漏洞扫描器,提供七项内置安全检查并支持多来源目标导入与多格式报告导出。
Stars: 0 | Forks: 0
# 🕸️ Web 漏洞扫描器
[](https://www.python.org/downloads/)
[](LICENSE)
[](https://docs.aiohttp.org/)
[](https://github.com/Textualize/rich)
**高性能异步 Web 漏洞扫描器**,专为教育目的设计。演示了 Python 中的高吞吐量网络编程原理、异步 HTTP 请求处理以及模块化架构。
## 📌 功能
- ⚡ **异步扫描** — 使用 `asyncio` + `aiohttp` 实现数千个并发目标
- 🔍 **7 项内置安全检查**:
- 暴露的 Git 仓库 (`.git/HEAD`)
- 可访问且包含敏感信息的 `.env` 文件
- 备份文件 (`backup.zip`、`dump.sql` 等)
- 默认管理面板 (`/wp-admin`、`/phpmyadmin`)
- 缺失的安全标头 (XFO, CSP, XCTO)
- 反射型 XSS (参数中的标记注入)
- 响应中的 SQL 错误特征
- 🎛️ **目标来源**:文本文件、CSV、单个 URL、**crt.sh** (子域名)、**Shodan**
- 📊 **速率限制** (Token Bucket):全局和单主机限制
- 🖥️ 基于 `argparse` 和 rich 彩色输出的 **CLI**
- 🖱️ **TUI 菜单**:支持交互式控制、暂停/恢复以及实时配置更改
- 📄 **报告格式**:JSON、CSV、人类可读的 `.txt`
- 🧩 **清晰的架构**:核心层 (`core/`) 完全独立于 UI 层 (`cli/`、`gui/`)
## 🚀 快速开始
### 前置条件
- Python 3.11 或更高版本
- 建议使用虚拟环境
### 安装
```
git clone https://github.com/Mapfoi/Web-vulnerability-scanner.git
cd web-vulnerability-scanner
# 创建并激活 virtual environment
python -m venv .venv
source .venv/bin/activate # Linux/macOS
.venv\Scripts\activate # Windows
# 安装 dependencies
pip install -r scanner/requirements.txt
```
### 使用示例
```
# 扫描单个 URL
python scanner/scanner.py --url https://example.com --checks all
# 从文件进行批量扫描
python scanner/scanner.py --targets urls.txt --concurrency 200 --rate 30
# 通过 crt.sh 收集 subdomains 并扫描它们
python scanner/scanner.py --domain example.com --crtsh-retries 6
# 交互式 TUI 菜单
python scanner/scanner.py
```
## 🧠 架构
```
web-vulnerability-scanner/
├── scanner/ # Root package
│ ├── core/ # 🔧 Core engine (UI-independent)
│ │ ├── engine.py # ScannerEngine facade
│ │ ├── events.py # EventEmitter + ScanEvent
│ │ ├── http_client.py # HTTP client with retry & rate limiting
│ │ ├── rate_limiter.py # Token Bucket (global + per-host)
│ │ ├── targets.py # URL normalization, target loading
│ │ ├── checks/ # Security check modules (7)
│ │ ├── output.py # Streaming JSON/CSV/TXT writer
│ │ └── dns_resolver.py # Async DNS resolver with cache
│ ├── cli/ # 🖥️ Command-line interfaces
│ │ ├── main.py # argparse + engine launcher
│ │ ├── tui_menu.py # Interactive TUI (rich)
│ │ └── console_handler.py # Event handler for console output
│ ├── gui/ # 🖼️ PyQt stub (future extension)
│ ├── scanner.py # Entry point
│ └── requirements.txt # Dependencies
├── README.md # This file
└── .gitignore # Git exclusions
```
## ⚙️ 命令行参数
| 参数 | 描述 | 默认值 |
|-----------|-------------|---------|
| `--targets` | 包含 URL 列表的文件 | — |
| `--url` | 单个待扫描 URL | — |
| `--domain` | 用于通过 crt.sh 枚举子域名的域名 | — |
| `--csv` | 包含目标的 CSV 文件 | — |
| `--csv-column` | 包含 URL 的列名 | `url` |
| `--shodan-query` | Shodan 搜索查询 | — |
| `--shodan-key` | Shodan API 密钥 | — |
| `--checks` | `all` 或逗号分隔的列表 | `all` |
| `--concurrency` | 并行工作线程数 | `500` |
| `--rate` | 全局速率限制 (req/s, 0 = 无限制) | `0` |
| `--per-host-rate` | 单主机速率限制 (req/s) | `30` |
| `--timeout` | HTTP 超时 (秒) | `3.0` |
| `--retries` | 失败重试次数 | `1` |
| `--output` | 结果文件的基本名称 | `results` |
| `--format` | `json`, `csv`, `both`, `all` | `both` |
| `--verbose` | 详细输出 | `False` |
| `--quiet` | 最少输出 | `False` |
| `--allow-private` | 允许扫描本地/私有地址 | `False` |
| `--tui` | 强制打开 TUI 菜单 | `False` |
## 📊 报告示例
扫描完成后,将创建以下文件:
- `results.txt` — 按严重程度分组的人类可读报告
- `results.json` — 用于机器处理的结构化 JSON
- `results.csv` — 用于 Excel 的表格格式
控制台输出示例:
```
▸ Missing Security Headers — http://example.com
Missing or invalid: X-Frame-Options, Content-Security-Policy
Scan finished: 150 URLs, 12 findings in 8.3s
```
## 🧪 开发者指南:添加新检查
1. 在 `scanner/core/checks/` 中创建文件,例如 `new_check.py`
2. 继承 `BaseCheck` 并实现 `check()` 方法
3. 将该类添加到 `scanner/core/checks/__init__.py` 中的 `ALL_CHECKS`
```
from scanner.core.checks.base import BaseCheck, Severity, VulnerabilityResult
from scanner.core.http_client import HttpClient
class MyCheck(BaseCheck):
name = "my_check"
description = "Description of my check"
severity = Severity.MEDIUM
async def check(self, url: str, client: HttpClient):
# your logic here
if condition:
return VulnerabilityResult(
name="My Vulnerability",
severity=self.severity,
evidence="...",
target=url,
)
return None
```
## 📚 演示的教育概念
| 概念 | 实现 |
|---------|----------------|
| OSI 模型 (传输层 + 应用层) | `http_client.py`, `rate_limiter.py` |
| 异步 I/O (事件循环, 协程) | `engine.py`, 所有 `check` 模块 |
| Token Bucket 速率限制 | `rate_limiter.py` |
| TCP 连接、keep-alive、连接池 | `aiohttp.TCPConnector`, `ClientSession` |
| HTTP 标头、状态码、超时 | `http_client.py` |
| 带缓存的 DNS 解析 | `dns_resolver.py` |
| 单个 URL 上的并行检查 | `engine.py` (`_run_checks_parallel`) |
| 生产者-消费者模式 | `TargetQueue` + workers |
| 事件驱动架构 | `events.py`, `EventEmitter` |
| User-Agent 轮换 | `http_client.py` |
## ⚠️ 负责任地使用
**本工具仅供教育目的及测试您拥有书面许可的系统使用。** 未经授权的扫描可能会违反计算机安全法及目标服务的服务条款。
请始终遵守:
- 扫描前获取许可
- 使用 `--rate` 参数以减轻负载
- 未经明确授权,切勿测试政府、银行或关键基础设施
## 🤝 许可证
MIT 许可证 — 可自由使用、修改和分发,但需注明出处。
## 📬 反馈
如果您发现 Bug 或有建议,请提交 Issue 或 Pull Request。也欢迎有关课程作业的问题。
⭐ 如果您觉得有用,请为本仓库点个 Star!
标签:Python, Web漏洞扫描器, 主机安全, 实时处理, 密码管理, 异步IO, 数据泄露, 无后门, 计算机取证, 逆向工具