若依(RuoYi)框架安全攻防:从指纹识别到未授权访问实战剖析
1. 若依框架指纹识别实战技巧第一次接触若依框架的渗透测试时我发现它的识别特征特别明显。就像在人群中找穿红色衣服的人一样简单若依系统也有自己的红色衣服——那些独特的标识特征。最典型的就是登录页面的样式。打开若依系统的登录页面你会看到非常规整的表单布局右上角通常会有个明显的系统名称标识。我测试过几十个若依系统发现它们都有个共同点页面底部会有请通过前端地址访问的提示文字。这个特征在渗透测试中特别有用就像指纹一样独一无二。更准确的方法是检查页面图标的哈希值。黑若依版本的图标哈希值是-1231872293而绿若依版本的图标哈希值是706913071。这个识别方法准确率几乎达到100%我在实际渗透中屡试不爽。具体操作很简单用Burp Suite抓包后查看favicon.ico的响应或者直接用浏览器开发者工具查看元素信息就能获取。登录页面的URL路径也有规律可循。常见的路径包括/login?redirect%2Findex/xxx/login?redirect%2Findex/admin/login/system/login验证码区域的样式也是重要识别点。若依的验证码通常采用四位数字背景有干扰线刷新按钮在右侧。这个特征组合在其他系统中很少见可以作为辅助判断依据。2. 未授权访问漏洞挖掘全攻略找到若依系统后下一步就是寻找未授权访问漏洞。这是我发现若依系统最危险的一类漏洞因为攻击者不需要任何凭证就能获取敏感信息。2.1 前端JS文件分析技巧现代前端开发都采用webpack打包若依也不例外。我通常会先查看页面加载的JS文件特别是那些带有哈希值的app.[hash].js文件。在这些文件中搜索baseUrl关键词往往能找到后端API的基础路径。实际操作中我发现大约70%的若依系统会暴露API基础路径。有的直接给出完整URL有的只给出相对路径如/prod-api。后者需要与当前域名拼接才能得到完整API地址。这个技巧帮我发现了无数个未授权接口。2.2 Druid监控未授权访问Druid监控是若依系统中最常见的未授权访问点。我整理了一份经典路径清单在渗透测试时按顺序尝试/prod-api/druid/login.html/dev-api/druid/login.html/api/druid/login.html/admin/druid/login.html/admin-api/druid/login.html成功进入Druid监控后重点查看两个页面/druid/weburi.html记录所有访问过的URI相当于系统的API文档/druid/websession.html展示当前活跃会话可以直接窃取他人session我曾在一次测试中通过websession.html获取到管理员的session直接替换cookie就进入了后台。这种漏洞的危害性极高相当于把系统大门敞开。2.3 Swagger接口未授权Swagger是另一个高危点。尝试以下路径/swagger-ui/index.html/v2/api-docs/v3/api-docs如果运气好你能看到完整的API文档包括所有接口参数和返回值。我见过最夸张的情况是连用户修改密码的接口都不需要认证。3. 数据库与服务漏洞利用3.1 Redis未授权访问若依系统常用Redis做缓存而Redis的默认配置往往存在未授权访问漏洞。检查6379端口是否开放尝试用redis-cli直接连接redis-cli -h 目标IP连接成功后可以枚举所有keykeys *我曾在某个系统中发现Redis存储了用户session通过修改这些数据可以直接提升权限。更危险的情况是Redis以root权限运行可以直接写SSH公钥实现服务器接管。3.2 Zookeeper未授权访问Zookeeper在集群部署的若依系统中可能出现。检查2181端口使用以下命令测试echo stat | nc 目标IP 2181如果返回Zookeeper版本信息说明存在未授权访问。这种情况下可以获取集群配置信息甚至修改服务注册数据。3.3 MySQL弱口令若依系统默认使用MySQL常见弱口令组合包括root/rootroot/123456ruoyi/123456admin/admin使用nmap扫描MySQL服务nmap -p 3306 --script mysql-brute 目标IP一旦获取数据库权限整个系统的用户数据就暴露无遗。我建议开发人员一定要修改默认密码并限制数据库的远程访问。4. 其他高危漏洞分析4.1 Shiro反序列化漏洞若依集成了Shiro框架如果rememberMe的默认密钥未修改就可能存在反序列化漏洞。检测方法很简单在登录请求中观察是否有rememberMe字段。使用工具检测java -jar shiro-exploit.jar -u http://目标IP/login这个漏洞可以直接导致远程代码执行危害性极高。开发团队必须修改默认密钥并升级到最新版本。4.2 逻辑缺陷配合弱口令若依有个有趣的特点某些版本会在前端直接显示密码明文。我遇到过几个系统查看页面源码就能找到管理员密码。配合常见的弱口令组合攻击成功率很高admin/admin123ry/admin123admin/123456建议开发团队实施强密码策略并定期扫描弱口令账户。作为渗透测试人员弱口令永远是我的第一尝试目标。5. 防御建议与修复方案在发现这么多漏洞后我也总结了一些防御经验。首先修改所有默认配置是关键。Druid监控、Swagger文档这些组件都应该设置强密码最好限制访问IP。其次服务端口不要直接暴露在公网。Redis、MySQL这些服务应该配置防火墙规则只允许应用服务器访问。最后定期安全扫描必不可少。我建议至少每季度做一次全面的渗透测试及时发现和修复漏洞。安全是个持续的过程不是一次配置就能解决的。