omarmohamedhassan24/Web_vulnerability_scanner
GitHub: omarmohamedhassan24/Web_vulnerability_scanner
一款基于 Python 的教育型 Web 漏洞扫描器,通过自动爬取和 payload 注入检测 XSS、SQL 注入及缺失安全标头,并附带靶场应用供安全练习。
Stars: 1 | Forks: 1
# Web 漏洞扫描器
一个基于 Python 命令行的 Web 漏洞扫描器,作为大学网络安全项目构建。它会爬取目标站点,将受控的测试 payload 注入到发现的输入框中,分析响应以寻找漏洞证据,并生成带有颜色的 CLI 摘要和样式化的 HTML/JSON 报告。
该扫描器配备了一个故意设计存在漏洞的 Flask “目标应用”,以便在一个安全、独立的环境中演练每一种检测技术。
## 检测范围
| 模块 | OWASP 2021 |
|---|---|
| 跨站脚本攻击 (XSS,反射型) | A03 — Injection |
| SQL 注入 (基于报错) | A03 — Injection |
| 缺失的安全标头 (CSP, X-Frame-Options, HSTS, X-Content-Type-Options, Referrer-Policy) | A05 — Security Misconfiguration |
## 安装
```
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
```
## 用法
在一个终端中启动故意设计存在漏洞的 Flask 应用:
```
cd target_app
python app.py
```
它运行在 `http://localhost:5000`。
在另一个终端中运行扫描器:
```
# 完整扫描
python scanner.py --url http://localhost:5000
# 仅特定模块
python scanner.py --url http://localhost:5000 --modules xss sqli
# 自定义输出和计时
python scanner.py --url http://localhost:5000 --output reports/demo.html --timeout 10 --delay 0.3
```
打开生成的报告:
```
start reports\scan_report.html
```
### CLI 标志
| 标志 | 默认值 | 用途 |
|---|---|---|
| `--url` | (必填) | 目标 URL。必须是 `localhost`、`127.0.0.1` 或白名单中的测试域名。 |
| `--output` | `reports/scan_report.html` | HTML 报告路径。JSON 文件将使用相同的主文件名存放在同目录下。 |
| `--timeout` | `5` | 每次请求的超时时间(秒)。 |
| `--delay` | `0.0` | 请求之间的休眠时间(秒)(针对公共目标的礼貌策略)。 |
| `--modules` | 全部 | 模块子集,可选 `headers`、`xss`、`sqli`。 |
## 项目结构
```
scanner.py CLI entry point
modules/
crawler.py BFS crawler — extracts URLs and forms
headers.py Missing-security-headers check
xss.py Reflected XSS scanner (threaded, context-aware)
sqli.py Error-based SQL injection scanner (threaded)
reporter.py HTML (Jinja2) + JSON report generation
utils.py load_payloads, CVSS-lite scoring
config.py Shared DELAY / TIMEOUT (set from CLI)
payloads/
xss_payloads.txt
sqli_payloads.txt
reports/
report_template.html Jinja2 HTML template
scan_report.html (generated)
scan_report.json (generated)
target_app/
app.py Deliberately vulnerable Flask app
```
## 技术栈
- Python 3
- 使用 `requests` 处理 HTTP
- 使用 `beautifulsoup4` 解析 HTML
- 使用 `jinja2` 渲染 HTML 报告
- 使用 `colorama` 提供 CLI 颜色
- 使用 `concurrent.futures.ThreadPoolExecutor` 进行并行表单扫描
- 使用 `flask` 作为内置的漏洞目标应用
## 包含的额外功能
- **多线程** — `scan_xss` 和 `scan_sqli` 通过 `ThreadPoolExecutor` 在各个表单间并发执行。
- **CVSS-lite 风险评分** — 每份报告都包含一个综合的 0–10 严重程度评分(`Critical=9, High=7, Medium=5, Low=3`,根据发现的结果取平均值)。
## 超出范围(刻意未实现)
本次提交的重点是上述三个模块。以下内容在项目计划中有所描述,但尚未构建:
- **开放重定向** (A01 — Broken Access Control)
- **目录遍历** (A01 — Broken Access Control)
- **敏感路径暴露探测** (A05 — Security Misconfiguration;在计划中与目录遍历模块打包在一起)
因此,CLI 的 `--modules` 标志仅公开了实际存在的模块。
## 已知限制
- **XSS 检测** 具有反射上下文感知能力(通过 `_payload_executes_in_html`),但并非完整上下文感知 —— 它不对属性边界、JS 字符串上下文或 DOM sink 进行建模。误报被最小化,但并未完全消除。
- **SQLi 检测** 仅限于基于报错的检测。屏蔽原始异常的框架(Spring Data, Django ORM, 加固过的 Flask)即使存在盲注/时间盲注也会显示为无漏洞。
- **爬虫不执行 JavaScript** — 单页应用将无法被充分探测。
## 免责声明
本工具作为大学网络安全课程的一部分,仅出于教育目的而构建。
- 仅扫描您拥有或获得 **明确书面许可** 进行测试的系统。
- 在大多数国家,未经许可扫描任何系统都是违法的。
- 内置的 Flask 应用仅供练习使用。
- 扫描器包含一个域名白名单(`localhost`、`127.0.0.1`、`testphp.vulnweb.com`),并拒绝扫描其他任何目标。
标签:CISA项目, Python, Web安全, 加密, 无后门, 漏洞扫描器, 蓝队分析