第三期:SQL注入·原理与分类(理论篇)

📋 任务概述

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)
数据通过同一通道获取(最常见)
URL参数、POST表单
推理注入(Inferential)
无回显,通过布尔或时间延迟推断
盲注场景
带外注入(Out-of-Band)
通过其他渠道获取数据
DNS/OOB注入

2️⃣ 按攻击手法分类

类型
原理
特征
基于联合(UNION-based)
通过UNION拼接恶意查询
需要原查询有回显
基于错误(Error-based)
触发数据库错误获取信息
MySQL extractvalue() 等
布尔盲注(Boolean-based)
通过页面响应差异推断
无回显但有True/False状态
时间盲注(Time-based)
通过延迟函数判断真假
完全无回显场景
堆叠查询(Stacked)
执行多条SQL语句
需要多语句支持(MySQL的PHPmysqli)

3️⃣ 按SQL语句类型分类

类型
可利用的SQL关键词
SELECT注入
联合查询、子查询
INSERT注入
VALUES后注入、HEX编码
UPDATE注入
SET/WHERE子句注入
DELETE注入
WHERE子句注入
UNION注入
跨表数据提取

四、SQL注入的判定方法

基础判定payload

注入点类型
测试payload
预期结果
字符串型
param='
SQL语法错误
字符串型
param=' OR '1'='1
异常结果或绕过认证
数字型
param=1

 → param=1-1
结果数值变化
搜索型
param=test%'
SQL语法错误

自动化判定逻辑

1. 输入单引号 ' → 是否触发数据库错误
2. 输入 1=1 与 1=2 → 响应是否不同(布尔差异)
3. 输入 SLEEP(N) → 响应是否延迟N秒
4. 输入 UNION SELECT NULL -- → 是否成功

五、SQL注入的威胁等级判定(CVSS)

维度
高风险指标
攻击向量
网络可达(AV:N)
权限要求
无需认证(PR:N)
机密性影响
高(全部数据库泄露)
完整性影响
可修改数据
利用复杂度
低(自动化工具成熟)
典型CVSS评分 9.8(严重)

六、SQL注入的经典案例

CVE
漏洞简介
影响
CVE-2017-8917
Joomla 3.7 SQL注入
管理员权限获取
CVE-2018-12613
phpMyAdmin 4.8.1 远程执行
服务器完全沦陷
CVE-2019-9193
PostgreSQL 任意代码执行
系统级威胁

⚠️ 发现总结

  • SQL注入的本质:用户输入未经验证即参与SQL拼接
  • 分类维度:注入位置、攻击手法、SQL语句类型
  • 判定基础:单引号触发、逻辑差异、延迟响应
  • 威胁评级:OWASP Top 10 持续多年排名第一

🛡️ 修复建议(预览)

防护层
方案
优先级
代码层
参数化查询(Prepared Statements)
必须
输入层
严格类型检查 + 白名单过滤
必须
框架层
ORM自动防护(部分有效)
辅助
WAF层
部署Web应用防火墙
纵深防御
数据库层
最小权限原则 + 日志审计
关键

⚠️ 参数化查询是唯一根治方案,其他均为缓解措施。


📚 参考框架

  • OWASP Top 10 2021
     — A03:2021-Injection
  • PTES
     — 扫描与攻击验证阶段
  • CWE-89
     — SQL Injection
  • MITRE ATT&CK
     — T1055.012(数据库植入)

下期预告:

  • 《SQL注入·实战利用与绕过》(实战篇)

🛡️ 理论先行,实践跟进


© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容