fankfc/Class02-SQL-Injection-Fix-Report

GitHub: fankfc/Class02-SQL-Injection-Fix-Report

基于 Flask 用户管理平台演示 SQL 注入漏洞的发现、POC 验证与参数化查询修复全流程的教学项目。

Stars: 0 | Forks: 0

# Class02 SQL 注入漏洞发现、POC 验证与参数化查询修复全流程 ## 项目概述 本项目基于一个 Flask 用户管理平台,展示 SQL 注入漏洞的**发现 → 验证 → 修复 → 验证**全流程。原始代码在注册和搜索功能中使用 `f-string` 拼接 SQL 语句,存在严重 SQL 注入漏洞(CVSS 9.8)。 ## 目录结构 Class02-SQL-Injection-Fix-Report/ ├── README.md # 本文件 ├── VULNERABILITY_FIX_REPORT.md # 完整漏洞修复报告 ├── app.py # 修复后的 Flask 应用代码 ├── poc_test.sh # 一键 POC 测试脚本 └── templates/ ├── base.html # 基础模板 ├── index.html # 首页(含搜索功能) ├── login.html # 登录页 └── register.html # 注册页 ## 漏洞概述 ### 漏洞位置 | 功能 | 路由 | 问题 | |------|------|------| | 用户注册 | `POST /register` | f-string 拼接 INSERT 语句 | | 用户搜索 | `GET /search` | f-string 拼接 LIKE 查询 | ### 风险等级 **CVSS 9.8(Critical)** — 攻击者无需认证即可利用,可窃取全部用户数据或执行任意 SQL 命令。 ## POC 验证结果 ### POC 1:UNION 注入 输入: ' UNION SELECT 1,'inj','inj@x.com','138'-- 生成的 SQL: SELECT * FROM users WHERE username LIKE '%' UNION SELECT 1,'inj','inj@x.com','138'--%' 修复前: ✅ 搜索结果中出现 inj / inj@x.com(注入成功) 修复后: ❌ 显示"无搜索结果"(注入被拦截) ### POC 2:OR 万能条件 输入: ' OR '1'='1 生成的 SQL: SELECT * FROM users WHERE username LIKE '%' OR '1'='1%' 修复前: ✅ 返回数据库中全部用户(注入成功) 修复后: ❌ 显示"无搜索结果"(注入被拦截) ### POC 3:注册注入 输入用户名: hacker', 'pass', 'h@x.com', '123')-- 生成的 SQL: INSERT INTO users VALUES ('hacker', 'pass', 'h@x.com', '123')--', ...) 修复前: ✅ 成功插入定制数据(注入成功) 修复后: ❌ 特殊字符被当作普通用户名存储(注入被拦截) ## 修复方案 将 `f-string` 拼接替换为**参数化查询**(`?` 占位符): # ❌ 修复前:f-string 拼接(存在注入) sql = f"INSERT INTO users (...) VALUES ('{username}', '{password}', ...)" cursor.execute(sql) # ✅ 修复后:参数化查询(安全) sql = "INSERT INTO users (...) VALUES (?, ?, ?, ?)" cursor.execute(sql, (username, password, email, phone)) ## 快速测试 # 1. 安装依赖 pip install flask # 2. 启动服务 python app.py # 3. 运行 POC 测试 bash poc_test.sh ## 相关链接 - [完整漏洞修复报告](VULNERABILITY_FIX_REPORT.md) - [OWASP A03:2021 - Injection](https://owasp.org/Top10/A03_2021-Injection/)
标签:CISA项目, Flask, Web安全, 应用安全, 漏洞修复, 网络安全培训, 蓝队分析, 逆向工具