单次点击完成长途代码实行:内容管理框架Drupal歹意图片上传破绽应用链分析 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

单次点击完成长途代码实行:内容管理框架Drupal歹意图片上传破绽应用链分析

申博_安全预警 申博 114次浏览 未收录 0个评论

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-

概述

近来,Drupal宣布了一组针对7.x和8.x版本的症结补钉。在更新中,包罗对一组破绽的修复,这些破绽是我们末了在介入针对该目的的破绽鼓励设计时提交的。这些破绽可以或许完成代码实行,但前提条件是进击者必需起首将三个歹意“图象”上传至目的服务器,并引诱经由身份验证的站点管理员点击精心设计的链接来完成代码实行。这并非一个顺遂的破绽应用门路,因而我们也没有取得TIP的奖项。然则,这些破绽可以或许被醉翁之意的进击者用来提议有针对性的进击,因而我们将对这些破绽举行细致分析。

经由历程对两个破绽的组合应用,可以或许完成单次点击后的代码实行,这两个破绽分别是ZDI-19-130和Sam Thomas发明的ZDI-19-291。经由历程在注册用户帐户时上传个人资料图片,或许在批评中上传图象,可以或许轻松完成恣意图象上传。固然,禁用用户注册和用户批评的Drupal站点不轻易遭到这些进击序言的影响,但我们照样发起这局部用户将Drupal服务器更新到最新版本。

ZDI-19-130是一个PHP反序列化破绽,经由历程应用该破绽,进击者可以或许猎取站点Admin权限的长途代码实行。ZDI-19-291是一个耐久的XSS破绽,进击者可以或许应用该破绽来强迫向管理员发出歹意请求,从而触发ZDI-19-130破绽。

ZDI-19-130的破绽应用道理,是基于Thomas往年早些时候在Black Hat上宣布的演讲(PDF),列位读者可以或许浏览该演讲的白皮书,也可以或许在这里寓目他在BSidesMCR上宣布过的统一个Black Hat演讲的视频。在演讲中,Thomas细致引见了他发明的一个新的载体,经由历程Phar紧缩包触发PHP反序列化破绽。实质上,PHP Phar紧缩包的元数据以PHP序列化对象的情势存储。Phar紧缩包上的文件操纵可以或许触发存储的元数据上的unserialization()(反序列化),终究可以或许致使代码实行。

另外一方面,ZDI-19-291是处置惩罚上传文件名历程当中与Perl兼容的正则表达式(PCRE)相干的破绽。当用户上传文件时,Drupal运用PRCE对文件名举行修正,以制止称号反复。在曩昔的8年中,包罗PCRE破绽的提交一直存在于代码库中,而且可以或许致使Drupal在屡次上传时删除文件名的扩展名,从而许可进击者上传恣意HTML文件。

回忆:PHP对象注入劈头

早在2009年,也就是iPhone 3GS宣布的统一年,Stefan Esser(@i0n1c)就证实PHP反序列化历程轻易遭到对象注入的影响,而且可以或许经由历程类似于ROP的代码重用手艺(PDF)来进一步应用。厥后,他制造了“面向属性编程”(Property Oriented Programming)(PDF)这一术语。在演示之前,PHP对象反序列化破绽重要都是拒绝服务破绽,或许难以应用的内存破坏破绽。

类似于ROP的初次表态,POP链的构建须要手工举行,而且历程较为烦琐,没有太多的对象或文献可以或许用来参考。我所晓得的独一参考资料,就是Johannes Dahse等人在2014年宣布的关于自动化POP链天生的优异文章(PDF)。但遗憾的是,他们从未对外向民众们宣布过他们的对象。

回忆:POP破绽应用商品化

PHP Generic Gadget Chains(PHPGGC)在2017年7月宣布了.PHP Generic Gadget Chain库,它可以或许被认为类似于ysoserial Java反序列化破绽Payload库。跟着PHP框架和库的提高,和PHP自动加载功用的资助,PHP反序列化破绽的应用终究变得异常简朴。

