我每天都刷twitter 但是工作原因 很少有文章能深入阅读 真是让人遗憾啊
Write-up of DOMPurify 2.0.0 bypass using mutation XSS
》。DOMPurify就是一个DOM XSS的前端过滤库。
那么什么是mutation XSS?从单词来看,是转变、突变。有人叫他突变XSS,显然这个是没看过文章的人直译的(让我想起了一个名词“路过式攻击”,就是路过的时候踢你一脚的攻击方法)。
https://research.securitum.com/dompurify-bypass-using-mxss/
简单的来说,mXSS就是因为浏览器的解析(HTML parse)过程中不同的html标准的操作导致的,因为浏览器会在渲染不正常的标签的时候做出一些操作。
https://my.oschina.net/u/3375885/blog/2996380?from=timeline
同时,这个页面里的这个东西深深的刺痛了我的心。。我(*&……%¥
首先DOMPurify会使用DOMParser.prototype.parseFromString ,也就是DOMParser.parseFromString 来使用类似xml格式渲染html,在这个过程中,有一个白名单元素列表,里面含有div b i img ,属性只有src可以使用的
我们来做一个实验,基于刚才说的规则,我们输入一段代码来解析
<div>I am trying to be <i>malicious</i> <u>here</u>! <img src=1 onerror=alert(1)></div>
因为那个DOMpurify过滤了,因为他是一个前端防XSS的框架嘛。
element.innerHTML = '<u>Some <i>HTML'
是不是感觉哪里怪怪的?不知道是DOMpurify还是浏览器给你自动闭合了标签,也是这个骚操作导致了XSS.
当我们的innerHTML=`<svg></p><style><a id="</style><img src onerror=alert(1)>">`
DOMpurify.sanitize(xxx.innerHTML); //框架过滤
的时候,经过框架的一顿骚操作然后被浏览器渲染应该是这样的
嗯 ,这样就离弹窗不远了,反正根据颜色 大家可以看到了吧。img标签被正常解析了,onerror也是。
然后作者给出了终极的poc,也就是
<svg></p><style><a id="</style><img src=1 onerror=alert(1)>">
嗯。我今天刚推荐一个甲方同学使用DOMpurify……还行吧……
本文始发于微信公众号(xsser的博客):mXSS是什么?如何用mXSS绕过DOMpurify
评论