metersphere 远程代码执行分析

diff 补丁发现对 plugin 做了授权

image-20220107221655623.png

方法很少,那多半都会在上传文件这

image-20220107221550328.png

source 点在我们上传的一个 jar 文件,结构如下,init 方法写有我们的恶意代码

image-20220107223825094.png

跟进 editPlugin,利用 fileUtil 对我们的文件进行写入服务器

image-20220107221821813.png

跟进 getmethod,这里的 path 不可控,filename 是我们传入的文件名

先是 loadjar 热加载进入 classpath,注意这里我们便可以往 classpath 中添加任何的类与配置文件

image-20220107222355601.png

image-20220107222103713.png

跟进 getSubClass 发现会根据我们传入的文件名 load 一个配置文件,那么我们传入 test.properties.jar,会解析 test.properties 配置文件,而我们上传的 jar 会进行热加载,所以这里我们将 jar 中添加一个 test.properties 便可以控制 inPro

image-20220107222205576.png

后面根据 inPro 的键值获取相关 Class 类,这个类名我们可控,类文件也可控,只要后面实例化我们便可以执行任意代码

image-20220107222746775.png

遍历类,进行实例化,并调用了 init 方法,完成 rce

image-20220107223248074.png

而 customMethod 接口同样会调用 customMethod 方法,恶意代码也可写到此方法中

image-20220107223357573.png

整个利用比较简单,官方也只是将相关接口加入了权限验证,估计认为这只是一个正常功能