Nyabayo/web-application-security-python-xss-vulnerability-scanner-reflected-xss-detection-owasp-a03

GitHub: Nyabayo/web-application-security-python-xss-vulnerability-scanner-reflected-xss-detection-owasp-a03

一个面向教学的 Python 反射型 XSS 漏洞扫描器,通过自动提交 payload 并检测响应中的输入反射来验证 Web 端点是否存在注入风险。

Stars: 0 | Forks: 0

# 🔐 Web 应用安全第 1 部分 — 反射型 XSS 漏洞扫描器 [![Python](https://img.shields.io/badge/Python-3.x-blue?logo=python&logoColor=white)](https://www.python.org/) [![OWASP](https://img.shields.io/badge/OWASP-A03%3A2021%20Injection-red)](https://owasp.org/Top10/A03_2021-Injection/) [![Flask](https://img.shields.io/badge/Flask-Test%20App-black?logo=flask&logoColor=white)](https://flask.palletsprojects.com/) [![License](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Score](https://img.shields.io/badge/Lab%20Score-50%2F50-brightgreen)](https://github.com/Nyabayo/web-application-security-part1-python-xss-vulnerability-scanner-reflected-xss-detection-owasp-a03-orion-health-systems-lab) ## 📖 目录 - [关于项目](#-about-the-project) - [背景场景](#-scenario) - [功能特性](#-features) - [OWASP A03:2021 覆盖范围](#-owasp-a032021-coverage) - [前置条件](#-prerequisites) - [安装说明](#-installation) - [用法](#-usage) - [脚本结构](#-script-structure) - [函数参考](#-functions-reference) - [示例输出](#-sample-output) - [实验任务分解](#-lab-tasks-breakdown) - [评分标准](#-grading-rubric) - [安全注意事项](#-security-considerations) - [贡献](#-contributing) - [许可证](#-license) ## 📌 关于项目 本代码库包含一个专注于 **Web 应用安全** 的网络安全实验练习,具体针对 **反射型跨站脚本攻击 (XSS)** 漏洞的自动化检测。该项目演示了如何使用 **Python** 和 **requests** 库以编程方式测试 Web 端点的 XSS 注入风险。 该脚本是涵盖 **OWASP A03:2021 — 注入** 的结构化网络安全课程的一部分,模拟了现实世界中的应用安全专业人员如何在渗透测试开始之前使用自动化工具作为第一道防线。 **代码库:** ``` https://github.com/Nyabayo/web-application-security-part1-python-xss-vulnerability-scanner-reflected-xss-detection-owasp-a03-orion-health-systems-lab.git ``` ## 🏢 背景场景 你是 **Orion Health Systems** 的一名 **初级应用安全分析师**,该公司最近推出了一项基于 Web 的搜索门户,供患者访问健康信息。 在一次例行内部审计中,你的团队发现某些搜索端点可能容易受到 **反射型跨站脚本攻击 (XSS)** 的攻击,该问题可能允许攻击者在用户的浏览器中执行恶意脚本。 | 风险 | 描述 | |---|---| | **反射型 XSS** | 用户提供的输入在未经净化的情况下在 HTTP 响应中被回显 | | **影响** | 攻击者可以在受害者的浏览器中执行脚本、窃取会话 token、重定向用户 | | **OWASP 类别** | A03:2021 — 注入 (CWE-79) | | **受影响的端点** | `/search?q=` — 将查询参数直接反射到 HTML 中 | ## ✨ 功能特性 - ✅ **自动化 XSS Payload 提交** — 向存在漏洞的端点提交多个 XSS 测试 payload - ✅ **反射输入检测** — 检查每个 payload 是否出现在 HTTP 响应体中 - ✅ **清晰的结果报告** — 清楚地输出每次测试结果是存在漏洞还是安全 - ✅ **防止误报** — 仅标记在响应中被按字面反射的 payload - ✅ **优雅的错误处理** — 处理连接错误、超时和意外的状态码 - ✅ **动态循环** — 动态测试所有 payload,没有硬编码逻辑 - ✅ **符合 PEP 8** — 遵循由 Flake8 验证的 Python 代码风格标准 ## 🛡️ OWASP A03:2021 覆盖范围 此工具直接解决了 **OWASP A03:2021 — 注入** 问题,特别是 **CWE-79: 跨站脚本攻击**。 | OWASP 关注点 | 此工具如何解决 | |---|---| | **反射型 XSS (CWE-79)** | 测试用户提供的输入是否在 HTTP 响应中未经编码地被回显 | | **输入验证** | 揭示未能对用户输入进行净化或编码的端点 | | **输出编码** | 检测服务器响应中缺失的输出编码 | ### 如何防止反射型 XSS | 发现 | 重要性 | 安全编码修复方案 | |---|---|---| | Payload 在 HTML 中被反射 | 存在脚本注入风险 | 净化用户输入,对输出进行编码 | | 未反射任何 payload | 页面在此攻击向量上可能是安全的 | 验证输入和输出作为最佳实践 | ## ✅ 前置条件 在运行此脚本之前,请确保已安装以下内容: ### 系统要求 - **Python 3.x** — [在此下载](https://www.python.org/downloads/) - **pip** — Python 包管理器 - **Flask** — 用于运行测试 Web 应用 - **requests** — Python HTTP 库 ### 安装依赖 ``` pip install flask requests ``` ### 虚拟环境 (推荐) ``` # 创建 virtual environment python3 -m venv .venv # 激活 — macOS/Linux source .venv/bin/activate # 激活 — Windows PowerShell .venv\Scripts\Activate.ps1 ``` ## 💾 安装说明 ### 克隆代码库 ``` git clone https://github.com/Nyabayo/web-application-security-part1-python-xss-vulnerability-scanner-reflected-xss-detection-owasp-a03-orion-health-systems-lab.git ``` ### 进入项目目录 ``` cd web-application-security-part1-python-xss-vulnerability-scanner-reflected-xss-detection-owasp-a03-orion-health-systems-lab ``` ## 🚀 用法 ### 第 1 步 — 启动存在漏洞的测试应用 `app.py` 文件模拟了一个存在漏洞的 Flask Web 应用,带有一个会反射用户输入的搜索端点: ``` python3 app.py ``` 你应该会看到: ``` * Running on http://127.0.0.1:5000 ``` ### 第 2 步 — 运行扫描器 打开一个 **新的终端标签页**,激活你的虚拟环境,然后运行: ``` python3 vuln_scanner.py ``` ### 预期输出 ``` [+] Starting reflected XSS test... [!] Potential XSS vulnerability detected with payload: [!] Potential XSS vulnerability detected with payload: [!] Potential XSS vulnerability detected with payload: ``` ## 🗂️ 脚本结构 ``` web-application-security-part1/ │ ├── vuln_scanner.py # Main XSS vulnerability scanner script ├── app.py # Vulnerable Flask test application ├── README.md # Project documentation (this file) └── LICENSE # MIT License ``` ### 代码架构 ``` vuln_scanner.py │ ├── import requests │ ├── BASE_URL # Target endpoint URL ├── payloads # List of XSS test payloads │ ├── test_payload(payload) # Submits payload, checks reflection, prints result └── main() # Entry point — loops through all payloads ``` ## 📚 函数参考 ### `test_payload(payload)` 向目标端点提交单个 XSS payload,并检查它是否在 HTTP 响应体中被反射。 ``` def test_payload(payload): """Submit the payload and check if it is reflected in the response.""" try: full_url = BASE_URL + payload response = requests.get(full_url, timeout=5) if response.status_code != 200: print(f"[!] Unexpected status code {response.status_code} for payload: {payload}") return if payload in response.text: print(f"[!] Potential XSS vulnerability detected with payload: {payload}") else: print(f"[✓] No reflection found for payload: {payload}") except requests.exceptions.ConnectionError: print(f"[!] Request failed for payload: {payload}") print(" Error: Could not connect to the server. Is the app running?") except requests.exceptions.Timeout: print(f"[!] Request failed for payload: {payload}") print(" Error: The request timed out.") except requests.exceptions.RequestException as e: print(f"[!] Request failed for payload: {payload}") print(f" Error: {e}") ``` **工作原理:** - 通过将 payload 直接附加到 `BASE_URL` 来构造完整的 URL - 发送带有 5 秒超时的 HTTP GET 请求 - 检查 HTTP 状态码 —— 标记所有非 200 的响应 - 在响应体中搜索确切的 payload 字符串 - 处理三个独立的错误类别而不会崩溃 **输出信息:** - `[!] Potential XSS vulnerability detected with payload: ` — 存在漏洞 - `[✓] No reflection found for payload: ` — 安全 ### `main()` 打印扫描头信息并动态循环遍历所有 payload 的入口点。 ``` def main(): print("\n[+] Starting reflected XSS test...\n") for payload in payloads: test_payload(payload) ``` **工作原理:** - 打印扫描头信息,周围留有空行以保持清晰的可读性 - 动态循环遍历 `payloads` 列表中的每个 payload - 对每个 payload 调用 `test_payload()` —— 零硬编码逻辑 ## 🖥️ 示例输出 ### 场景 1:存在漏洞的应用 — 所有 Payload 均被反射 ``` [+] Starting reflected XSS test... [!] Potential XSS vulnerability detected with payload: [!] Potential XSS vulnerability detected with payload: [!] Potential XSS vulnerability detected with payload: ``` ### 场景 2:安全的应用 — 无 Payload 被反射 ``` [+] Starting reflected XSS test... [✓] No reflection found for payload: [✓] No reflection found for payload: [✓] No reflection found for payload: ``` ### 场景 3:服务器未运行 ``` [+] Starting reflected XSS test... [!] Request failed for payload: Error: Could not connect to the server. Is the app running? ``` ### 场景 4:请求超时 ``` [+] Starting reflected XSS test... [!] Request failed for payload: Error: The request timed out. ``` ## 📋 实验任务分解 | 任务 | 描述 | 状态 | |---|---|---| | **任务 1** | 设置存在漏洞的 Flask Web 应用并验证 `/search` 端点 | ✅ 已完成 | | **任务 2** | 打开并审查初始的 `vuln_scanner.py` 脚本 | ✅ 已完成 | | **任务 3** | 完成检测逻辑 —— 添加反射检查和循环 | ✅ 已完成 | | **任务 4** | 通过手动使用浏览器 DevTools 检查来确认发现 | ✅ 已完成 | | **任务 5** | 分析结果并映射到 OWASP A03:2021 安全编码修复方案 | ✅ 已完成 | | **任务 6** | 使用 pycodestyle 验证 PEP 8 合规性并提交 | ✅ 已完成 | ## 📊 评分标准 | 标准 | 分值 | 结果 | |---|---|---| | Payload 提交逻辑 | 10分 | ✅ 自动测试通过 | | 反射 Payload 检测 | 10分 | ✅ 自动测试通过 | | 准确的结果报告 | 5分 | ✅ 自动测试通过 | | 防止误报 | 5分 | ✅ 自动测试通过 | | Payload 循环遍历 | 5分 | ✅ 自动测试通过 | | 错误处理 | 5分 | ✅ 自动测试通过 | | 可读的输出与清晰的逻辑 | 5分 | ✅ 自动测试通过 | | 符合 PEP 8 | 5分 | ✅ 自动测试通过 | | **总计** | **50分** | **✅ 50/50 — 100%** | ## 🔒 安全注意事项 - 仅对你拥有或获得 **明确书面授权** 进行测试的应用运行此扫描器 - 此处使用的 XSS payload 是标准测试向量 —— 它们并非旨在造成实际损害,但仍应谨慎处理 - 切勿在未经适当授权的情况下对实时生产系统运行此工具 - 此扫描器仅检测 **反射型 XSS** —— 它不测试存储型 XSS、基于 DOM 的 XSS 或其他注入类型 - 如果发现漏洞,请始终遵循负责任的披露做法 ## 📄 许可证 本项目基于 **MIT 许可证** 授权。有关完整详细信息,请参见 [LICENSE](LICENSE) 文件。 ## 👤 作者 **Nyabayo** - GitHub: [@Nyabayo](https://github.com/Nyabayo) - 代码库: [web-application-security-part1-python-xss-scanner](https://github.com/Nyabayo/web-application-security-python-xss-vulnerability-scanner-reflected-xss-detection-owasp-a03.git) *作为涵盖 OWASP Top 10 和 Web 应用安全测试的网络安全课程的一部分构建。*
标签:CISA项目, Flask, HTTP请求, Linux取证, Orion Health Systems, OWASP A03:2021, OWASP Top 10, Python, Web安全, XSS检测, 加密, 反射型XSS, 安全实验室, 无后门, 注入漏洞, 漏洞扫描器, 网络安全, 蓝队分析, 跨站脚本攻击, 隐私保护