yuvrajmehendiyan12/vulnscan-project

GitHub: yuvrajmehendiyan12/vulnscan-project

一个面向初学者的 Web 安全教学项目,包含故意植入漏洞的 Flask 应用和配套的 Python 漏洞扫描器。

Stars: 0 | Forks: 0

# VulnShop + Scanner 一个面向初学者的双向网络安全项目: 1. **`vulnerable_app/`** — 一个带有 SQL 注入漏洞的微型 Flask “商店”应用, 并且故意植入了两个 XSS 漏洞。 2. **`scanner/`** — 一个 Python 脚本,用于抓取目标站点、查找表单 和参数,并自动检测这些漏洞类型。 构建双方组件是本项目的核心:利用你亲手植入的漏洞,能让你切实掌握 它们*为何*会被利用;而编写检测器则迫使你将“我能看到漏洞”转化 为“我能通过编程方式证明漏洞的存在”。 ## ⚠️ 范围与道德规范 - **仅在 `localhost`** 上运行,针对你自己的实例。 - 绝不要将扫描器指向你不拥有或未获得明确书面测试授权的网站。在大多数 司法管辖区,未经授权扫描第三方网站是非法的,即使使用的是像 `alert('xss')` 这样“无害”的 payload。 - 该漏洞应用中没有任何真正的机密数据,但请把它当作有机密数据来对待—— 这是为以后培养的良好习惯。 ## 1. 设置并运行漏洞应用 ``` cd vulnerable_app python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install -r requirements.txt python app.py ``` 这会在首次运行时创建 `vulnerable.db` (SQLite),并在 **http://127.0.0.1:5000** 启动应用。 ### 首先手动尝试漏洞 **SQL 注入 — 登录绕过** (`/login`) 用户名:`admin' --` — 密码随意。查询语句会变为: ``` SELECT * FROM users WHERE username = 'admin' --' AND password = '...' ``` `--` 之后的所有内容都会被注释掉,因此密码检查永远不会执行。 **SQL 注入 — 数据提取** (`/search`) 搜索: ``` ' UNION SELECT id, username, password FROM users-- ``` products 表只有 3 列,因此使用具有 3 列的 UNION SELECT 可以让你从*不同* 的表中提取数据行——包括 `users` 表中的密码——并将它们显示在同一个结果 页面中。 **存储型 XSS** (`/comments`) 发布一条包含以下内容的评论: ``` ``` 重新加载页面——弹窗会针对*任何*访问 `/comments` 的人触发, 而不仅仅是发布评论的人。这就是存储型 XSS 比反射型更危险的 原因:它不需要诱骗受害者点击精心构造的链接。 **反射型 XSS** (`/profile`) 访问: ``` http://127.0.0.1:5000/profile?name= ``` 该脚本仅对打开此确切 URL 的人有效——对于能够诱使受害者点击恶意链接 (钓鱼邮件、缩短的 URL 等)的攻击者来说非常有用。 ## 2. 设置并运行扫描器 在第二个终端中,保持应用继续运行: ``` cd scanner python -m venv venv source venv/bin/activate pip install -r requirements.txt python scanner.py http://127.0.0.1:5000 ``` ### 它的实际工作原理 1. **抓取**站点(广度优先,仅限同一主机)并收集每个 `
` 以及每个已经带有查询参数的链接。 2. **SQL 注入测试**:将像 `' OR '1'='1' --` 这样的 payload 提交到 每个表单字段中,然后检查响应是否包含: - 泄露的数据库错误字符串(`syntax error`、`sqlite3.OperationalError` 等)——*基于错误*的检测,或 - 登录表单被绕过的迹象(例如,在没有提供有效凭据的情况下,响应中出现了“欢迎”)——*基于行为*的检测。 3. **XSS 测试**:将带有唯一标记的 payload (``)提交到每个字段和 每个查询参数中,然后检查该*确切的、未经转义的*字符串是否 会在响应中返回。如果是,则说明输入在被渲染到 HTML 之前没有被编码—— 并且对于提交到 `/comments` 的表单,它会跟随重定向并检查列表页,因此 它能正确区分存储型 XSS 和反射型 XSS。 预期输出如下: ``` [SQL Injection (auth bypass)] POST http://127.0.0.1:5000/login parameter : username payload : ' OR '1'='1' -- evidence : Login appeared to succeed with payload (matched 'welcome') [Stored XSS] POST http://127.0.0.1:5000/comments parameter : comment payload : evidence : Payload appeared unescaped (verbatim