破绽应用:第一阶段(ZDI-19-291)

我们运用下面的PHP代码,来测试Drupal源代码中的一局部。依据源代码中的解释,下面的代码段实验星散文件名中ASCII掌握字符的局部,这局部字符值小于0x20,并用下划线“_”字符替换它们。“/u”形式修饰符使得PHP引擎将PCRE形式和主字符串视为运用了UTF-8编码。据我们推想,该修饰符已被增加到PCRE形式中,从而确保与UTF-8的兼容性。

单次点击完成长途代码实行:内容管理框架Drupal歹意图片上传破绽应用链分析

人人广泛会认为,UTF-8字符具有两个字节的长度。但与之相反,有用的UTF-8代码点多是1-4个字节长度。UTF-8旨在向后兼容ASCII字符集。因而,在单字节代码点范围内,ASCII(8位字节0x00到0x7F)和UTF-8界说存在交集。0x80到0xF4之间的八位字节用于多字节UTF-8代码点编码。依据RFC3629中的范例,C0、C1、F5到FF的八位字节值永久不会出如今有用的UTF-8字符串中。

破绽应用:第一阶段(测试)

单次点击完成长途代码实行:内容管理框架Drupal歹意图片上传破绽应用链分析

若是\xFF字节无效,而且\x80字节没有有用的前导字节,那末PHP将会抛出PREG_BAD_UTF8_ERROR毛病,而且每一个文档的$basename变量都将设置为NULL。

深切明白Glibc堆的完成(上)

在阅读本文之前,建议大家先读一下这篇文章,其中讨论了一个过时的但很重要的内存损坏漏洞,我将之称为“堆栈缓冲区溢出”。除此之外,我还假设如果我作为攻击者如何利用这些漏洞来控制远程程序并使其运行恶意shellcode。 在测试中,我发

在Drupal源代码中,在preg_replace()挪用以后,不实行任何毛病搜检。当包罗无效UTF-8字符文件名的图象两次上传至Drupal时,该函数将会运转,并将$basename变量松散地视为空字符串。末了,函数返回$destination,它被有用地设置为’_’.$counter++的效果。

单次点击完成长途代码实行:内容管理框架Drupal歹意图片上传破绽应用链分析

有了这个原语以后,进击者可以或许经由历程用户注册功用,将GIF花样的个人资料图片上传至Drupal站点,并致使其扩展名被删除。Drupal如今将会运用以下途径和文件名:

/sites/default/files/pictures/<YYYY-MM>/_0

来替换:

/sites/default/files/pictures/<YYYY-MM>/profile_pic.gif

只管对上传的个人资料图片举行了搜检,但在带有“.gif”扩展名的HTML文件中增加字符“GIF”,便可知足经由历程该搜检所需的请求。

同时,另有另外一种方法可以或许上传歹意GIF文件,就是批评编辑器。在这类情况下,图象将在/sites/default/files/inline-images/_0中供应。但是,在默许Drupal设置装备摆设的情况下,进击者须要在批评的帖子宣布之前注册用户帐户。

当上述歹意行动,与通常在没有任何Content-Type标头的情况下供应图象的现实相结合后,进击者可以或许将歹意GIF/HTML文件上传到Drupal服务器,并诳骗浏览器将歹意文件作为HTML网页显现,详细方法是将它们与内容范例提醒相链接。示例以下:

单次点击完成长途代码实行:内容管理框架Drupal歹意图片上传破绽应用链分析

总而言之,进击者可以或许在目的Drupal站点上完成耐久性XSS。进击者可以或许应用该破绽,强迫具有管理员权限的用户经由历程诱使登录用户接见歹意链接的体式格局,来完成第二阶段的歹意查询。在这里可以或许找到可实行的PoC。

破绽应用:第二阶段(ZDI-19-130)

