harivelan-ux/Web-Vulnerability-Scanner

GitHub: harivelan-ux/Web-Vulnerability-Scanner

一个用于教育目的的 Python Web 漏洞扫描器,通过爬取网站并测试表单来检测 SQL 注入和反射型 XSS。

Stars: 0 | Forks: 1

# 🔍 Web漏洞扫描器 — 学习项目 ## 此工具的功能 一个基于 Python 的 Web 漏洞扫描器,它可以: - 🕷️ **爬取**网站以发现所有内部链接 - 📋 **提取** HTML 表单及其输入字段 - 💉 **测试** SQL 注入(基于错误的检测) - 🎭 **测试**反射型 XSS(负载反射检测) - 📊 **报告**终端中的发现,并可选择保存到文件中 ## 项目结构 ``` web_scanner/ │ ├── main.py ← Entry point. Parses CLI args, orchestrates the scan. │ ├── crawler.py ← Link discovery using BFS graph traversal. │ Collects all internal URLs on the target site. │ ├── forms.py ← HTML form extraction and submission. │ Finds
tags, reads inputs, submits with payloads. │ ├── vulnerabilities.py ← Core testing logic. │ SQL Injection: looks for DB error messages. │ XSS: checks if payload is reflected unescaped. │ ├── reporter.py ← Output handling. │ Prints colored terminal output, saves to text file. │ └── requirements.txt ← Python package dependencies. ``` ## 安装说明 ### 1. 克隆 / 下载项目 ``` cd web_scanner/ ``` ### 2. (推荐)创建虚拟环境 ``` python -m venv venv # 在 macOS/Linux 上: source venv/bin/activate # 在 Windows 上: venv\Scripts\activate ``` ### 3. 安装依赖 ``` pip install -r requirements.txt ``` ## 用法 ### 基础扫描(最多爬取 30 个页面): ```python main.py -u http://localhost/dvwa malicious:http://altoro.testfire.net/ python main.py -u http://altoro.testfire.net/ ### 将结果保存到文件: ```bash python main.py -u http://localhost/dvwa -o results.txt ### 详细模式(查看测试的每个 payload): ``` python main.py -u http://localhost/dvwa --verbose ``` ### 扫描单个页面而不进行爬取: ``` python main.py -u http://localhost/dvwa/login.php --no-crawl ``` ### 限制爬取最多 10 个页面: ``` python main.py -u http://localhost/dvwa --max-pages 10 ``` ### 仅测试 XSS(跳过 SQL 注入): ``` python main.py -u http://localhost/dvwa --skip-sqli ``` ### 完整帮助: ``` python main.py --help ``` ## 所有 CLI 选项 | 标志 | 简写 | 描述 | 默认值 | |-------------------|-------|----------------------------------------------|---------| | `--url` | `-u` | 要扫描的目标 URL(**必填**) | — | | `--output` | `-o` | 将报告保存到此文件 | None | | `--max-pages` | | 最大爬取页面数 | 30 | | `--no-crawl` | | 跳过爬取,仅测试给定的 URL | False | | `--verbose` | `-v` | 展示测试时的每一个 payload | False | | `--skip-sqli` | | 禁用 SQL 注入测试 | False | | `--skip-xss` | | 禁用 XSS 测试 | False | ## 安全测试环境 **未经允许,切勿在真实网站上测试。** 请使用以下环境之一: | 环境 | URL | 备注 | |-------------|-----|-------| | **DVWA** (Damn Vulnerable Web Application) | http://dvwa.co.uk | 最适合初学者。将安全级别设置为“低” | | **WebGoat** | https://owasp.org/www-project-webgoat/ | OWASP 项目,极具教育意义 | | **bWAPP** | http://www.itsecgames.com/ | 100 多个漏洞,种类丰富 | | **你自己的 Flask 应用** | localhost | 构建一个故意包含漏洞的表单进行测试 | ### 快速 DVWA Docker 设置: ``` docker run --rm -it -p 80:80 vulnerables/web-dvwa # 访问:http://localhost/ # 默认登录:admin / password # 将 Security Level 设置为:Low(在 DVWA Security 标签页中) ``` ## 漏洞原理 ### SQL 注入 当 Web 应用获取用户输入并直接将其传递到 SQL 查询中而不进行过滤时: ``` -- Intended query: SELECT * FROM users WHERE username='alice' AND password='secret' -- After injection with "' OR '1'='1' --": SELECT * FROM users WHERE username='' OR '1'='1' -- ' AND password='' -- ^^^^^^^^^^^^ always true! -- ^^ comments out the rest ``` 此扫描器会在响应中查找 **SQL 错误信息**(例如,“mysql_fetch_array()”,“syntax error”),这些信息表明查询被破坏——从而确认注入点。 ### XSS(跨站脚本攻击) 当 Web 应用将用户输入反射回页面而不进行 HTML 编码时: ``` You searched for: You searched for: <script>alert(1)</script> ``` 此扫描器会检查 **原始 payload 是否出现在响应中** —— 这表明它没有被转义。 ## 局限性(作为学习者了解这些很有好处) | 局限性 | 存在原因 | 如何修复 | |------------|---------------|------------| | 仅检测**反射型** XSS | 存储型 XSS 需要在注入后检查其他页面 | 在提交表单后添加第二轮检查 | | 仅检测**基于错误**的 SQL 注入 | 盲注需要基于时间或布尔值的比较 | 实现基于时间的 SQL 注入检查(`SLEEP(5)`) | | 无 JavaScript 执行 | DOM 型 XSS 仅在浏览器中出现 | 集成 Selenium 或 Playwright | | 无身份验证流程 | 无法登录测试经过身份验证的页面 | 添加 `--login-url`、`--username`、`--password` 选项 | | 单线程 | 在大型网站上速度较慢 | 使用 `concurrent.futures.ThreadPoolExecutor` | ## 你将学到的核心 Python 概念 - **`requests.Session`** — 带有 cookie 的持久 HTTP 会话 - **`BeautifulSoup`** — HTML 解析与元素提取 - **`urllib.parse`** — URL 操作(拼接、解析、编码) - **`argparse`** — 命令行界面构建 - **BFS 图遍历** — 用于爬虫中 - **模块化代码设计** — 每个文件只负责一项功能 - **类型提示** — `def func(url: str) -> list[dict]:` - **ANSI 颜色代码** — 彩色终端输出 ## 扩展扫描器(后续步骤) 一旦熟悉了此代码,尝试添加: 1. **多线程** — 同时扫描多个 URL 2. **身份验证支持** — 在扫描前登录 3. **CSRF token 检测** — 识别带有/不带有 CSRF 保护的表单 4. **Header 注入** — 测试 `User-Agent`、`Referer` 头 5. **目录暴力破解** — 发现隐藏路径 6. **JSON/HTML 报告输出** — 结构化报告 7. **速率限制** — 对服务器保持礼貌 8. **代理支持** — 通过 Burp Suite 路由以进行数据包检查 #作者 **HARI VELAN** ## 免责声明 此工具仅出于**教育目的**而构建。作者不对 任何滥用行为负责。在测试您不拥有的任何系统之前,请务必获得明确的书面授权。对待安全测试就像进入别人的房子一样 —— 你需要一把钥匙(许可),而不是一把撬锁工具。
标签:BeEF, CISA项目, DOE合作, Python, Splunk, SQL注入检测, Web安全, XSS检测, 加密, 无后门, 漏洞扫描器, 爬虫, 蓝队分析, 逆向工具