绕过WAF继续SQL注入常用方法

发表于:2014-7-03 11:37

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:上帝爱编程    来源:51Testing软件测试网采编

  这篇文章之前的名字叫做:WAF bypass for SQL injection #理论篇,我于6月17日投稿了Freebuf。链接:点击这里 现博客恢复,特发此处。
  Web Hacker总是生存在与WAF的不断抗争之中的,厂商不断过滤,Hacker不断绕过。WAF bypass是一个永恒的话题,不少基友也总结了很多奇技怪招。那今天我在这里做个小小的扫盲吧。先来说说WAF bypass是啥。
  WAF呢,简单说,它是一个Web应用程序防火墙,其功能呢是用于过滤某些恶意请求与某些关键字。WAF仅仅是一个工具,帮助你防护网站来的。但是如果你代码写得特别渣渣,别说WAF帮不了你,就连wefgod都帮不了你…所以不能天真的以为用上WAF你的网站就百毒不侵了。开始正题—-
  1>注释符
  相信很多朋友都知道SQL的注释符吧,这算是绕WAF用的最广泛的了。它们允许我们绕过很多Web应用程序防火墙和限制,我们可以注释掉一些sql语句,然后让其只执行攻击语句而达到入侵目的。
  常用注释符:
  //, -- , /**/, #, --+, -- -, ;%00
  2>情况改变
  然而,以前审计的一些开源程序中,有些厂商的过滤很不严谨,一些是采用黑名单方式过滤,但是有些只过滤了小写形式,然而在传参的时候并没有将接收参数转换为小写进行匹配。针对这种情况,我们很简单就能绕过。
  比如它的过滤语句是:
  /union\sselect/g
  那么我们就可以这样构造:
  id=1+UnIoN/**/SeLeCT
  3>内联注释
  有些WAF的过滤关键词像/union\sselect/g,就比如上面说的,很多时候我都是采用内联注释。更复杂的例子需要更先进的方法。比如添加了SQL关键字,我们就要进一步分离这两个词来绕过这个过滤器。
  id=1/*!UnIoN*/SeLeCT
  采用/*! code */来执行我们的SQL语句。内联注释可以用于整个SQL语句中。所以如果table_name或者者information_schema进行了过滤,我们可以添加更多的内联注释内容。
  比如一个过滤器过滤了:
  union,where, table_name, table_schema, =, and information_schema
  这些都是我们内联注释需要绕过的目标。所以通常利用内联注释进行如下方式绕过:
  id=1/*!UnIoN*/+SeLeCT+1,2,concat(/*!table_name*/)+FrOM /*information_schema*/.tables /*!WHERE */+/*!TaBlE_ScHeMa*/+like+database()-- -
  通常情况下,上面的代码可以绕过过滤器,请注意,我们用的是 Like而不是 =
  当一切似乎失败了之后,你可以尝试通过应用防火墙关闭SQL语句中使用的变量:
  id=1+UnIoN/*&a=*/SeLeCT/*&a=*/1,2,3,database()-- -
  即使常见内联注释本身没有工作,上述的代码也应该可以绕过union+select过滤器。
  4>缓冲区溢出:
  意想不到的输入:
  我们知道,很多的WAFS都是C语言的,他们在装载一堆数据的时候,很容易就会溢出。下面描述的就是一个这样的WAF,当它接收到大量数据恶意的请求和响应时。
  id=1 and (select 1)=(Select 0xAAAAAAAAAAAAAAAAAAAAA 1000 more A's)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36--+
  上面的bypass语句,我在最近的一个网站绕过上用到了。
  5>替换关键字(preg_replace and/or都能达到相同目的):
  有时程序会删除所有的关键字,例如,有一个过滤器,他会把union select变成空白,这时我们可以采用以下方式进行绕过:
  id=1+UNIunionON+SeLselectECT+1,2,3–
  不难明白吧?union和select变成空白了,两边的又会重新组合成新的查询。
  UNION+SELECT+1,2,3--
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号