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安全, 应用安全, 漏洞修复, 网络安全培训, 蓝队分析, 逆向工具