长亭百川云 - 文章详情

JAVA常用组件未授权漏洞解析

Notadmin

7

2024-03-01

前言

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

关于java安全的系列已经出了10篇,大家感兴趣可以去看一下,后续会继续出关于java安全方面的内容,如java内存马,Weblogic系列,spring框架系统漏洞等。

java安全基础-java反射

java安全基础-类加载机制

java安全基础-spring框架

java下exec命令执行问题

JNDI注入详解

JNDI注入高版本绕过方式

SPEL注入详解

java反序列化漏洞详解

java安全之fastjson反序列化详解

java安全 | Thymeleaf模板注入漏洞

由于本人水平有限,文章中可能会出现一些错误,欢迎各位大佬指正,感激不尽。如果有什么好的想法也欢迎交流~~

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

1704437735_6597a7e7ea5f66a8bda10.png!small?1704437736926

Druid未授权漏洞

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

检测与利用:

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

/druid/index.html

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

1704437752_6597a7f89e42d91113494.png!small?1704437753355

1704437766_6597a806201c479db8eb1.png!small?1704437766779

从这里可以看到,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等目录扫描工具的字典中,再对目标网站进行扫描测试。

如下图显示的页面

1704437833_6597a84974a5b06ba363c.png!small?1704437834202

漏洞修复

  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 报错页面为例):

1704437862_6597a866e14a171183265.png!small?1704437863536

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

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

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

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

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

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

1704437885_6597a87daf4f291944448.png!small?1704437886340

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

1704437890_6597a88261ba4bfd1bf4a.png!small?1704437891199

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

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

Spring Eureka未授权访问漏洞

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

漏洞利用方式

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

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

1704437910_6597a896793782a692892.png!small?1704437911056

漏洞危害

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/

1704437945_6597a8b94f442f6f2994d.png!small?1704437946151

修复方式

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

```
security:
basic:
    enabled: true
user:
    name: admin
    password: password
```

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

```
eureka:
server:
    # 允许访问Eureka Server的IP地址或网段
    allow-registry-override: true
    enable-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项目中一些常见组件的未授权漏洞,这些往往是由于配置的问题导致的,在测试的时候一定要注意这些组件的权限问题。

相关推荐
广告图
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2