从低危到高危:Druid未授权访问的深度利用与权限提升实战

张开发
2026/4/18 7:29:30 15 分钟阅读

分享文章

从低危到高危:Druid未授权访问的深度利用与权限提升实战
1. Druid未授权访问漏洞初探第一次遇到Druid未授权访问漏洞是在去年的一次企业安全评估中。当时我正在用xray对目标网站进行常规扫描突然在报告里看到一个奇怪的URL/druid/weburi.html。点开一看好家伙整个网站的后台接口路径全都暴露出来了。这就像不小心拿到了别人家的户型图虽然还没进门但已经知道每个房间的位置了。Druid是阿里巴巴开源的一个数据库连接池组件很多Java Web项目都会用到。它的监控页面本意是给管理员查看系统状态的但如果配置不当就会变成未授权访问漏洞。常见的泄露点有两个/druid/weburi.html会显示网站所有的URI访问记录/druid/websession.html会暴露所有用户的Session信息我遇到过最夸张的情况是一个电商平台的Druid页面直接暴露了支付接口的调用参数。攻击者甚至不需要登录就能看到完整的订单流水和用户手机号。不过当时客户觉得这只是个低危漏洞直到我演示了如何利用这些信息完成账户接管...2. 从信息泄露到会话劫持2.1 Session信息的提取与利用拿到websession.html页面后你会看到满屏的JSESSIONID。这些会话标识就像临时通行证有些可能已经过期但总有几个还在有效期内的。我的处理流程一般是用浏览器开发者工具直接复制整个表格内容在Sublime Text里用正则表达式提取JSESSIONIDJSESSIONID([^\s;])把提取出的Session保存为字典文件这里有个小技巧不同系统的Session有效期差异很大。金融类系统通常15分钟就过期而一些内部管理系统可能保持登录状态好几天。我曾经在某OA系统里发现过存活超过48小时的Session。2.2 会话有效性验证有了Session字典后我会先用Burp Intruder做个快速筛查。选择任意一个需要登录的接口比如/user/profile设置Payload为Session字典然后观察响应返回200Session有效302跳转到登录页Session已失效403错误Session有效但权限不足GET /api/user/info HTTP/1.1 Host: target.com Cookie: JSESSIONIDxxxxxx去年在某次渗透中我用这个方法扫出了87个有效Session其中有3个居然还是管理员权限。最离谱的是其中一个Session对应的账号竟然是系统运维负责人...3. 权限提升的实战技巧3.1 URI路径的深度利用光有Session还不够我们需要知道能访问哪些功能。这时候weburi.html就派上用场了。这个页面会显示所有被访问过的URI路径包括后台管理接口如/admin/user/addAPI端点如/api/v1/account/delete特殊功能页面如/export/database我的做法是把这些URI也做成字典配合有效的Session进行二次爆破。重点找以下关键词的路径admin/manager/rootuser/add/deleteconfig/export/importpassword/reset/change3.2 管理员权限的获取当发现权限不足的接口时比如返回403的/admin/user/list我会用之前收集的所有Session对这个接口单独测试。根据经验以下Session更容易获得高权限来自内网IP的访问记录最近24小时内的活跃SessionUser-Agent包含Admin、Manager等关键词的在某次实战中我通过这种方式找到了一个财务系统的超级管理员Session。更可怕的是这个系统竟然没有二次验证直接允许通过Session修改所有用户的密码。4. 漏洞防御方案4.1 基础防护措施如果你们的系统用了Druid请立即检查是否开启了鉴权配置servlet servlet-nameDruidStatView/servlet-name servlet-classcom.alibaba.druid.support.http.StatViewServlet/servlet-class init-param param-nameloginUsername/param-name param-valueadmin/param-value /init-param init-param param-nameloginPassword/param-name param-valuecomplex_password/param-value /init-param /servlet是否限制了访问IPBean public ServletRegistrationBean druidServlet() { ServletRegistrationBean reg new ServletRegistrationBean(); reg.setServlet(new StatViewServlet()); reg.addUrlMappings(/druid/*); // 只允许本地访问 reg.addInitParameter(allow, 127.0.0.1); return reg; }4.2 进阶安全建议对于已经上线的系统建议额外增加访问频率限制比如1分钟内超过10次访问就封IPSession绑定IP机制关键操作的多因素认证定期审计Druid监控页面的访问日志有次我给客户做安全加固发现他们的Druid页面虽然加了密码但用的居然是admin/admin这种弱口令。更糟的是这个密码在三个环境开发、测试、生产全都一样...

更多文章