freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Spring Boot框架敏感信息泄露漏洞测试方法
2023-02-08 22:20:52
所属地 北京

一、Spring Boot框架介绍

Spring框架功能很强大,但是就算是一个很简单的项目,我们也要配置很多东西。因此就有了Spring Boot框架,它的作用很简单,就是帮我们自动配置,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。

Spring Boot框架的核心就是自动配置,只要存在相应的jar包,Spring就帮我们自动配置。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。如果默认配置不能满足需求,我们还可以替换掉自动配置类,使用我们自己的配置。另外,Spring Boot还集成了嵌入式的Web服务器,系统监控等很多有用的功能,让我们快速构建企业及应用程序。

二、Actuator中间件工具

ActuatorSpring Boot提供的服务监控和管理工具。当Spring Boot应用程序运行时,它会自动将多个端点注册到路由进程中。而由于对这些端点的错误配置,就有可能导致一些敏感信息泄露。

三、确定Spring Boot框架

1、网站的icon文件

1675865252_63e3aca442ac637868ebb.png!small?1675865252458

2、页面存在特有的报错信息

1675865262_63e3acae4e0a31a6b1a1c.png!small?1675865262290

四、敏感信息泄露漏洞

Spring Boot < 1.5:默认未授权访问所有端点。Spring Boot >= 1.5:默认只允许访问/health/info端点,但是此安全性通常被应用程序开发人员禁用了。

每个端点的作用和详细描述

路径          描述          默认启用auditevents  显示当前应用程序的审计事件信息  Yesbeans  显示一个应用中所有Spring Beans的完整列表  Yesconditions  显示配置类和自动配置类(configuration and auto-configuration  classes)的状态及它们被应用或未被应用的原因configprops  显示一个所有@ConfigurationProperties的集合列表  Yesenv  显示来自Spring的 ConfigurableEnvironment的属性  Yesflyway  显示数据库迁移路径,如果有的话  Yeshealth  显示应用的健康信息(当使用一个未认证连接访问时显示一个简单  的’status’,使用认证连接访问则显示全部信息详情)info  显示任意的应用信息  Yesliquibase  展示任何Liquibase数据库迁移路径,如果有的话  Yesmetrics  展示当前应用的metrics信息  Yesmappings  显示一个所有@RequestMapping路径的集合列表  Yesscheduledtasks  显示应用程序中的计划任务  Yessessions  允许从Spring会话支持的会话存储中检索和删除(retrieval and deletion)  用户会话。使用Spring Session对反应性Web应用程序的支持时不可用。shutdown  允许应用以优雅的方式关闭(默认情况下不启用)  Nothreaddump  执行一个线程dump  Yesheapdump  返回一个GZip压缩的hprof堆dump文件  Yesjolokia  通过HTTP暴露JMX beans(当Jolokia在类路径上时,WebFlux不可用)  Yeslogfile  返回日志文件内容(如果设置了logging.file或logging.path属性的话),支持使用HTTP Range头接收日志文件内容的部分信息  Yesprometheus  以可以被Prometheus服务器抓取的格式显示metrics信息  Yes

1、访问/actuator

如果网站设置了management.endpoints.web.exposure.include*,那么我们可以在/actuator看到所有存在的端点

1675865299_63e3acd35a85760d51d51.png!small?1675865299657

2、访问/actuator/version

会泄露一些版本信息

1675865314_63e3ace2c7e0e0ac79eeb.png!small?1675865314813

3、访问/env或者/actuator/env

其中可能会泄露数据库账号密码等敏感信息

1675865375_63e3ad1f2a98590562e7f.png!small?1675865376169

针对env这种路径下泄露的密码基本上都是加密的,会用星号进行脱敏,想要获取相应的明文密码可以尝试后面通过分析heapdump数据的方式。

4、访问/actuator/metrics

获得每个度量的名称,其中主要监控了JVM内容使用、GC情况、类加载信息等

1675865387_63e3ad2b30ad62ccca37d.png!small?1675865387289

