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安全, 加密, 无后门, 漏洞扫描器, 蓝队分析, 逆向工具