11.Druid未授权访问漏洞
漏洞名称
Druid未授权访问漏洞
漏洞地址
https://zhuanlan.zhihu.com/p/386709187
漏洞等级
中危
漏洞描述
Druid是阿里巴巴数据库事业部出品,为监控而生的数据库连接池。Druid提供的监控功能,监控SQL的执行时间、监控Web URI的请求、Session监控。当开发者配置不当时就可能造成未授权访问。
漏洞成因
如果网站无需登录,则可利用未授权访问漏洞,直接访问以下链接:
html: /druid/index.html #Druid Index /druid/sql.html #Druid sql监控页面 /druid/weburi.html #Druid Web URI监控页面 /druid/websession.html #Druid Web Session监控页面 json: /druid/weburi.json #Druid Web URI json /druid/websession.json #Druid Web Session json Druid 登录接口: /druid/login.html #Druid登录认证页面 其他: /system/druid/login.html /webpage/system/druid/login.html /druid/datasource.html /druid/wall.html /druid/webapp.html /system/druid/websession.html /webpage/system/druid/websession.html /druid/spring.html /druid/api.html
漏洞危害
通过泄露的Session登录后台。
当/druid/websession.html页面存在数据时,我们可利用该页面的session伪造登录,点击最后访问时间,然后复制一条离现在时间最为接近的session进行伪造登录;之所以要点击最后访问时间排序session,是因为此处记录的Session并非全部都是用户在线时的session,当用户退出系统时,session虽然还存在,但已失效,无法再利用。
修复方案
Druid 开启权限校验。
Druid 的验证方式官网提供了一种根据ip来做访问限制的方式,即allow和deny, 详询 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE
还有一种方式,即用户名和密码
首先从web.xml中的servlet出发
<servlet> <servlet-name>DruidStatView</servlet-name> <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> </servlet>
综合分析在web.xml中配置servlet的初始化参数loginUsername和loginPassword即可
在访问druid的监控页面,会自动转到login.html
Druid内置提供了一个StatViewServlet用于展示Druid的统计信息。
这个StatViewServlet的用途包括:
提供监控信息展示的html页面
提供监控信息的JSON API
配置web.xml
StatViewServlet是一个标准的javax.servlet.http.HttpServlet,需要配置在你web应用中的WEB-INF/web.xml中。
<servlet> <servlet-name>DruidStatView</servlet-name> <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DruidStatView</servlet-name> <url-pattern>/druid/*</url-pattern> </servlet-mapping>
根据配置中的url-pattern来访问内置监控页面,如果是上面的配置,内置监控页面的首页是/druid/index.html
配置监控页面访问密码
需要配置Servlet的 loginUsername 和 loginPassword这两个初始参数。
示例如下:
<!-- 配置 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>
测试过程
应用系统存在Druid后台弱口令,可获取系统的运行状态,系统的会话情况。
http://0.0.0.0:8888/mobile/druid/sql.html http://0.0.0.0:8888/mobile/druid/basic.json http://0.0.0.0:8888/mobile/druid/webapp.html http://0.0.0.0:8888/mobile/druid/login.html http://0.0.0.0:8888/mobile/druid/websession.html http://0.0.0.0:8888/mobile/druid/spring.html http://0.0.0.0:8888/mobile/druid/index.html http://0.0.0.0:8888/mobile/druid/api.html http://0.0.0.0:8888/mobile/druid/wall.html http://0.0.0.0:8888/mobile/druid/datasource.html http://0.0.0.0:8888/mobile/druid/weburi.html
复测情况
已修复
测试人员
南风向晚