ZDI-19-130破绽是经由历程位于/admin/config/media/file-system端点的file_temporary_path请求参数触发的反序列化破绽。进击者可以或许指定phar://流包装器(Wrapper)将file_temporary_path参数指向在进击之前上传到Drupal服务器的歹意Phar紧缩包。

下面的system_check_directory()函数,是处置惩罚请求的表单回调函数。依据Thomas的演示,文件操纵!is_dir($directory)足以致使PHP触发在Phar紧缩包中的元数据的反序列化。经由历程POP链破绽应用手艺,进击者可以或许运用精心设计的Phar紧缩包,在Web服务器的情况中实行恣意代码。

破绽应用:第二阶段(多语言)

在应用ZDI-19-130之前,我们必需将Phar紧缩包上传到目的。详细而言,这可以或许经由历程在用户注册时期上传JPEG/Phar多语言文件作为用户个人资料图片来完成。下面是一个PoC的JPEG/Phar多语言文件,当它与ZDI-19-130破绽应用配合运用时,将会在受害者主机上实行cat /etc/passwd敕令。

与JAR文件异常类似,Phar紧缩包是将种种组件打包到单个紧缩包文件中的鸠合。在PHP范例中,划定可以或许运用分歧的紧缩包花样来打包组件。在详细的破绽应用中,我们运用基于TAR的Phar紧缩包。

要建立多语言文件,进击者必需起首挑选JPEG图象向量。然后,基于TAR的Phar紧缩包完全存储在接近JPEG文件开首的JPEG解释段中。当剖析为TAR存档时,图象最先局部的JPEG段符号和解释段符号将致使第一个文件名的稍微破坏。当对TAR文件举行校验而且修复时,一旦存储在TAR/Phar紧缩包的第一个文件与包罗POP链Payload的Phar元数据组件文件不对应,这类细微的破坏关于破绽应用的现实所需功用来说是可有可无的。

破绽组合应用

我们回忆一下,进击者必需起首将ZDI-19-130 JPEG/Phar多语言图象文件上传到目的服务器,并肯定上传图象的地位。然后,进击者必需两次上传ZDI-19-291 GIF/HTML图象XSS,以使得图象以没有扩展名的文件名情势存储在服务器上。末了,进击者必需诱使网站管理员经由历程具有恰当内容范例提醒的链接,导航到目的服务器上托管的ZDI-19-291 GIF/HTML图象,以使浏览器将图象显现为HTML页面,并触发破绽的第二局部。若是一切顺遂,进击者将可以或许完成Web服务器上代码实行,并将获得反向Shell,如上面的演示视频所示。

总结

Thomas提出了一种新鲜的进击载体,可以或许为进击者翻开很多新的大门。除非PHP决议修正Phar紧缩包处置惩罚行动,不然程序员在经由历程文件操纵符通报用户掌握的数据时,须要分外小心。因为将用户掌握的数据通报到无害的文件操纵符(比方:is_dir())其实不会被视为高风险的操纵,我们估计,后续将会涌现更多应用此向量的破绽。跟着POP链破绽应用对象集的推动,PHP反序列化破绽将变得能被进击者轻松应用。软件供应商应当将这一近况视为serialize()的末了一根稻草,并应当马上动手换用更平安的json_encode()替换计划。

只管我没有获得TIP的终究奖项,但在全部研讨历程当中我照样发明了严峻的破绽,并以异常投入的状况举行了深入分析。若是列位读者对TIP设计感兴趣,请存眷我们的博客,这一系列运动的总奖金凌驾1000000美圆,人人可以或许会发明一些异常值得存眷的破绽潜伏范畴。

深切明白Glibc堆的完成(上)

在阅读本文之前,建议大家先读一下这篇文章,其中讨论了一个过时的但很重要的内存损坏漏洞,我将之称为“堆栈缓冲区溢出”。除此之外,我还假设如果我作为攻击者如何利用这些漏洞来控制远程程序并使其运行恶意shellcode。 在测试中,我发


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明单次点击完成长途代码实行:内容管理框架Drupal歹意图片上传破绽应用链分析
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

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

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