这期内容当中小编将会给大家带来有关ESI注入中如何利用缓存服务形成的SSRF和其它客户端形式渗透,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Edge Side Includes (ESI)标记语言主要用于各种流行的HTTP代理中(如反向代理、负载均衡、缓存服务器、代理服务器)解决网页缓存问题。早前我们在进行安全评估时发现了Edge Side Includes (ESI) 的一个异常行为,经测试后发现,对ESI的成功利用可形成SSRF、绕过HTTPOnly cookie标记的XSS攻击和服务端的拒绝服务攻击,我们把ESI的这种利用技术称为 ESI 注入(ESI Injection)。通过验证,我们发现十多种支持ESI的应用,如Varnish,Squid Proxy,IBM WebSphere,Oracle Fusion / WebLogic,Akamai,Fastly,F5,Node.js ESI,LiteSpeed等其它一些特定的语言插件,这些应用或插件如果启用ESI功能之后,就会存在ESI注入漏洞风险。ESI标记语言主要基于一个XML标签集,被用在很多流行的HTTP代理中来解决高负荷的网页缓存问题,ESI标签用于指引反向代理(或缓存服务器)获取缓存中待取的网页内容信息,在客户端发起请求之前,这些内容信息也有可能来自其它服务器中,而且这些缓存页面中还包含了动态内容。ESI使用简单的标记语言来对网页中可以加速和不能加速的内容片断进行描述,最终每个网页都可被划分成不同片段部分,并赋予了不同的缓存控制策略,使缓存服务器可以根据缓存策略,在将完整的网页发送给用户之前能将不同的片段部分动态地组合在一起。通过这种控制方式,可以有效地减少从服务器抓取整个页面的次数,而只用从原服务器中提取少量的不能缓存的片断,因此可以有效降低服务器的负载,同时提高用户访问的响应时间。ESI多在缓存服务器或代理服务器上执行。ESI技术的一个常见用例是处理包含动态内容的静态页面,开发者可使用ESI标签替换页面中的动态部分来增加缓存的灵活性,因此,当页面被请求时,ESI标签就会代理被获取处理,确保了后端应用服务器的性能。下图天气预报页面就是ESI技术的一个典型用例,天气预报网站缓存了一个城市的天气页面内容,其中的动态数据会被各自的ESI标签替换并指向一个API服务端URL,缓存和动态内容共同构成了实时的天气状况:ESI语法非常简单,上面这个天气预报示例的HTML文件是这样形式的:最早的ESI规范可追溯到2001年,那时ESI应用到每种程序中的定义都各自不同,每种产品中的功能也各有特色,有些还存在功能缺失。可以参考原始的ESI规范定义,它描述了标记语言的各种功能应用,而很多应用厂商后来在其中增加了更多的功能。
在上游服务器响应的和恶意攻击者注入HTTP的ESI标签之间,HTTP代理是不能区分合法ESI标签的,也就是说,如果攻击者能成功把ESI标签注入到HTTP响应内容中后,代理就会通过评估解析,认为它们是来自上游服务器响应的合法ESI标签。ESI解析器在处理ESI标签时,小于号大于号之间的字符不会被编码或转义,如今,Web应用服务器会转义一些用户输入的特殊字符以防止XSS攻击,虽然这样能有效阻止代理解析后返回的ESI标签语义,但有时候ESI标签可以注入到非HTML形式的HTTP响应内容中去。实际上,现在ESI的新功能能使开发者将动态内容添加到其它缓存或静态数据源中,如JSON对象和CSV对象等。ESI+JSON对象的处理方式,可参考此处文章,其中演示了JSON对象中的ESI解析器通过配置处理ESI标签的过程。由于现在的应用框架都会把转义过程语境化,API服务端在JSON属性中包含HTML形式的字免费云主机域名符串并不少见,因为这些信息不会被浏览器当做HTML解析。然而,这也使得攻击者可以用信息传输过程中代理能解析的ESI标签去注入到JSON响应的输入中,形成毒化。上述场景比较少见,大多数的攻击途径是是后端服务器会解析ESI标签,然后通过启用了ESI的负载均衡或者代理进行处理。显然,如果用户的输入要经过过滤审查,那么就可以有效缓解XSS攻击,且ESI标签也会被编码且不会被代理处理解析。无疑,最常见也是最有用的功能可能要数includes标签了,能被代理或者负载均衡处理解析ESI include标签可执行HTTP请求获取动态内容。如果攻击者在HTTP响应中添加进入一个ESI标签,这种组合形式就能导致代理服务器环境(不是应用服务器)中的SSRF攻击。如以下的Payload可在HTTP代理中实现SSRF攻击:
x=>alert(/Chrome%20XSS%20filter%20bypass/);
某些ESI实现不支持ESI变量,当然也就无法用这种方式来利用,当includes标签可用时,则可以把includes标签指向一个包含有XSS payload的外部域,如下即为一个典型的利用ESI includes标签从SSRF过渡到XSS攻击的示例:
poc.html:然后,向页面的ESI includes中注入ESI 标签:GET /index.php?msg=
表格中的各属性如下:Includes:该列描述了ESI 引擎对
发出的ESI includes标记请求如下:GET / HTTP/1.1User-Agent: curl/7.57.0Accept: */*Host: anything.comX-Forwarded-For: 127.0.0.1JunkHeader: JunkValueX-Forwarded-For: 209.44.103.130X-Varnish: 120
另外,我们还在Akamai ESI Test Server 、Fastly、NodeJS’ ESI、NodeJS’ nodesi等多种产品和应用中成功实现了ESI注入攻击的漏洞测试。一些代理产品会在Surrogate-Control HTTP header标记头中加入ESI处理机制以实现验证识别,该标记头可用于告知上游服务器ESI标签在响应内容中的存在情况,以备进行一些相应的解析操作。如果你发现一个像这种的HTTP标记头响应内容:Surrogate-Control: content=”ESI/1.0”,那说明处理流程中可能存在启用ESI的架构。但是,大多数代理和负载均衡器在把响应发送到客户端之前,都会移除掉header标记头,有些代理也甚至不需要Surrogate-Control headers标记头。因此,这种ESI判断方式也不全适用。鉴于ESI 实现的功能选择较为广泛,目前还没有一种技术可以用来检测发现ESI注入。唯一较为全面的方法可能就是通过对各种ESI payload进行测试,总结出其中的各种威胁特征,以此来识别ESI注入。例如,ESI includes可用来对攻击者控制的服务器执行SSRF,但是有些环境下的实现却需要是白名单主机才行。本质上来说,ESI是一个过时的规范定义,但出乎意料的是,它竟然还被广泛用于一些流行的缓存系统中用来实现某些特定功能,虽然我们分析的一些产品中,大部分ESI功能都是默认禁用的,但还是存在一些ESI直接可用的产品应用,如IBM WebSphere、Squid3、Oracle Fusion/WebLogic、F5以及LiteSpeed。ESI注入对用户输入审查不当的后果,当具备ESI功能的代理去解析未经过滤的用户输入时,就会产生ESI注入攻击。通常来说,针对一些XSS的防护措施或框架都能有效对ESI注入有所防御,但实际来说,主要原因还在于ESI规范中对安全性的考虑不足。如前所述,可以通过将ESI includes可利用的域或主机列入白名单来部分缓解这种安全威胁,而且,作为软件供应商,也至少应该明确警告用户启用ESI功能可能会带来的风险。我们通过ESI功能在缓存服务和开源应用中的漏洞利用,测试演示了一种之前从未公开过的攻击途径,最终实现了Cookie渗漏、SSRF和客户端XSS过滤绕过,在此过程中,我们也对这种漏洞利用技术的条件和Payload进行了解释说明,希望这种思路能对漏洞挖掘者有所帮助,同时也借此引起安全社区和产品供应商对ESI功能的重视。上述就是小编为大家分享的ESI注入中如何利用缓存服务形成的SSRF和其它客户端形式渗透了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注云编程开发博客行业资讯频道。
相关推荐: 好系统教您WinXP系统桌面快捷方式打不开怎么办
相信很多用户常常为了方法操作都会将软件安装在桌面,这样正在桌面上就形成一个个快捷方式图标了,可是最近有很多winxp用户反映桌面快捷方式打不开了,这就让用户非常苦恼。那么遇到这个问题该如何解决呢?现在小编就为大家介绍winxp系统桌面快捷方式打不开的解决方法。…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。