java常见未授权组件

admin 2024年2月27日14:23:05评论10 views字数 5594阅读18分38秒阅读模式

前言

在java项目中,经常会使用一些监控类的组件来监控系统的状态,如果对这些组件没有做好权限控制,公网可以任意访问的话,就会泄露敏感信息,进一步造成更严重的危害。今天就来看一下,都有哪些组件。

java项目中可能造成未授权的组件

java常见未授权组件

Druid未授权漏洞

Druid是阿里巴巴数据库出品的,为监控而生的数据库连接池,并且Druid提供的监控功能,监控SQL的执行时间、监控Web URI的请求、Session监控,首先Druid是不存在什么漏洞的。但当开发者配置不当时就可能造成未授权访问。

检测与利用:

直接在网站的url中后加上:

/druid/index.html

如果可以无需登录,即可登录到Druid监控界面,则说明该网站存在Druid未授权访问漏洞!

java常见未授权组件

java常见未授权组件

从这里可以看到,Druid数据监控界面,里面存在数据源,sql监控,sql防火墙,web应用,url监控,session监控,spring监控等信息,可以详细监控该网站的情况,获取敏感信息,在web监控中,可以获取整个网站的目录,在session监控中,可以获取网站用户的session,从而伪造用户session进行登录!

修复建议

方法1: 设置StatViewServlet(监控页面)为 false

方法2: 给druid的web页面设置账户密码,增加访问druid的权限。

spring:  datasource:    druid:      max-active: 10      min-idle: 1      stat-view-servlet:        # 是否启用StatViewServlet(监控页面),默认true-启动,false-不启动        enabled: true        # 禁用HTML页面上的"Reset All"功能        reset-enable: false        # 设置账户名称(增加登录权限)        login-username: xxxx        # 设置账户密码        login-password: xxxxxxxx        # IP白名单(没有配置或者为空,则允许所有访问)        allow: 127.0.0.1        # IP黑名单(存在共同时,deny优先于allow)        deny: 10.0.0.1        # 自定义druid连接        url-pattern: '/druid/*'

SwaggerUI未授权漏洞

Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。相关的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger-UI会根据开发人员在代码中的设置来自动生成API说明文档,若存在相关的配置缺陷,攻击者可以未授权翻查Swagger接口文档,得到系统功能API接口的详细参数,再构造参数发包,通过回显获取系统大量的敏感信息。

Swagger 未授权访问地址存在以下默认路径:

/api/api-docs/api-docs/swagger.json/api.html/api/api-docs/api/apidocs/api/doc/api/swagger/api/swagger-ui/api/swagger-ui.html/api/swagger-ui.html//api/swagger-ui.json/api/swagger.json/api/swagger//api/swagger/ui/api/swagger/ui//api/swaggerui/api/swaggerui//api/v1//api/v1/api-docs/api/v1/apidocs/api/v1/swagger/api/v1/swagger-ui/api/v1/swagger-ui.html/api/v1/swagger-ui.json/api/v1/swagger.json/api/v1/swagger//api/v2/api/v2/api-docs/api/v2/apidocs/api/v2/swagger/api/v2/swagger-ui/api/v2/swagger-ui.html/api/v2/swagger-ui.json/api/v2/swagger.json/api/v2/swagger//api/v3/apidocs/apidocs/swagger.json/doc.html/docs//druid/index.html/graphql/libs/swaggerui/libs/swaggerui//spring-security-oauth-resource/swagger-ui.html/spring-security-rest/api/swagger-ui.html/sw/swagger-ui.html/swagger/swagger-resources/swagger-resources/configuration/security/swagger-resources/configuration/security//swagger-resources/configuration/ui/swagger-resources/configuration/ui//swagger-ui/swagger-ui.html/swagger-ui.html#/api-memory-controller/swagger-ui.html//swagger-ui.json/swagger-ui/swagger.json/swagger.json/swagger.yml/swagger//swagger/index.html/swagger/static/index.html/swagger/swagger-ui.html/swagger/ui//Swagger/ui/index/swagger/ui/index/swagger/v1/swagger.json/swagger/v2/swagger.json/template/swagger-ui.html/user/swagger-ui.html/user/swagger-ui.html//v1.x/swagger-ui.html/v1/api-docs/v1/swagger.json/v2/api-docs/v3/api-docs

可以添加上述默认路径到dirsearch等目录扫描工具的字典中,再对目标网站进行扫描测试。

如下图显示的页面

java常见未授权组件

漏洞修复

  1. 配置Swagger开启页面访问限制。

  2. 排查接口是否存在敏感信息泄露(例如:账号密码、SecretKey、OSS配置等),若有则进行相应整改。

Spring boot Actuator未授权漏洞

Actuator 是 Spring Boot 提供的服务监控和管理中间件。当 Spring Boot 应用程序运行时,它会自动将多个端点注册到路由进程中。而由于对这些端点的错误配置,就有可能导致一些系统信息泄露、XXE、甚至是 RCE 等安全问题。

端点描述

路径  

描述

/autoconfig

提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过

/beans

描述应用程序上下文里全部的Bean,以及它们的关系

/env

获取全部环境属性

/configprops

描述配置属性(包含默认值)如何注入Bean

/dump

获取线程活动的快照

/health

报告应用程序的健康指标,这些值由HealthIndicator的实现类提供

/info

获取应用程序的定制信息,这些信息由info打头的属性提供

/mappings

描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系

/metrics

报告各种应用程序度量信息,比如内存用量和HTTP请求计数

