NikoloziKhachiashvili/web-vuln-scanner2
GitHub: NikoloziKhachiashvili/web-vuln-scanner2
一款用于授权安全测试的 Python 命令行 Web 漏洞扫描器,检测 SQL 注入、XSS 等常见漏洞并生成带严重程度分级的 Markdown 报告。
Stars: 1 | Forks: 0
# web-vuln-scanner
一个用于**授权安全测试**的 CLI Web 漏洞扫描器。将其指向您拥有或已获得明确书面测试许可的 URL,它将按顺序运行七项检查,在终端打印彩色摘要,并将 Markdown 报告保存到磁盘。
## 环境要求
- Python 3.10 或更高版本
- pip
## 安装
```
# 克隆 repository
git clone https://github.com/your-org/web-vuln-scanner.git
cd web-vuln-scanner
# 安装(仅 runtime dependencies)
pip install -e .
# 安装(包含 development/testing dependencies)
pip install -e ".[dev]"
```
## 用法
`--authorized` 标志是**必需的**。它作为您拥有扫描目标许可的明确确认。
```
# 基础扫描
python -m web_vuln_scanner --authorized https://example.com
# 扫描带 query parameters 的 URL(启用 SQLi、XSS 和 traversal 检查)
python -m web_vuln_scanner --authorized "https://example.com/page?id=1"
# 自定义 timeout 和 report 输出目录
python -m web_vuln_scanner --authorized https://example.com --timeout 15 --output-dir ./my-reports
# 隐藏详细的 per-finding detail panels
python -m web_vuln_scanner --authorized https://example.com --no-details
```
如果您通过 `pip install -e .` 安装,也可以使用 `web-vuln-scanner` 命令:
```
web-vuln-scanner --authorized https://example.com
```
### CLI 选项
| 选项 | 默认值 | 描述 |
|---|---|---|
| `url` | *(必填)* | 要扫描的目标 URL |
| `--authorized` | `False` | **必需。** 确认您拥有扫描目标的许可 |
| `--timeout SECONDS` | `10` | 单次请求的超时时间(秒) |
| `--output-dir DIR` | `reports/` | 用于保存 Markdown 报告的目录 |
| `--no-details` | `False` | 跳过详细的单项发现详情面板 |
### 退出代码
| 代码 | 含义 |
|---|---|
| `0` | 扫描完成 — 未发现漏洞 |
| `1` | 扫描完成 — 检测到一个或多个发现 |
| `2` | 未传递 `--authorized` 标志 |
## 检查内容
每项检查都是独立的;某项检查失败不会影响其他检查。
| 检查项 | 严重性范围 | 描述 |
|---|---|---|
| **安全标头 (Security Headers)** | 低 – 中 | 检查缺失或配置错误的 `Strict-Transport-Security`, `Content-Security-Policy`, `X-Frame-Options`, `X-Content-Type-Options`, `Referrer-Policy` 和 `Permissions-Policy` 标头 |
| **Cookie 安全性** | 低 – 中 | 检测缺少 `HttpOnly`, `Secure` 或 `SameSite` 标志的 Cookie |
| **敏感文件** | 低 – 严重 | 探测约 30 个常见的敏感路径(如 `.env`, `.git/config`, `backup.sql`, `id_rsa` 等),并根据内容签名确认发现以减少误报 |
| **SQL 注入** | 严重 | 向每个 URL 查询参数注入 8 个基于错误的 payload,并匹配 MySQL, PostgreSQL, Oracle, MSSQL 和 SQLite 的数据库错误模式 |
| **跨站脚本攻击 (XSS)** | 高 | 向每个查询参数注入 7 个反射型 XSS payload,并检查 payload 是否逐字出现在响应正文中 |
| **开放重定向 (Open Redirect)** | 中 | 测试现有查询参数和 15 个常见的重定向参数名(例如 `redirect`, `next`, `url`),检查是否存在未经验证的外部主机重定向 |
| **目录遍历 (Directory Traversal)** | 严重 | 向每个查询参数注入 8 个遍历 payload(Unix 和 Windows 变体,URL 编码形式),并检查 `etc/passwd` 或 `win.ini` 内容签名 |
## 输出
### 终端
扫描器使用 [Rich](https://github.com/Textualize/rich) 进行终端输出:
- 进度条显示每项正在运行的检查
- 汇总表显示按严重性(Critical / High / Medium / Low)统计的发现数量
- 详情面板显示每项发现的描述、证据和修复建议(可通过 `--no-details` 禁止显示)
### Markdown 报告
每次扫描后,无论是否检测到发现,Markdown 报告都会保存到 `--output-dir` 目录(默认:`reports/`)。文件名包含目标主机和扫描时间戳:
```
reports/scan_https_example.com_20260310_143022.md
```
报告包含:
- 目标 URL、开始时间和持续时间
- 严重性汇总表
- 每项发现的完整详情(严重性、URL、描述、证据、建议)
## 运行测试
```
# 运行所有测试并生成 coverage report
pytest
# 运行特定测试文件
pytest tests/test_sqli.py
# 按名称运行单个测试
pytest tests/test_sqli.py::test_no_params_returns_empty
# 不使用 coverage 运行(更快)
pytest --no-cov
```
测试覆盖率必须保持在 **80%** 或以上(由 pytest 配置强制执行)。当前覆盖率:89 个测试达到 **97.64%**。
## 项目结构
```
src/web_vuln_scanner/
cli.py # Argument parsing and main entry point
scanner.py # Session setup, check orchestration
models.py # Finding, ScanResult, Severity dataclasses
reporter.py # Markdown report generation
ui.py # Rich terminal output helpers
checks/
security_headers.py
cookie_security.py
sensitive_files.py
sqli.py
xss.py
open_redirect.py
directory_traversal.py
tests/
conftest.py # Shared fixtures (session, base_url, tmp_reports)
test_*.py # One test file per module/check
reports/ # Generated Markdown reports (gitignored)
```
## 添加新检查
1. 在 `src/web_vuln_scanner/checks/mycheck.py` 中创建一个符合以下签名的函数:
def check_mycheck(session: requests.Session, url: str, timeout: int = 10) -> list[Finding]:
...
2. 从 `src/web_vuln_scanner/checks/__init__.py` 中导出它。
3. 将其添加到 `scanner.py` 中的 `_CHECKS` 列表中:
("My Check Name", check_mycheck),
该检查将自动显示在进度条中,其发现也将包含在报告中。
## 许可证
MIT License
Copyright (c) 2026 Nikolozi Khachiashvili
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
标签:AES-256, CISA项目, Markdown报告, Python, SQLi, SQL注入检测, Web安全, XSS检测, 加密, 安全测试, 安全规则引擎, 开放重定向, 授权测试, 攻击性安全, 无后门, 漏洞扫描器, 漏洞评估, 网络安全, 自动化安全工具, 蓝队分析, 跨站脚本攻击, 逆向工具, 隐私保护