MeterSphere PluginController Pre-auth RCE

搭建环境

wget https://github.com/metersphere/metersphere/releases/download/v1.16.3/metersphere-online-installer-v1.16.3.tar.gz
tar zxvf metersphere-online-installer-v1.16.3.tar.gz
cd metersphere-online-installer-v1.16.3/
MSVERSION="v1.16.3"
echo $MSVERSION
sed -i -e "s#MS_IMAGE_TAG=.*#MS_IMAGE_TAG=${MSVERSION}#g" install.conf
sed -i -e "s#MS_IMAGE_PREFIX=.*#MS_IMAGE_PREFIX=registry.cn-qingdao.aliyuncs.com/metersphere#g" install.conf
/bin/bash install.sh

搭建完运行在http://172.16.16.129:8081/ docker中 msctl status可以看到状态。

分析漏洞

根据diff https://github.com/metersphere/metersphere/compare/v1.16.3...v1.16.4

20220107103025-c553b7e8-6f61-1

删除了/plugin/**路由的anon权限,也就是说原来访问/plugin/是不需要授权的。

找到路由对应的controller io.metersphere.controller.PluginController

20220107103037-cc4638d2-6f61-1

主要关注两个函数 add 和 customMethod

add函数中上传文件跟进到io.metersphere.service.PluginService#editPlugin

20220107103045-d11cb8cc-6f61-1

io.metersphere.commons.utils.FileUtils#create将上传的文件拼接写入到 /opt/metersphere/data/body/plugin 目录下

20220107103053-d6230678-6f61-1

文件名形如/opt/metersphere/data/body/plugin/490fb08a-eae3-4414-a991-09f16f5b8f5e_test.jar

写入之后进入io.metersphere.service.PluginService#getMethod

20220107103159-fd48abc2-6f61-1

继续跟进this.loadJar()

20220107103206-01c395ae-6f62-1

这里将上传的文件通过URLClassLoader加载进来,那么我们可以通过上传jar包,向内存中注册任意类。

接下来再看io.metersphere.controller.PluginController#customMethod

跟进到io.metersphere.service.PluginService#customMethod

20220107103214-064b1548-6f62-1

Class.forName参数可控,我们可以在上文的jar包中写一个customMethod函数,这样就可以执行任意java代码了。

整个流程就是写一个Evil类,类中定义一个customMethod函数,打成jar包上传来向内存中注册class,然后通过customMethod路由调用jar包中的Evil类customMethod函数。

复现截图

20220107103221-0a8cdd08-6f62-1

本文转载自https://xz.aliyun.com/t/10755,只做本站测试使用,本文观点不代表安强科技社区立场。

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年3月15日 下午4:43
下一篇 2022年3月15日 下午5:02

相关推荐

发表回复

您的电子邮箱地址不会被公开。