本文仅作为技术讨论及分享,严禁用于任何非法用途。
前言
最近发现了一个Springboot Actuator Jolokia 未授权访问漏洞
,了解了一下感觉挺好玩的,记录一下学习过程。
Actuator是Spring Boot提供的服务监控和管理中间件,默认配置会出现接口未授权访问,部分接口会泄露网站流量信息和内存信息等,使用Jolokia库特性甚至可以远程执行任意代码,获取服务器权限。
正文
漏洞位置
Jolokia是一款开源产品,用于为JMX(Java Management Extensions)技术提供HTTP API接口。其中,该产品提供了一个API,用于调用在服务器上注册的MBean并读/写其属性。JMX技术用于管理和监视设备、应用程序和网络驱动的服务。
通常我们发现它的时候可能是类似下面的路径:
1 | /actuator/jolokia/list |
响应结果是json格式:
整个json文本的内容非常多,通过vscode美化一下:
请求格式
jolokia的调用支持GET请求和POST请求格式。
GET请求:
1 | <base-url>/<type>/<arg1>/<arg2>/..../ |
如:
1 | http://localhost:8080/jolokia/read/java.lang:type=Memory/HeapMemoryUsage |
POST请求(json):
1 | { |
调用方法
那么如何调用MBean进行利用呢?相信看完下面的例子你就会懂了。
首先要理解我们可以做什么操作,Jolokia 可执行的操作(operations)有:read
、write
、exec
、search
、list
。
比如我要读取java.util.logging
下type=Logging
的attr
里面的LoggerNames
1 | /actuator/jolokia/read/java.util.logging:type=Logging/LoggerNames |
调用某个MBean:
1 | /actuator/jolokia/exec/com.sun.management:type=DiagnosticCommand/vmUnlockCommercialFeatures/ |
那么,哪些可以read
,哪些可以exec
呢?
我们可以观察list
列出的MBeans字典,attr
里面的都可以read
、write
,op
里面的方法都可以exec
如果要传递参数,则在后面加斜杠/
+参数值
,如果参数有/
或者!
等则需要按下表转义:
Escaped | Unescaped |
---|---|
!/ |
/ |
!! |
! |
!" |
" |
! (anything else) |
(anything else) |
如:
1 | /jolokia/exec/com.sun.management:type=HotSpotDiagnostic/dumpHeap/!/tmp!/a.hprof/0 |
一些可能有用的payload
1 | /jolokia/read/java.lang:type=Runtime/SystemProperties |
脚本
写了个简易脚本去读取所有的attr及执行所有的dump操作,基本上无害,看看能不能发现一些敏感数据:
1 | import requests |
小结
以上仅是个人不太深入的经验总结,欢迎批评指正。授人以鱼不如授人以渔,大家可根据对应的list
结果查找可利用的MBean。
参考
https://jolokia.org/reference/html/protocol.html#jolokia-operations
https://thinkloveshare.com/hacking/ssrf_to_rce_with_jolokia_and_mbeans/
https://wiki.96.mk/Web%E5%AE%89%E5%85%A8/Jolokia/%EF%BC%88CVE-2018-1000130%EF%BC%89Jolokia%20%E8%BF%9C%E7%A8%8B%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E/
https://www.hacking8.com/bug-product/Spring-Boot/Spring-Boot-Actuator-jolokia-%E9%85%8D%E7%BD%AE%E4%B8%8D%E5%BD%93%E5%AF%BC%E8%87%B4%E7%9A%84rce%E6%BC%8F%E6%B4%9E.html