演练学习笔记之ruoyi
内容提要
本文介绍了搭建靶场来复现和修复ruoyi漏洞的方法,包括靶场搭建、漏洞利用和修复方式。漏洞包括shiro漏洞、弱口令、命令执行、代码执行、SSTI、文件下载、SQL注入、文件读取漏洞及bypass。修复方式包括升级版本、修改密钥、添加文件下载验证、升级thymeleaf组件版本等。
延伸解读
靶场搭建的版本选择与编码细节
文章选择RuoYi 4.5版本搭建靶场,是因为存在漏洞的版本有限制。搭建时需修改数据库连接配置并用Maven打包,生成的jar包位于ruoyi-admin/target下。数据库需创建ry库并导入sql文件夹中的两个.sql文件。Windows环境下导入命令需加--default-character-set=utf8以避免编码问题,这是实际搭建中容易忽略的细节。
漏洞复现覆盖前后台多个攻击面
文章复现的漏洞涵盖前台shiro反序列化、后台默认口令、文件读取、SQL注入、后台命令执行、SSTI等。其中shiro在1.4.2版本后加密模式由AES-CBC改为AES-GCM,利用工具需注意版本差异。文件读取通过/common/download/resource接口的路径穿越实现,SQL注入则出现在角色列表接口的参数拼接处。这些复现点反映了RuoYi历史版本中前后台均存在风险。
修复需区分版本与组件层面
针对不同漏洞,文章给出的修复方式包括:升级RuoYi到最新版本、用正确方式生成并替换shiro默认密钥、通过后台修改密码功能修复默认口令、为文件下载添加验证、增加命令调用白名单、升级thymeleaf组件版本并限制相关接口访问。其中shiro密钥必须按原密钥旁注明的方式生成新密钥替换才能生效,单纯修改可能无效。
bypass与内存马提示黑名单的局限性
在4.6.2至4.7.2版本中,黑名单禁止调用ldap、http、https、rmi等协议,但文章演示了通过添加引号或符号方式绕过,例如将http拆分为h't't'p'。此外还可利用yaml-payload-for-ruoyi打包内存马。这说明仅靠协议黑名单难以完全阻断命令执行,修复应结合调用白名单和版本升级。
Q&A
如何搭建RuoYi 4.5的漏洞靶场环境?
从GitHub下载RuoYi 4.5版本,修改数据库连接配置后用Maven打包,得到ruoyi-admin/target下的jar包。创建数据库ry,导入sql文件夹中的quartz.sql和ry_20201017.sql(Windows下导入命令需加--default-character-set=utf8避免编码问题),最后将jar包放入靶机运行。
RuoYi前台shiro反序列化漏洞如何修复?
修复方法是使用正确的密钥生成方式生成新密钥,替换默认密钥。注意Shiro 1.4.2版本后加密模式由AES-CBC改为AES-GCM。
RuoYi后台默认口令漏洞怎么利用和修复?
利用:使用默认密码admin/admin123或ry/admin123登录后台。修复:登录后通过后台头像处的修改密码功能更改密码。
RuoYi文件读取漏洞的利用方式和修复建议是什么?
利用:在D:/ruoyi/创建1.txt,然后GET请求/common/download/resource?resource=/profile/../1.txt,即可读取文件(uploadPath目录可以不存在)。修复:升级RuoYi到最新版本,并添加文件下载验证。
RuoYi后台SQL注入漏洞如何复现和修复?
复现:登录后台,拦截角色管理页面的请求包,在params[dataScope]参数中注入SQL语句,如and extractvalue(1,concat(0x7e,(select database()),0x7e))。修复:升级若依到最新版本,注意类似"${"这种字符串的拼接。
RuoYi后台命令执行漏洞如何利用?修复建议是什么?
利用:RuoYi<4.6.2版本中,在计划任务处添加任务,使用org.yaml.snakeyaml.Yaml.load加载远程jar包(需自行打包yaml-payload.jar并放在HTTP服务器上)。修复:增加调用白名单,升级到最新版若依。
RuoYi SSTI漏洞如何复现和修复?
复现:登录后访问/demo/form/localrefresh页面,点击刷新抓包,修改fragment参数为payload,如${T(java.lang.Runtime).getRuntime().exec("calc")}。修复:升级thymeleaf组件版本,限制相关接口的访问。