📋 任务概述
SQL注入(SQL Injection,SQLi)是最常见、最危险的Web安全漏洞之一。本篇作为本期开篇,聚焦原理与分类,为后续实操与防御奠定理论基础。
🔍 分析过程
一、SQL注入的本质
SQL注入的根源在于将用户输入直接拼接到SQL语句中执行。当应用程序构建数据库查询时,如果未对用户输入进行严格过滤或参数化处理,攻击者即可通过构造恶意输入,改变原有SQL语句的逻辑结构。
核心问题: 信任用户输入 = 信任武器化的数据
二、SQL注入的原理
以一个典型的登录查询为例:
-- 应用程序期望的SQL
SELECT * FROMusersWHERE username = 'admin'ANDpassword = 'pass123'
攻击者在用户名输入框中注入:' OR '1'='1
拼接后的SQL变为:
SELECT * FROMusersWHERE username = ''OR'1'='1'--' AND password = 'anything'
OR '1'='1' 使条件永远为真,-- 注释掉后续内容,攻击者无需密码即可登录。
三、SQL注入的分类
1️⃣ 按注入点位置分类
|
|
|
|
|---|---|---|
| 带内注入(In-Band) |
|
|
| 推理注入(Inferential) |
|
|
| 带外注入(Out-of-Band) |
|
|
2️⃣ 按攻击手法分类
|
|
|
|
|---|---|---|
| 基于联合(UNION-based) |
|
|
| 基于错误(Error-based) |
|
extractvalue() 等 |
| 布尔盲注(Boolean-based) |
|
|
| 时间盲注(Time-based) |
|
|
| 堆叠查询(Stacked) |
|
|
3️⃣ 按SQL语句类型分类
|
|
|
|---|---|
| SELECT注入 |
|
| INSERT注入 |
|
| UPDATE注入 |
|
| DELETE注入 |
|
| UNION注入 |
|
四、SQL注入的判定方法
基础判定payload
|
|
|
|
|---|---|---|
|
|
param=' |
|
|
|
param=' OR '1'='1 |
|
|
|
param=1
param=1-1 |
|
|
|
param=test%' |
|
自动化判定逻辑
1. 输入单引号 ' → 是否触发数据库错误
2. 输入 1=1 与 1=2 → 响应是否不同(布尔差异)
3. 输入 SLEEP(N) → 响应是否延迟N秒
4. 输入 UNION SELECT NULL -- → 是否成功
五、SQL注入的威胁等级判定(CVSS)
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 典型CVSS评分 | 9.8(严重) |
六、SQL注入的经典案例
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
⚠️ 发现总结
-
SQL注入的本质:用户输入未经验证即参与SQL拼接 - 分类维度:注入位置、攻击手法、SQL语句类型
- 判定基础:单引号触发、逻辑差异、延迟响应
-
威胁评级:OWASP Top 10 持续多年排名第一
🛡️ 修复建议(预览)
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
⚠️ 参数化查询是唯一根治方案,其他均为缓解措施。
📚 参考框架
- OWASP Top 10 2021
— A03:2021-Injection - PTES
— 扫描与攻击验证阶段 - CWE-89
— SQL Injection - MITRE ATT&CK
— T1055.012(数据库植入)
下期预告:
- 《SQL注入·实战利用与绕过》(实战篇)
🛡️ 理论先行,实践跟进
© 版权声明
THE END











暂无评论内容