作者:{Wellee}@ArkTeam
WEB漏洞频发,黑客利用基于WEB的攻击得到服务器的或设备的控制权限,可以篡改网页内容表达政治诉求、网页挂马、窃取重要内部数据或作为攻击跳板等!
WAF(Web Application Firewall)作为网站安全基础设施的标配,通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护。根据不同的分类方法,WAF可分为许多种。从产品形态上来划分,WAF主要分为三大类:硬件设备类,如绿盟、安恒、启明星辰等厂商生产的WAF;软件产品类,如ModSecurity、网站安全狗等;基于云的WAF,如阿里云盾等。根据业务场景或WAF架构又可分为:反向代理模式、Agent+检测云模式、以模块的形式集成到WEB容器的模式等。
随着云计算技术的快速发展,使得其于云的WAF实现成为主流。国内阿里云云盾、知道创宇加速乐等是这类WAF的典型代表,云WAF具有快速部署、零维护、成本低等多种优势。云WAF主要采用基于反向代理的模式,通过修改受保护网站的域名解析,使得访问网站的请求流量流经云端,以此可对流量进行攻击检测,之后云端作为代理访问受保护网站并将网站处理结果返回给用户。本文基于Openresty,使用ngx_lua模块结合Nginx负载均衡功能搭建一个基于反向代理的简易WAF,其大致框架如下:
本文余下主要分为三部分:第一部分通过搭建一个包含SQL注入漏洞的网站,在无WAF的情况下模拟进行渗透测试,获得flag。第二部分通过实例演示了如何利用WAF为后端的Web应用提供安全防护功能,读者可以查看、修改规则,使其直观感受基于规则的WAF的工作原理和防御机制。第三部分,分析相关防御规则,尝试使用其他方法对WAF进行绕过,使读者感受攻防双方的博弈过程。
一、注入测试
首先关闭WAF防御功能,对其进行注入攻击:
1、使用firefox hackbar插件进行注入尝试,通过单引号截断sql查询语句
2、利用and 1=2进行union注入,获取注入结果回显
3、2的位置可以回显,接下来猜测表名,当from flag的时候可以正常回显
4、表名错误的话则查询不到数据
5、列名类似,最终的poc为:http://127.0.0.1/index.php?id=1′ and 1=2 union select 1,flag from flag %23 ,得到flag为:SQLi so easy!
二、WAF防御
打开WAF的防御功能,继续使用firefox hackbar插件对目标web进行注入尝试:
1、使用上述成功的poc进行注入尝试,发现此时的注入攻击已经被WAF拦截
2、查看WAF的过滤规则,可以看出上述注入攻击poc,http://127.0.0.1/index.php?id=1′ and 1=2 union select 1,flag from flag %23 触发了如下图的过滤规则,因而注入攻击被拦截
三、WAF绕过
分析WAF规则,思考如何对上述防御进行绕过
1、可以发现相关防御规则只是对某些关键词(如select和from、union和select等)联合使用进行规则匹配,如果匹配成功,则进行拦截,而上述攻击poc触发了相关的union+select的规则,http://127.0.0.1/index.php?id=1′ and 1=2 union select 1,flag from flag %23,而且关键词过滤时并没有忽略大小写,因此可以尝试替换关键词的大小写进行绕过
2、如果WAF对关键词大小写进行忽略,还可以考虑使用Bool型盲注:通过substr取出第一位然后用ascii码判断,可以得到第一位的ascii码为83,即’S’,并且没有触发任何WAF规则,成功获得回显
3、而如果判断不对,则没有回显
4、因此可以通过盲注脚本,根据页面的回显对每一位字符进行猜测,从而也可攻击成功,获得flag,如下图
体验上述SQL注入攻击与WAF攻防实践过程,请访问合天网安实验室实验——WAF渗透攻防实践,实验地址如下:http://www.hetianlab.com/expc.do?ec=ECIDee9320adea6e062017110811103300001
参考:
[1]. http://www.freebuf.com/sectool/54221.html
[2].
http://www.freebuf.com/articles/web/18084.html
[3].
https://openresty.org/en/