如果想要得到每个度量的详细信息,需要传递度量的名称到URL中,如下

http://xx.xx.xx.xx/actuator/metrics

1675865408_63e3ad406f0433fe2f989.png!small?1675865408446

5、访问/actuator/threaddump

获取服务器的线程堆栈信息

1675865425_63e3ad511f013a3826f6f.png!small?1675865425130

6、访问/actuator/loggers

获取服务器的日志级别

1675865444_63e3ad64babd990ecbf44.png!small?1675865444970

7、访问/actuator/configprops

查看配置文件中设置的属性内容,以及一些配置属性的默认值

1675865470_63e3ad7e27f177edcfb83.png!small?1675865470165

8、访问/actuator/info

展示了关于应用的一般信息,这些信息从编译文件比如META-INF/build-info.properties或者git文件比如git.properties或者任何环境的property中获取

1675865482_63e3ad8ad612e5aac3be2.png!small?1675865483065

9、访问/actuator/prometheus

获取一些监控指标

1675865495_63e3ad977d71b56ae58b5.png!small?1675865495763

10、访问/actuator/mappings

响应信息描述全部的URI路径,以及它们和控制器的映射关系

1675865514_63e3adaa9824580529acc.png!small?1675865514853

11、访问/actuator/health

health一般只展示了简单的UP和DOWN状态,比如这样:

1675865525_63e3adb558f15794f6b8c.png!small?1675865525593

为了获得健康检查中所有指标的详细信息,就需要通过在application.yaml中增加如下内容

management:endpoint:health:show-details: always

一旦打开上述开关,那么在/health中可以看到详细内容,比如下面这样

{"status": "UP","diskSpace": {"status": "UP","total": 209715195904,"free": 183253909504,"threshold": 10485760}"db": {"status": "UP","database": "MySQL","hello": 1}}

12、访问/heapdump或者/actuator/heapdump

Heap Dump也叫堆转储文件,是一个Java进程在某个时间点上的内存快照。Heap Dump是有着多种类型的。不过总体上heap dump在触发快照的时候都保存了java对象和类的信息。通常在写heap dump文件前会触发一次FullGC,所以heap dump文件中保存的是FullGC后留下的对象信息。其中可能会含有敏感数据,如数据库的密码明文等。

直接访问路径会返回一个GZip压缩的JVM堆dump,其中是jvm heap信息。下载的heapdump文件大小通常在 50M—500M 之间,有时候也可能会大于 2G。

1675865563_63e3addb371d0db7f5ed2.png!small?1675865563410

1675865573_63e3ade50da8d32a5badd.png!small?1675865573096

下载完成之后可以借助一些工具对其中的数据进行内容检索,寻找敏感信息。

推荐工具:

1.Eclipse Memory Analyzer(MAT)

https://www.eclipse.org/mat/downloads.php

使用MAT打开heapdump文件

1675865591_63e3adf72f4dbceaf6ba3.png!small?1675865591298

选择使用OQL进行查询

查看所有配置信息的语句,点击上方红色的感叹号执行语句

select * from org.springframework.web.context.support.StandardServletEnvironment

1675865613_63e3ae0dedd4177659cbd.png!small?1675865613982

查看包含“password”的信息的语句

select * from java.util.LinkedHashMap$Entry s WHERE (toString(s.key).contains("password"))或者select * from java.util.Hashtable$Entry s WHERE (toString(s.key).contains("password"))

1675865632_63e3ae205cb38947dd422.png!small?1675865632645

查看包含“SESSION”的信息

select * from java.lang.String s WHERE toString(s) LIKE ".*SESSION.*"

1675865648_63e3ae30208f982a350af.png!small?1675865648890

2.heapdump_tool

https://github.com/wyzxxz/heapdump_tool

加载heapdump文件,选择1模式加载文件中所有的对象

1675865666_63e3ae42845defdc76580.png!small?1675865666673

查找包含password字段的的对象,返回大量的信息

1675865676_63e3ae4ce0bc5123a21ca.png!small?1675865677128

