欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

巧用JavaScript绕过XSS过滤

来源:本站整理 作者:佚名 时间:2017-09-15 TAG: 我要投稿

在一年一度的AppSec Europe会议上, Sebastian Lekies,Krzysztof Kotowicz和Eduardo Vela Nava三人配合展示了若何利用JavaScript框架来绕过XSS减缓机制。在这篇文章中,我将经由过程Mavo框架对若何绕过XSS减缓机制停止体系性的阐发,特别是绕过NoScript的XSS过滤器。 Mavo框架旨在经由过程利用户可以或许利用纯HTML创立交互式Web利用程序来简化Web开辟。 它在Smashing magazine 站点上宣布,我在Twitter上发明了它,出于兴致使然我开端对该框架的的语法和功效停止研讨和阐发。
基于DOM的XSS漏洞破绽bug利用
Mavo框架会创立一个名为$url的工具,该工具可以或许为开辟职员供给拜访GET参数的便捷办法。比方,如果你想拜访GET参数“x”,那末你可以或许拜访$ url工具的“x”属性,示例如下所示:

$url.x //得到GET参数x
然则,这类方便性也增加了开辟职员引入基于DOM的XSS漏洞破绽bug的能够性。 我在2017年5月31日向CSS事情小组申报了如许一个成绩:他们利用Mavo来治理CSS标准上的批评功效,并利用$url来分派一个href超链接工具,HTML代码如下所示:

h1> a href="{$url.spec}" mv-attribute="null" property="title"> a> h1>
咱们可以或许看到,上述代码利用$url工具从URL中得到参数的值。然则,这类环境只要在得到到有用数据的时刻,超链接才会表现。是以为了到达入侵攻击测试的目的,我必要注入一个有用的绝对门路的JavaScript URL,以便得到数据并表现链接,代码如下所示。

javascript:alert(1)%252f%252f..%252fcss-images
上面的入侵攻击向量中供给了一个有用的绝对门路的URL,是以Mavo在不存在的javascript:alert(1)文件夹中查找数据,并利用两个编码的双斜杠和“..”遍历咱们的入侵攻击向量。 在入侵攻击向量中,由于双斜杠可以或许作为JavaScript中的正文是以我利用了两个斜杠,使适合JavaScript URL履行时,它会正文掉入侵攻击向量中的别的门路。 而后它返回到css-images目次,以便胜利加载数据并表现URL。由于Mavo框架是在客户端利用的,是以咱们可以或许在咱们的服务器上复现这个成绩,感兴致的读者可以或许点击反省相干的POC入侵攻击向量。
长途加载JSON数据
Mavo框架有一个特别的功效,该功效可以或许将任何Mavo利用的数据源变动成当地存储或长途存储。 这是一个存在漏洞破绽bug的计划,由于入侵攻击者可以或许借此节制你的数据并能够利用这些数据来入侵攻击你的网站或许在你的网站中注入歹意的JavaScript URL。 Mavo网站上的演示利用程序就有这个漏洞破绽bug,咱们可以或许利用source参数指向一个外部的JSON文件,以此来自界说该利用程序上的数据。 这个外部JSON文件具备CORS header:“Access-Control-Allow-Origin:*”,使得数据可以或许跨域加载。 而后利用程序利用这些数据来创立一个anchor href,代码如下所示:

a property="companyURL" mv-attribute="null" href="[companyURL]" target="_blank"> http://lea.verou.me a>
在href属性中,demo利用程序利用了一个Mavo表达式,“companyURL”从外部JSON中得到。如果我在外部JSON文件中包括如下内容: 
  {
    “companyLogo”:“http://lea.verou.me/logo.svg”,
    “companyName”:“Pwnd Pwnd”,
    “companyAddress”:“Pwnd”,
    “companyURL”:“javascript:alert(1)”,
    “companyEmail”:“pwnd”, ...
当上述的入侵攻击向量履行的时刻,由于加载了外部数据并将以后的数据给替换了,此时一个JavaScript URL便在文档中胜利创立了,感兴致的读者可以或许点击反省相干的POC入侵攻击向量 。
绕过NoScript XSS检测
默许环境下,Mavo容许咱们将HTML文档中的MavoScript嵌入到方括号内。 MavoScript是JavaScript的一种扩大,然则它和JavaScript有一些分歧。 比方,它支撑关键字'and','or'和'mod'运算操纵,它将'='操纵的寄义变动成比拟而非赋值,并支撑Math和date工具中的各类功效的函数。无关MavoScript语法的更多信息,请拜见此处 。如果Mavo碰到有效的MavoScript,那末它将把有效的MavoScript当做JavaScript来处置。如果咱们想要强迫履行JavaScript形式,那末可以或许在表达式开端的处所利用正文。比方,如果咱们想要Mavo来盘算HTML文档中的“1+1”表达式的值,并且该页面轻易遭到XSS的入侵攻击。 Mavo利用[]来盘算表达式的值,而Angular利用{{}}来盘算表达式的值,是以咱们在HTML文档中可以或许注入如下表达式:

inj=[1%2b1]
在Mavo中是完整没有沙盒的,但咱们的代码会被重写,并在一个with语句中履行。要挪用alert函数,咱们必要利用window工具,这里window.alert或self.alert函数都可以或许,代码如下所示:

[self.alert(1)]
咱们乃至可以或许经由过程利用直接挪用到达不利用window工具也能够或许挪用alert函数的目的,代码如下所示:

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载