Druid未授权访问解决

Druid未授权访问原因分析

漏洞说明:Druid由阿里巴巴数据库出品,为监控而生的数据库连接池,并且Druid可以提供监控,监控SQL的执行时间、监控Web URI的请求、Session监控等功能,使用广泛。

需要明确: Druid本身是不存在漏洞的,Druid未授权访问是因为开发者配置的不够全面,导致攻击者输入ip/druid/index.html即可直接即可登录到Druid监控界面,这就是所谓未授权,即可访问。

具体示例如图所示:

解决办法

1.添加登录用户名密码

未授权访问的常见原因:

(1)攻击者可以不输入账号密码即可访问管理页面

(2)或者是攻击者输入常见账号密码,比如账号:root,密码:123456等这种保密性很低的账号密码,即可访问管理页面。

以上这两种情况,都可以通过添加复杂的登录账号密码来解决。只要账号密码没有被掌握,可以很大程度避免未授权访问问题。

优点:

(1)可以继续使用Druid监控管理功能

(2)对用户使用习惯影响较小

缺点:

(1)为了尽可能降低风险,账号密码需要不定期更换,密码难度等级需要设定较高

(2)理论上来说仍然存在被攻击的可能性

具体解决方法(二选一):

(1)可以在druidConfig中配置:

@Bean
    public ServletRegistrationBean druidServlet() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
        servletRegistrationBean.setServlet(new StatViewServlet());
        servletRegistrationBean.addUrlMappings("/druid/*");
        Map<String, String> initParameters = new HashMap<>();
        initParameters.put("resetEnable", "false"); //禁用HTML页面上的“Rest All”功能
        initParameters.put("allow", "10.10.119.115");  //ip白名单(没有配置或者为空,则允许所有访问)
        initParameters.put("loginUsername", "admin");  //++监控页面登录用户名
        initParameters.put("loginPassword", "admin");  //++监控页面登录用户密码
        initParameters.put("deny", ""); //ip黑名单
        //如果某个ip同时存在,deny优先于allow
        servletRegistrationBean.setInitParameters(initParameters);
        return servletRegistrationBean;
    }

也可以在web.xml中配置

<!-- 配置 Druid 监控信息显示页面 -->
	<servlet>
		<servlet-name>DruidStatView</servlet-name>
		<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
		<init-param>
			<!-- 允许清空统计数据 -->
			<param-name>resetEnable</param-name>
			<param-value>true</param-value>
		</init-param>
		<init-param>
			<!-- 用户名 -->
			<param-name>loginUsername</param-name>
			<param-value>druid</param-value>
		</init-param>
		<init-param>
			<!-- 密码 -->
			<param-name>loginPassword</param-name>
			<param-value>druid</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>DruidStatView</servlet-name>
		<url-pattern>/druid/*</url-pattern>
	</servlet-mapping>

2.禁用Druid监控页功能

为了彻底避免未授权访问风险,如果不需要使用或者很少使用Druid的监控功能,可以尝试彻底禁用Druid监控页,这种做法比较简单粗暴,有利有弊。

优点:

(1)彻底避免未授权访问风险

(2)配置起来比较更加简单,禁用后无需再关心密码被破解问题

缺点:

(1)彻底禁用后,自己也无法使用Druid监控页功能

(2)可能影响使用习惯,可能影响工作的开展,降低Druid管理的便利性

在application.properties配置文件中添加一行代码即可:

#是否启用StatViewServlet(监控页面),true-启动,默认false-不启动,对于某些低版本druid-spring-boot-starter.jar默认是true
spring.datasource.druid.stat-view-servlet.enabled=false

是否启用StatViewServlet(监控页面),true-启动,默认false-不启动,对于某些低版本druid-spring-boot-starter.jar默认是true

例如:1.1.2版本

1.1.22版本

参考其他:

【漏洞预警】druid未授权访问漏洞
漏洞级别:高危
漏洞类型:逻辑漏洞

漏洞讲解:druid没有设置授权访问,通过/druid/index.html进入到druid监控页面后打开sessin监控,里面是监控的所有sessin,只要配置url监控里面的地址,判断session是否失效,拿到没有失效的sessin,通过浏览器cookie替换器,替换sessin,即可登录后台

1.检查 POM 清单中是否引用 Druid 组件:
	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>druid</artifactId>
		<version>${druid-version}</version>
	</dependency>

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.24</version>
</dependency>

2.检查application配置文件中是否开启Druid监控:
spring:
  datasource:
    druid:
      stat-view-servlet:
        # 是否启用StatViewServlet(监控页面),true-启动,默认false-不启动
        enabled: true
 或
spring.datasource.druid.stat-view-servlet.enabled=true


修复方法:

方式一:关闭druid监控
【springboot application.yml配置】
spring:
  datasource:
    druid:
      stat-view-servlet:
        # 是否启用StatViewServlet(监控页面),默认true-启动,false-不启动
        enabled: false

【application.properties配置】
#是否启用StatViewServlet(监控页面),默认true-启动,false-不启动
spring.datasource.druid.stat-view-servlet.enabled=false

方式二:配置内网白名单与账号密码

spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.login-username=自定义用户名
spring.datasource.druid.stat-view-servlet.login-password=强口令
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1 #禁止暴露公网

spring:
  datasource:
    druid:
      stat-view-servlet:
        # 是否启用StatViewServlet(监控页面),默认true-启动,false-不启动
        enabled: false
        login-username: 自定义用户名
        login-password: 强口令
allow: 127.0.0.1 #禁止暴露公网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值