1. 项目概述一次源于实战的SRC漏洞复盘前段时间我在一个企业SRC安全应急响应中心的众测项目中遇到了一个基于若依RuoYi框架开发的后台管理系统。这其实是一个非常典型的场景很多中小型企业在快速构建内部管理平台时往往会选择像若依这样功能齐全、文档完善的开源框架。我的目标很明确在授权范围内尽可能深入地挖掘这个系统的安全漏洞。最终这次测试不仅成功提交了多个中高危漏洞更重要的是让我对若依框架的通用安全特性和常见薄弱点有了系统性的认识。今天我就把这次完整的渗透测试思路、踩过的坑以及最终的成果进行一次彻底的复盘。无论你是刚入门SRC挖掘的新手还是想系统了解一个流行框架安全测试方法的老手相信这篇从实战出发的总结都能给你带来直接的参考价值。若依框架作为一个集成了权限管理、代码生成、监控日志等众多功能的“全家桶”其本身的设计是为了提升开发效率。但正因其“大而全”默认配置、历史版本遗留问题以及开发者不当的二开都可能引入安全隐患。本次测试的目标系统就是一个典型的若依前后端分离版本Vue Spring Boot。我的核心思路是以框架特性为地图以通用漏洞为探针结合业务逻辑进行深度穿测。接下来我将分步拆解整个过程中的关键环节。2. 前期信息搜集与框架指纹识别渗透测试的第一步永远是信息搜集对于已知框架的系统这一步的效率直接决定了后续的突破口选择。盲目测试就像无头苍蝇而有针对性的信息搜集则能让你像拥有了一张建筑蓝图。2.1 基础资产与版本锁定首先我使用了一些常见的资产发现工具和浏览器插件对目标域名和IP段进行扫描。除了收集子域名、开放端口如 80, 443, 8080, 8443外我特别关注了以下几个若依特有的痕迹默认路径与静态资源访问根目录下的/ruoyi、/admin、/login等路径。尝试访问/favicon.ico、/static/img/logo.png等静态资源通过比对哈希值或特征可以快速确认是否为若依。若依的登录页面和后台UI风格也比较有辨识度。API接口特征通过浏览器开发者工具F12抓取网络请求观察API路径。若依后端默认的API前缀通常是/prod-api/、/dev-api/或直接是/api/。典型的接口如/login、/captchaImage获取验证码、/getInfo获取用户信息等。源码泄露与版本信息尝试访问/.git/、/.svn/、/WEB-INF/等目录看是否存在源码泄露。更常见的是在登录页面的HTML源码注释、JS文件注释或HTTP响应头如X-Powered-By: RuoYi中可能会直接找到框架版本号。例如注释中可能出现RuoYi-Vue v3.8.5之类的信息。实操心得在这个案例中我在一个未授权访问的/monitor/cache端点这本身就是一个隐患后面会讲的JSON响应里发现了version: “3.8.3”字段。精确的版本号是后续漏洞利用的黄金钥匙因为它能让你直接关联到该版本已知的公开漏洞或安全公告。2.2 架构分析与入口点梳理确认是若依框架后我立即开始分析其架构以确定测试重点前后端分离前端是Vue打包后作为静态文件部署后端是Spring Boot提供RESTful API。这意味着测试的核心在后端接口上。默认功能模块脑海中快速过一遍若依的默认模块系统管理用户、角色、菜单、部门、监控中心缓存、定时任务、数据监控、系统工具代码生成、表单构建。这些模块的接口将是重点测试对象。二开功能识别通过爬取JS文件中的路由或API文档如果存在/swagger-ui.html、/doc.html等寻找非若依标准的菜单和接口。这些二开代码往往是安全最薄弱的地方因为开发者的安全意识可能参差不齐。我整理了一份初始的测试清单主要包括默认弱口令、未授权访问、SQL注入、越权操作水平/垂直、文件上传、反序列化等。接下来的所有步骤都将围绕这份清单结合若依的特性展开。3. 漏洞挖掘思路与实战过程拆解有了清晰的目标和地图就可以开始正式的“勘探”了。我的测试流程遵循“由浅入深、由通用到定制”的原则。3.1 第一阶段通用漏洞快速筛查这一阶段的目标是寻找“低垂的果实”利用框架的通用问题快速取得突破。1. 默认凭证与弱口令测试虽然老套但永远有效。我尝试了若依文档中提到的默认账号密码组合如admin/admin123。同时针对目标企业我结合搜集到的信息如邮箱后缀、公司简称生成了定制化的弱口令字典对登录接口/login进行爆破。这里需要注意验证码若依默认登录带有验证码但验证码有时可能存在逻辑问题如可重复使用、前端校验等。2. 未授权访问漏洞挖掘这是我在若依框架中最常发现的漏洞类型。因为框架提供了大量监控和管理端点而开发者在生产环境有时会忘记禁用或加固它们。我系统性地访问了以下常见路径Actuator端点Spring Boot Actuator 的端点如/actuator、/actuator/health、/actuator/env、/actuator/heapdump。若/actuator/env暴露可能直接泄露数据库密码、API密钥等敏感配置。Druid监控台若依默认集成阿里Druid数据库连接池其监控台路径通常是/druid或/prod-api/druid。如果未设密码或使用弱口令可以直接查看所有SQL执行语句甚至执行SQL危害极大。Swagger/knife4j接口文档/swagger-ui.html、/doc.html。直接暴露所有API接口及其参数为后续测试提供了完美手册。若依自带监控如/monitor/cache缓存监控、/monitor/data数据监控等。踩坑记录在这次测试中我直接访问/actuator返回了404但尝试/actuator/env时却返回了完整的配置信息这是因为开发者可能错误地只禁用了根路径但没禁用于端点。永远不要只测试一个路径就下结论要遍历常见的端点列表。3. 验证码逻辑绕过针对登录接口的验证码我测试了以下几种情况将登录请求包中的uuid验证码标识和code验证码值参数置空或删除看服务端是否校验。使用同一个uuid和第一次获取到的正确code重复发起登录请求。验证码是否在前端生成或校验查看JS代码。 实测中我发现目标系统的验证码仅在首次登录时校验第二次及之后的请求若携带相同的会话Cookie即使验证码错误也能登录成功。这是一个典型的状态管理逻辑缺陷。3.2 第二阶段深入业务逻辑与接口测试在通过未授权访问Druid控制台弱口令admin/123456进入系统后我获得了更广阔的测试视野。此时测试重点转向业务逻辑漏洞和接口安全。1. 越权漏洞水平/垂直这是后台系统的高发区。我以普通用户权限通过创建一个测试账号登录后进行以下测试水平越权修改请求参数中的用户ID如userId2尝试查看、修改或删除其他用户的数据。例如在“个人中心”修改资料时抓包查看是否有传递用户主键尝试修改为他人ID。垂直越权普通用户尝试访问仅管理员可见的菜单或接口。通过抓取前端路由或分析菜单接口/getRouters的返回找出隐藏的管理功能API路径直接构造请求访问。一个关键发现在测试“用户管理”的编辑功能时我发现后端接口/system/user/update在更新用户信息时会接收一个roleIds参数来分配角色。虽然前端下拉框只允许普通用户选择普通角色但我通过Burp Suite拦截修改请求将roleIds改为管理员的角色ID然后提交。后端竟然没有二次校验当前操作者是否有权限分配该角色导致我成功将一个普通用户的权限提升为了管理员。这是一个典型的功能级权限绕过漏洞。2. SQL注入与参数污染尽管现代框架大多使用ORM如MyBatis但SQL注入风险并未绝迹。我重点关注模糊查询接口很多列表查询页面支持按名称搜索参数如userName。尝试输入、%、_等特殊字符观察报错或结果异常。排序字段参数如orderByColumn和isAsc这些参数有时会直接拼接进SQL的ORDER BY子句可能存在注入或导致错误。MyBatis的$与#误用若开发者不小心在MyBatis的XML映射文件中对用户输入使用了${}直接拼接而非#{}预编译就会导致注入。通过Druid监控台观察SQL日志可以清晰看到传入的参数是如何被处理的。在我的测试中一个公告查询接口的createBy参数存在基于时间的盲注。通过构造createBytest AND SLEEP(5)--的payload证实了注入点的存在。3. 文件上传与目录遍历若依的系统工具模块可能有文件上传功能如头像上传、富文本编辑器。我测试了上传合法文件如图片后分析返回路径和存储规则。尝试上传Webshell如.jsp、.jspx文件并配合解析漏洞如利用某些中间件对xxx.jpg/.jsp的解析特性。在上传路径或文件名参数中尝试目录遍历如../../../WEB-INF/web.xml。虽然目标系统对文件后缀做了白名单校验但我发现其头像上传接口在读取远程图片URL保存到本地时未对URL指向的文件内容做校验。我可以控制一个外部服务器使其返回一个包含JSP代码的“图片”系统下载后以.jpg保存但若中间件配置不当仍可能被解析。这属于间接文件上传风险。3.3 第三阶段框架组件与依赖链安全在完成主要业务测试后我将目光投向框架底层组件和第三方依赖。1. Fastjson反序列化若依历史版本中曾使用Fastjson处理JSON。我检查了HTTP请求的Content-Type和JSON解析行为。虽然目标系统使用的是Jackson但在某些二开的、接收复杂JSON对象的接口中如果类路径下存在危险的反序列化Gadget链依然存在风险。这不是本次重点但属于深度测试的一部分。2. 第三方库漏洞使用工具如dependency-check或手动检查pom.xml文件如果通过/actuator/env或源码泄露获取到分析Spring Boot、MyBatis、Druid、Log4j2等核心依赖的版本看是否存在已知的公开漏洞如Log4Shell、Spring4Shell等。本次目标系统的Spring Boot版本较新避开了几个重大漏洞。3. 配置不当CORS配置过于宽松检查Access-Control-Allow-Origin头是否为*这可能导致敏感信息被恶意网站跨域读取。敏感信息泄露检查/actuator/env、/actuator/configprops是否泄露数据库密码、OSS密钥、短信API密钥等。调试模式开启检查是否存在spring.boot.devtools.restart.enabledtrue或类似配置这可能为攻击者提供便利。4. 漏洞利用链构建与权限提升单一的漏洞可能危害有限但将多个漏洞串联起来就能形成强大的攻击链实现从外网到内网、从普通用户到超级管理员的跨越。在这次测试中我构建了这样一条利用链起点发现未授权访问/actuator/env泄露了数据库连接字符串含密码和Redis密码。数据库突破使用泄露的数据库密码直接连接MySQL数据库。在数据库中我找到了用户表sys_user和菜单权限表sys_menu。我不仅可以直接修改管理员密码通过修改password字段需注意若依的密码是MD5加密的更重要的是我通过分析sys_role_menu表理解了其权限控制的模型。权限固化为了获得一个更隐蔽、持久的后门账户我没有直接修改admin密码容易被发现而是选择在sys_user表中插入一条新的用户记录使用已知的MD5密码哈希。在sys_user_role表中为该用户分配最高权限的角色ID。由于若依的权限校验通常基于角色和菜单关联这样我就创建了一个拥有全部菜单访问权限的“影子管理员”。横向移动模拟如果系统部署在内网并且数据库或Redis中存有其他内网系统的凭证那么攻击者就可以以此为跳板进行内网横向渗透。例如从数据库配置表中发现一个内部运维系统的账号密码。核心技巧在SRC漏洞挖掘中发现一个漏洞点后一定要思考“这个点能拿到什么信息”、“这些信息能否助我找到下一个攻击面”。从信息泄露到权限提升再到横向移动这是一个连贯的思维过程。在报告中清晰地描述这条利用链能极大地提升漏洞的定级和严重性评价。5. 经验总结与防御建议复盘整个挖掘过程成功的核心在于对若依框架的熟悉和系统性的测试方法。对于防御方开发者或企业安全人员我结合自身经验给出以下切实可行的建议5.1 给开发者的安全开发清单彻底修改默认配置部署前第一件事就是修改所有默认密码数据库、Druid、Redis、密钥加密密钥、JWT Secret和默认访问路径。严格管控管理端点生产环境必须禁用或严格鉴权Spring Boot Actuator、Druid监控台、Swagger等接口。可以通过Spring Security配置只允许本地或特定IP访问。# application-prod.yml 示例 management: endpoints: web: exposure: include: health, info # 只暴露必要的端点 base-path: /manage # 修改默认路径 endpoint: health: show-details: never security: enabled: true # 开启Actuator安全贯彻最小权限原则在后端每个接口、每个Service方法上都要进行细致的权限校验。不要依赖前端菜单隐藏。使用注解如PreAuthorize(“hasPermission(‘system:user:edit’)”)进行方法级控制。安全的验证码实现验证码一次性使用后立即在服务端作废从Redis或Session中删除。验证码生成和校验逻辑完全放在服务端。输入校验与输出编码对所有用户输入进行白名单校验使用预编译#{}防止SQL注入对输出到HTML的数据进行编码防止XSS。文件上传安全使用白名单校验文件后缀和MIME类型将文件存储在Web根目录之外使用随机文件名防止覆盖对图片文件进行二次渲染处理。定期更新与依赖检查定期升级若依框架版本、Spring Boot及所有第三方依赖使用Mavendependency-check插件扫描已知漏洞。5.2 给渗透测试者的进阶思路关注二开代码框架本身的漏洞会随着版本更新被修复但企业二开引入的逻辑漏洞是“常青树”。重点测试那些自定义的、复杂的业务流程接口。深度理解权限模型仔细研究若依的sys_user、sys_role、sys_menu、sys_role_menu这几张核心表的关系。尝试通过越权修改这些关联数据是提权的有效手段。善用监控与日志如果获取到Druid或Actuator的访问权限不要只看表面要仔细分析SQL日志、请求跟踪从中发现潜在的注入点、敏感操作和内部API。组合漏洞报告在提交SRC报告时将关联的漏洞组合成一个“漏洞链”进行报告并详细说明其危害演进路径这比提交几个孤立的漏洞更能体现价值。渗透测试是一场攻防双方在认知层面的较量。对于若依这类流行框架攻击者熟知其每一处默认的“后门”而防御者的职责就是在使用它时亲手将这些门一一锁死。这次实战复盘的核心就是将攻击者的视角和思路透明化从而转化为更有效的防御策略。真正的安全始于对风险清醒而全面的认知。