Iammythbuster/vulnscan
GitHub: Iammythbuster/vulnscan
一个轻量级的教育型Web漏洞扫描器,帮助理解常见漏洞原理并生成可视化报告。
Stars: 0 | Forks: 0
=======
# vulnscan
# 漏洞扫描器
# VulnScan




**⚠️ 仅扫描您拥有或获得明确书面测试授权的资产。** 在大多数司法管辖区,未经授权的扫描是非法的。
## 功能简介
VulnScan 会对目标 Web 应用进行爬取,并测试 GET 参数、表单、请求头、Cookie、传输层及已知路径中常见的漏洞。它会生成一个单页 HTML 报告,其中包含严重程度划分、OWASP 映射、证据片段以及修复建议。
### 执行的检测
| 类别 | 检测内容 |
|---|---|
| **注入 (SQLi)** | 针对 GET 参数的基于错误的响应和布尔差异响应 |
| **注入 (XSS)** | 在 HTML 上下文中反射的载荷 |
| **开放重定向** | 接受外部 URL 的重定向提示参数 |
| **安全响应头** | CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy |
| **Cookie 安全** | 缺失 `Secure` / `HttpOnly` / `SameSite` 标志 |
| **传输安全** | 明文 HTTP,缺失 HSTS |
| **CORS** | 通配符源、凭证反射、任意源回显 |
| **信息泄露** | `Server` / `X-Powered-By` 响应头信息、堆栈跟踪、泄露的 API 密钥 |
| **敏感文件** | `/.env`, `/.git/config`, `/phpinfo.php`, `/server-status` 等 |
| **HTTP 方法** | 通过 OPTIONS 暴露的高危方法 (PUT, DELETE, TRACE) |
| **security.txt** | 针对 RFC 9116 披露联系人的信息性检查 |
### 特性
- 🖥️ **Web UI** — 粘贴 URL,点击扫描,实时查看进度
- 🌓 **后台扫描** — 非阻塞模式;阶段和计数器实时更新
- 💾 **历史记录** — 每次扫描都会保存并支持重新查看;重启后依然存在
- 🎯 **OWASP Top 10 映射** — 每个发现都会标记其对应的 2021 年分类
- 📊 **仪表盘报告** — 侧边栏导航、严重程度甜甜圈图、风险仪表盘、分类条形图、可过滤的发现结果表格、可展开的证据卡片
- 🖨️ **可导出** — 通过浏览器打印功能可生成整洁的 PDF
## 截图
## 快速开始
```
# 1. Clone and install
git clone https://github.com/IamMythbuster/vulnscan.git
cd vulnscan
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
# 2. Run the web UI
python app.py
# → opens on http://127.0.0.1:8000
# 3. (Optional) Launch the local vulnerable target for practice
python demo_target.py &
# → runs on http://127.0.0.1:5055
# 4. Open http://127.0.0.1:8000 in your browser, paste a URL,
# tick the consent checkbox, click Start Scan.
```
### 命令行替代方案
如果您不需要 Web UI,扫描器也可以独立运行:
```
python scanner.py http://127.0.0.1:5055 --out report.html
python scanner.py https://your-site.example.com --max-pages 30 --out r.html
```
| 参数 | 默认值 | 描述 |
|---|---|---|
| `--out` | `report.html` | 输出的 HTML 路径 |
| `--max-pages` | `15` | 爬取限制 |
| `--timeout` | `8` | 单次请求超时时间(秒) |
| `--no-verify` | 关闭 | 跳过 TLS 证书验证 |
## 项目布局
```
vulnscan/
├── app.py # Flask web server
├── scanner.py # Crawler + vulnerability checks
├── report.py # HTML dashboard renderer
├── demo_target.py # Deliberately-vulnerable Flask app (practice target)
├── templates/
│ ├── base.html # Shared sidebar layout
│ ├── index.html # Landing page: URL form + history
│ └── scanning.html # Live progress page with polling
├── scans/ # Runtime: JSON + HTML per scan
├── requirements.txt
├── LICENSE # MIT
└── README.md
```
### Web 应用工作原理
1. **`GET /`** 渲染 `index.html`,包含 URL 表单和历史记录表。
2. **`POST /scan`** 验证输入,生成 `scan_id`,生成一个运行 `run_scan()` 的 daemon 线程,并重定向到进度页面。
3. **`GET /scan/`** 渲染 `scanning.html`,该页面会每约 1 秒轮询一次 `/api/scan//status`。
4. **后台线程** 实例化 `Scanner(..., on_progress=callback)`。该回调会将实时的阶段和计数器更新写入受 `threading.Lock` 保护的内存字典中。
5. **完成后**,线程会调用 `render_report()` 并将 `scans/.html` 和 `scans/.json` 写入磁盘。轮询的 JS 看到 `status=done` 后,会将浏览器重定向到 `/scan//report`。
6. **历史记录** — 每次页面加载时,`load_history()` 会使用 glob 匹配 `scans/*.json` 并按时间戳排序。
## ⚠️ 合规使用
此工具执行的是**主动安全测试**。在以下法律中,对您不拥有或未获得明确授权测试的系统运行该工具属于违法行为:
- 🇺🇸 **美国** — Computer Fraud and Abuse Act (18 U.S.C. § 1030)
- 🇬🇧 **英国** — Computer Misuse Act 1990
- 🇦🇺 **澳大利亚** — Criminal Code Act 1995, Part 10.7
- 🇪🇺 **欧盟** — Directive 2013/40/EU
……以及其他大多数国家的同等法律。
**授权必须采用书面形式**,并由有权授予权限的人员提供。漏洞赏金计划(HackerOne、Bugcrowd、Intigriti)会发布范围规则 —— 在扫描前请仔细阅读。
### VulnScan 不能做什么
- ❌ 不能替代专业的渗透测试
- ❌ 不能替代代码审查或威胁建模
- ❌ 无法发现逻辑缺陷、身份验证绕过或链式漏洞利用
- ❌ 不具备隐蔽性 —— 请求会带有 `VulnScan/0.x` 的 user-agent 标识
对于严谨的工作,请使用专用工具:[OWASP ZAP](https://www.zaproxy.org/)、[Burp Suite](https://portswigger.net/burp)、[Nuclei](https://github.com/projectdiscovery/nuclei)、[sqlmap](https://sqlmap.org/)。
## 路线图
- [ ] 授权扫描(通过 session cookie 或登录表单)
- [ ] POST body 测试(出于安全考虑,目前仅支持 GET)
- [ ] CSRF token 存在性检查
- [ ] 用于 CI 集成的 JSON 输出
- [ ] 定时扫描(每日/每周)
- [ ] 同一目标连续扫描之间的差异视图
- [ ] 自定义检测模板(Nuclei 风格的 YAML)
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
作为一个教育项目构建。欢迎贡献;鼓励提出 issue 和提交 PR。
>>>>>>> REPLACE
标签:Flask, OWASP, Python, Web漏洞扫描, 安全工具, 密码管理, 数据泄露, 无后门, 自动化测试