1675865687_63e3ae572215c6bb89383.png!small?1675865688722

除了明文密码,还可以查找其他信息getip获取IP地址信息

1675865697_63e3ae618651a983b2785.png!small?1675865697629

getfile获取文件信息

1675865712_63e3ae706dd5c0f08380d.png!small?1675865713562

geturl获取url信息

1675865722_63e3ae7a9792bf9644bb1.png!small?1675865723142

3.JDumpSpider

https://github.com/whwlsfb/JDumpSpider

使用方法

https://blog.csdn.net/gw5205566/article/details/105666637

五、相关脚本和字典

1、Spring Boot敏感端点路径专属字典

%20/swagger-ui.htmlactuatoractuator/auditeventsactuator/beansactuator/conditionsactuator/configpropsactuator/envactuator/healthactuator/heapdumpactuator/httptraceactuator/hystrix.streamactuator/infoactuator/jolokiaactuator/logfileactuator/loggersactuator/mappingsactuator/metricsactuator/scheduledtasksactuator/swagger-ui.htmlactuator/threaddumpactuator/traceapi.htmlapi/index.htmlapi/swagger-ui.htmlapi/v2/api-docsapi-docsauditeventsautoconfigbeanscachescloudfoundryapplicationconditionsconfigpropsdistv2/index.htmldocsdruid/index.htmldruid/login.htmldruid/websession.htmldubbo-provider/distv2/index.htmldumpentity/allenvenv/(name)eurekaflywaygateway/actuatorgateway/actuator/auditeventsgateway/actuator/beansgateway/actuator/conditionsgateway/actuator/configpropsgateway/actuator/envgateway/actuator/healthgateway/actuator/heapdumpgateway/actuator/httptracegateway/actuator/hystrix.streamgateway/actuator/infogateway/actuator/jolokiagateway/actuator/logfilegateway/actuator/loggersgateway/actuator/mappingsgateway/actuator/metricsgateway/actuator/scheduledtasksgateway/actuator/swagger-ui.htmlgateway/actuator/threaddumpgateway/actuator/tracehealthheapdumpheapdump.jsonhttptracehystrixhystrix.streaminfointergrationgraphjolokiajolokia/listliquibaselogfileloggersmappingsmetricsmonitorprometheusrefreshscheduledtaskssessionsshutdownspring-security-oauth-resource/swagger-ui.htmlspring-security-rest/api/swagger-ui.htmlstatic/swagger.jsonsw/swagger-ui.htmlswaggerswagger/codesswagger/index.htmlswagger/static/index.htmlswagger/swagger-ui.htmlswagger-dubbo/api-docsswagger-uiswagger-ui.htmlswagger-ui/htmlswagger-ui/index.htmlsystem/druid/index.htmltemplate/swagger-ui.htmlthreaddumptraceuser/swagger-ui.htmlv1.1/swagger-ui.htmlv1.2/swagger-ui.htmlv1.3/swagger-ui.htmlv1.4/swagger-ui.htmlv1.5/swagger-ui.htmlv1.6/swagger-ui.htmlv1.7/swagger-ui.html/v1.8/swagger-ui.html/v1.9/swagger-ui.html/v2.0/swagger-ui.htmlv2.1/swagger-ui.htmlv2.2/swagger-ui.htmlv2.3/swagger-ui.htmlv2/swagger.jsonwebpage/system/druid/index.html

2、Spring Boot信息泄露扫描脚本

import requestsimport timewith open("url.txt", 'r') as temp:for url in temp.readlines():url = url.strip('\n')with open("SpringBoot信息泄露目录字典.txt", 'r') as web:webs = web.readlines()  for web in webs:web = web.strip()u = url + webr = requests.get(u)print("url为:" + u + ' ' + "状态为:%d"%r.status_code + ' ' + "content-length为:" + str(len(r.content)))  

1675865764_63e3aea418ef9412cf149.png!small?1675865764312

# Spring漏洞 # 信息泄露 # Spring # Spring Boot
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录