咨询热线:400-010-1233在线销售咨询
不方便打电话?让科腾联系您:

首页 > 公司动态 亚洲城

Exploit Spring Boot Actuator之Spring Clou

  今年二月份, 大佬写了一篇关于 Spring Boot Actuator 的利用,文中介绍了多种利用思和方式,接着作者在五月份的时候更新了文章,增加了在使用 Spring Cloud 相关组件时,通过修改 spring.cloud.bootstrap.location 变量实现 RCE 的方法,因为网上没有找到该方法的分析文章,自己 debug 并记录了一下过程,主要内容包括

  从过程中我们知道,命令执行是由于 SnakeYAML 在解析 YAML 文件时,存在反序列化漏洞导致的,来看一个使用 SnakeYAML 库反序列化的例子:

  SnakeYAML 支持 !! + 完整类名的方式来指定要反序列化的类,然后以 [arg1, arg2, ...] 的方式来传递构造方法参数,例子中的代码执行完后会出反序列化一个 java.net.URL 类的实例再来看一下文章给出的外部 yml 文件 yaml-payload.yml 的内容:

  代码执行后,会从 地址下载 jar 包,并在包中寻找一个 javax..EngineFactory 接口的实现类,然后实例化,因为这个 jar 包代码是可控的,因此可执行任意代码大致过程明白了,我们来 debug 一下作者给出的 yaml-payload.jar 代码见 ,关键代码为 AwesomeEngineFactory.java 类,构造函数中使用 Runtime 来执行系统命令:

  在 ServiceLoader 加载实现类的过程中,会调用无参数构造方法来创建实例,触发命令执行对应代码在yIterator 类的 nextService

  执行完后,你会发现计算器并没有弹出,此时,黑人问号???只能再次 debug 找下原因经过一番研究,发现是因为 spring.cloud.bootstrap.location 属性的值没有生效的缘故来回忆一下之前提到的第二个关键点

  作者是如何找到这个利用方式的?这个一直是看完这种大佬文章后第一个想知道答案的问题,也是最难的问题,这里尝试找到一些思和线索首先,在不使用 Spring Cloud 组件时,Spring Boot Actuator 的 /env endpoint 默认情况下只能读取变量的值,因此第一问题就是,如何得知有可以修改变量的功能?这里就需要对 Spring 生态,如 Spring Boot, Spring Cloud 等,有一定的了解和使用经验,否则会无从下手。通过搜索 Spring Cloud 的文档,找到了相关说明

  从文档中,我们也知道了请求 /refresh 可以触发 bootstrap context reload,并加载修改后的变量那么接下来的问题就是找到哪些变量是可以修改的,并且在 reload 之后会执行某些的操作。根据文章中的说明,能修改的变量非常的多,需要一一尝试。这里正向思考没有什么思,转从逆向,尝试从 spring.cloud.bootstrap.location 入手,根据 Spring 文档中的说明 customizing-bootstrap-properties

  可以得知这个变量是用于指定 bootstrap 配置文件的,支持的文件格式包括 yml 和 properties ,对 Java 安全熟悉的朋友可能会联想到 yml 的解析会存在的问题,如果这里配置文件的内容我们能够控制,就存在可以被利用的可能。再下一步,就是结合 Spring Cloud 源码和动手 debug,确定 spring.cloud.bootstrap.location 变量的处理和配置文件的解析过程。根据前面的分析,我们知道代码中会下载指定的 yml 文件,并且使用 SnakeYAML 库进行解析,因此存在反序列化漏洞。当然,实际的过程会比刚才描述的要复杂很多,需要投入很多的时间和精力阅读文档、调试代码。

  文章简单分析了在同时使用 Spring Boot Actuator 和 Spring Cloud 时,利用修改 spring.cloud.bootstrap.location 变量实现 RCE 的原理和步骤,虽然在高版本中无法利用成功,但过程还是很值得学习。并且由于 Spring 生态的框架和组件非常的多,或许会有更多的利用方法,感兴趣的可以尝试研究一下。最后,因个人水平有限,文章中可能会有描述不准确或者错误的地方,欢迎大家指出和交流

<< 返回

         

亚洲城

  • 联系电话:   400-010-1233
  • 地 址:       广州市天河区黄埔大道西平云路163号 广电科技大厦803-804、12楼
  • 传 真:     (8620)3835 2000
关于亚洲城 | 联系亚洲城 | 责任申明 | 网站地图 | 人才招聘 | 友情链接
Copyright © 2010 Guangzhou Ke Teng Information Technology Co. Ltd.All Rights Reserved.鄂ICP备16007204号-1