0x01 原理

Actuator是 Spring Boot 提供的对应用系统的自省和监控的集成功能,可以对应用系统进行配置查看、相关功能统计等。在 Spring Cloud 中主要是完成微服务的监控,完成监控治理。可以查看微服务间的数据处理和调用,当它们之间出现了异常,就可以快速定位到出现问题的地方。
当Spring Boot应用程序运行时,它会自动将多个端点(例如/health, /trace, /beans, /env等)注册到路由进程中。 对于Spring Boot 1-1.4,它们无需身份验证即可访问,从而导致严重的安全问题。 从Spring 1.5版开始,默认情况下,除/health/info之外的所有端点都被视为安全的,但应用程序开发人员通常会禁用此安全性。以下Actuator端点可能具有安全隐患。

  • /dump - 显示线程转储情况(包括堆栈跟踪)
  • /trace- 显示最后几条HTTP消息(可能包含会话标识符)
  • /logfile - 输出日志文件的内容
  • /shutdown - 关闭应用程序
  • /mappings - 显示所有MVC控制器映射
  • /env - 提供对配置环境的访问
  • /restart - 重新启动应用程序

    对于Spring 1x,它们在根URL下进行注册,并在2x版本中将此功能移动到/actuator/的路径下。


0x02 实例

该实例在内网中发现,通过goby扫描器发现存在spring actuator未授权访问。
访问https://*.*.*.*/actuator/env,可以看到如下内容:
图片.png
该页面中可泄露各种敏感信息,比如数据库地址、用户名等。在该实例中泄露了mysql的host和用户名。
下载/actuator/heapdump文件,heapdump文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况。HeapDump文件是指定时刻的Java堆栈的快照,是一种镜像文件。在该文件中,常常可以获得数据库密码等信息。
下载安装MemoryAnalyzer工具,执行以下sql语句:
select * from java.util.Hashtable$Entry x WHERE (toString(x.key).contains(“password”))
图片.png

  1. # 还有以下sql语句
  2. select * from java.util.Hashtable$Entry x WHERE (toString(x.key).contains("password"))
  3. select * from java.util.LinkedHashMap$Entry x WHERE (toString(x.key).contains("password"))

由于没有用户名信息,只有123!@#qwe这个密码,尝试将其连接到mysql数据库和mongoDB,用户名为env泄露的cms。连接成功,在数据库中找到管理员哈希后的密码,解密得到管理员密码,登入系统。图片.png 由于不知道spring框架怎么getshell,就到此为止了。