sanasimran1403-jpg/web-vuln-scanner
GitHub: sanasimran1403-jpg/web-vuln-scanner
一款基于 Python 的命令行 Web 漏洞扫描器,通过爬取目标站点并自动测试 SQL 注入、XSS、开放重定向和安全标头缺失等常见缺陷,支持认证扫描与 PDF 报告生成。
Stars: 0 | Forks: 0
# Web 漏洞扫描器
一个基于 Python 的 CLI Web 漏洞扫描器,它会爬取目标 URL 并主动测试常见的 Web 安全缺陷 —— SQL 注入、XSS、开放重定向、缺失的安全标头以及敏感文件暴露。支持通过 cookie 注入进行已认证扫描。
## 概述
Web 应用程序漏洞仍然是现实世界违规事件中最常见的攻击面。该工具演示了渗透测试人员针对 Web 目标将运行的完整黑盒扫描 pipeline:
1. **爬取** 目标 —— 自动发现所有页面、表单和参数
2. **测试标头** —— 检查缺失或配置错误的安全标头(CSP、HSTS、X-Frame-Options)
3. **注入 SQLi** —— 测试每个参数是否存在基于错误的 SQL 注入
4. **注入 XSS** —— 测试每个输入字段是否存在反射型跨站脚本攻击
5. **测试重定向** —— 检测 URL 参数中的开放重定向漏洞
6. **报告** —— 生成包含所有发现和证据的专业深色主题 PDF
所有模块均在隔离的本地实验室环境中针对 DVWA (Damn Vulnerable Web Application) 进行了端到端测试,而不是仅仅运行合成示例。
**环境:**
- 平台: Windows 11 + Python 3.11
- 目标: 运行在 localhost 上的 DVWA (Apache/MySQL)
- 认证: 基于 cookie 的会话注入,用于已认证扫描
## 功能覆盖范围 — 5/5
| # | 功能 | 技术 | 结果 |
|---|---|---|---|
| 1 | Web 爬取 | 递归链接发现、表单提取 | 构建完整站点地图 |
| 2 | 安全标头 | CSP、HSTS、X-Frame-Options、X-Content-Type 检查 | 标记缺失的标头 |
| 3 | SQL 注入 | 通过精心构造的 payload 进行基于错误的检测 | 严重 —— 在 DVWA 上确认 SQLi |
| 4 | XSS 检测 | 通过脚本注入 payload 实现反射型 XSS | 高 —— 在 DVWA 上确认 XSS |
| 5 | 开放重定向 | URL 参数操纵测试 | 检测到重定向漏洞 |
## 设置
```
pip install -r requirements.txt
```
## 用法
```
# 基础 scan(未认证)
python main.py scan --url http://target.com
# 使用 session cookie 进行认证 scan
python main.py scan --url http://localhost/dvwa --cookie "PHPSESSID=abc123;security=low"
# 仅 scan 特定 modules
python main.py scan --url http://target.com --modules sqli,xss,headers
# 查看 scan 历史
python main.py history
# 为上次 scan 生成 PDF 报告
python main.py report --id 1
```
## 1. Web 爬取
**命令:**
```
python main.py scan --url http://localhost/dvwa --cookie "PHPSESSID=abc123;security=low"
```
爬取逻辑:递归发现所有内部链接,提取所有 HTML 表单和输入字段,识别用于注入测试的 URL 参数,并遵守同域范围以避免爬取外部站点。
**结果:** 构建了完整的站点地图 —— 发现了 12 个页面,提取了 8 个表单,24 个参数已排队等待注入测试。
## 2. 安全标头检查
**命令:**
```
# 作为每次 scan 的一部分自动运行
python main.py scan --url http://target.com
```
检测逻辑:向目标根目录发送 HTTP GET 请求,并检查响应标头中是否存在 Content-Security-Policy、Strict-Transport-Security、X-Frame-Options、X-Content-Type-Options 和 Referrer-Policy 及其正确配置。
**结果:**
```
Content-Security-Policy : MISSING
Strict-Transport-Security: MISSING
X-Frame-Options : MISSING
X-Content-Type-Options : MISSING
Header Risk : HIGH
```
## 3. SQL 注入
**命令:**
```
python main.py scan --url http://localhost/vulnerabilities/sqli/?id=1&Submit=Submit \
--cookie "PHPSESSID=abc123;security=low"
```
检测逻辑:将基于错误的 SQLi payload(`'`, `''`, `' OR '1'='1`, `1' AND 1=2--`)附加到每个发现的参数中,并检查响应中是否存在数据库错误签名(MySQL、MSSQL、PostgreSQL、Oracle)。
**结果:**
```
URL : http://localhost/vulnerabilities/sqli/?id=1
Parameter: id
Payload : '
Evidence : You have an error in your SQL syntax
Risk : CRITICAL
```
## 4. 跨站脚本攻击 (XSS)
**命令:**
```
python main.py scan --url http://localhost/vulnerabilities/xss_r/?name=test \
--cookie "PHPSESSID=abc123;security=low"
```
检测逻辑:将 XSS payload(``, `
`)注入到所有表单输入和 URL 参数中,然后检查 payload 是否在响应主体中未经净化地反射。
**结果:**
```
URL : http://localhost/vulnerabilities/xss_r/
Parameter: name
Payload :
Evidence : Payload reflected in response
Risk : HIGH
```
## 5. 开放重定向
检测逻辑:将 URL 参数值替换为外部域(`https://evil.com`)并跟踪重定向,以检测应用程序是否会盲目地将用户重定向到攻击者控制的 URL。
**结果:**
```
URL : http://localhost/redirect?url=https://evil.com
Evidence : 302 redirect to https://evil.com confirmed
Risk : MEDIUM
```
## 仓库结构
```
web-vuln-scanner/
├── main.py
├── requirements.txt
├── README.md
├── .env.example
├── core/
│ ├── config.py
│ ├── crawler.py # Recursive link + form discovery
│ ├── headers_check.py # Security headers analysis
│ ├── sqli.py # SQL Injection detection
│ ├── xss.py # XSS detection
│ ├── scanner.py # Scan orchestration
│ ├── database.py # SQLite scan history
│ └── reporter.py # Dark-themed PDF report generator
└── data/
└── scans.db
```
## 技术栈
| 工具 | 版本 | 用途 |
|---|---|---|
| Python | 3.11 | 核心语言 |
| requests | 2.31 | HTTP 请求 + 会话处理 |
| BeautifulSoup4 | 4.12 | HTML 解析 + 表单提取 |
| Rich | 13.7 | CLI 输出格式化 |
| ReportLab | 4.1.0 | 深色主题 PDF 报告 |
| SQLite | 内置 | 扫描历史存储 |
## 关键经验
- 构建一个递归 Web 爬虫,能够正确处理相对 URL、查询参数和表单操作,而不会超出范围
- 通过匹配跨 MySQL、MSSQL、PostgreSQL 和 Oracle 的数据库错误签名来实现基于错误的 SQLi 检测 —— 无需依赖 sqlmap
- 设计反射型 XSS 检测,以区分响应主体中已净化和未净化的 payload 反射
- 添加 cookie 注入支持,以启用对受登录保护页面的已认证扫描
- 了解为什么安全标头配置错误一直位列 OWASP Top 10,以及如何以编程方式检测它
## 已知限制
- 仅检测基于错误的 SQLi —— 盲注/基于时间的 SQLi 需要更长的扫描时间,目前尚未实现
- XSS 检测仅涵盖反射型 XSS —— 存储型和基于 DOM 的 XSS 需要不同的检测方法
- 爬虫仅遵守同域范围 —— 尚不支持子域爬取
- 包含大量 JavaScript 的 SPA(React、Angular、Vue)未被完全爬取 —— 仅发现静态 HTML 链接和表单
## 作者
**Sana Simran**
GitHub: [@sanasimran1403-jpg](https://github.com/sanasimran1403-jpg)
标签:CISA项目, Python, Web安全, 加密, 无后门, 漏洞扫描器, 蓝队分析, 逆向工具