/shutdown

关闭应用程序,要求endpoints.shutdown.enabled设置为true

/trace

提供基本的HTTP请求跟踪信息(时间戳、HTTP头等)

漏洞发现

一般分为两步

1. 识别当前 web 应用使用的框架为 springboot 框架;

2. 枚举执行器端点路径;

1. 识别当前 web 应用使用的框架为 springboot 框架。主要有两个方法判断:

①通过 web 应用程序网页标签的图标(favicon.ico);如果 web 应用开发者没有修改 springboot web 应用的默认图标,那么进入应用首页后可以看到如下默认的绿色小图标:

该绿色小图标是 spring 框架下的一个默认图标,尽管不能百分百就此图标确认当前 web 应用使用的是 springboot 框架,但是基本上也能百分之八十确认该 web 应用是使用 springboot 框架开发的了(毕竟 springboot 框架确实是太流行了)。

②通过 springboot 框架默认报错页面;如果 web 应用开发者没有修改 springboot web 应用的默认 4xx、5xx 报错页面,那么当 web 应用程序出现 4xx、5xx 错误时,会报错如下(此处仅以 404 报错页面为例):

java常见未授权组件

当出现如上报错页面,就能确定当前 web 应用是使用了 springboot 框架的。

那么综合以上两个途径来判断当前 web 应用是否是 springboot 框架,就是通过访问不同的目录,看是否有小绿叶图标,然后就是想办法在不同目录下触发应用程序的 4xx 或 5xx 错误,看是否有 Whitelabel Error Page 报错。

2. 枚举执行器端点路径。这个其实很简单,在确认当前 web 站点是 springboot 框架后,枚举当前站点的所有一级、二级甚至三级目录,然后写脚本对每个目录进行探测,查看目录下是否存在 actuator 执行端点路径即可。也可以将这些路径放到目录扫描工具去扫描。

尽管这些监控信息的泄露已经足够高危了,但是还有一些提高漏洞危害性的利用方式

①认证字段的获取以证明可影响其他用户;这个主要通过访问/trace 路径获取用户认证字段信息,比如如下站点存在 actuator 配置不当漏洞,在其 trace 路径下,除了记录有基本的 HTTP 请求信息(时间戳、HTTP 头等),还有用户 token、cookie 字段:

trace 路径下用户认证字段泄露:

java常见未授权组件

②数据库账户密码泄露;由于 actuator 会监控站点 mysql、mangodb 之类的数据库服务,所以通过监控信息有时可以拿下 mysql、mangodb 数据库;这个主要通过/env 路径获取这些服务的配置信息,比如如下站点存在 actuator 配置不当漏洞,通过其/env 路径,可获得 mysql、mangodb 的用户名及密码:

java常见未授权组件

③git 项目地址泄露;这个一般是在/health 路径,访问其 health 路径可探测到站点 git 项目地址

④后台用户账号密码泄露;这个一般是在/heapdump 路径下,访问/heapdump 路径,返回 GZip 压缩 hprof 堆转储文件。在 Android studio 打开,会泄露站点内存信息,很多时候会包含后台用户的账号密码,通过泄露的账号密码,可以进入后台进行一波测试。

Spring Eureka未授权访问漏洞

Spring Eureka是一个服务注册和发现的组件,他提供了一个web页面用于展示注册的服务信息。如果没有做好权限控制,可能会导致未授权访问漏洞

漏洞利用方式

直接访问路径/eureka/,看是否可以访问

或者添加消息头X-Forwarded-For:127.0.0.1看是否可以绕过

java常见未授权组件

漏洞危害

1.泄露敏感信息:如果公网可以访问,会把注册信息泄露

2.与其它漏洞进行利用:如spring boot actuator+eureka+xstream可以导致RCE漏洞。该漏洞可以看下面的链接:https://blog.csdn.net/qq_18980147/article/details/128041932

web页面如何访问

server:  port: 8801   # 服务端口号 spring:  application:    name: lovineurkaclient     # 服务名称 eureka:  client:    serviceUrl:      defaultZone: http://localhost:8881/eureka/   # 注册到的eureka服务地址

如上面的配置,web页面的访问链接就是http://localhost:8881/eureka/

java常见未授权组件

修复方式

1. 启用Spring Security进行身份验证,在Eureka Server的配置文件中添加如下配置,启用Spring Security进行身份验证,需要在Eureka Server中配置用户名和密码。

```security:basic:enabled: trueuser:name: adminpassword: password```

2. 配置Eureka Server的防火墙,可以配置防火墙,只允许指定IP地址或者网段访问管理界面。在Eureka Server的配置文件中添加如下配置:

```eureka:server:# 允许访问Eureka Server的IP地址或网段allow-registry-override: trueenable-self-preservation: false# 禁止修改Eureka Server的注册信息disable-self-registration: true# 配置Eureka Server的防火墙规则firewall:# 允许的IP地址或网段allow:- 192.168.1.0/24- 127.0.0.1```

3. 对于生产环境中的Eureka Server,建议使用VPN等安全通道进行访问,避免直接暴露在公网上

总结

上面介绍了java项目中一些常见组件的未授权漏洞,这些往往是由于配置的问题导致的,在测试的时候一定要注意这些组件的权限问题。

原文始发于微信公众号(信安路漫漫):java常见未授权组件

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月27日14:23:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   java常见未授权组件http://cn-sec.com/archives/2528487.html

发表评论

匿名网友 填写信息