MeterSphere未授权RCE
2023-02-10 18:00:40
代码分析
版本<=1.16.3
查看修复日志
https://github.com/metersphere/metersphere/pull/9135/commits/9927d2c587a2b388ee5d633f6cc31346df4415de
将/plugin/** 这个路由的未授权删除了,全局搜/plugin定位到功能代码
跟进add方法中的pluginService.editPlugin(file) ,
跟进
在loadJar方法中使用URLClassLoader来加载jar包,将jar包的类加载进来;然后我们可以看到io.metersphere.controller.PluginController#customMethod中只有一行代码return pluginService.customMethod(request);
跟进去
会调用指定类的customMethod方法,我们可以写一个恶意类然后定义一个customMethod然后来调用他
漏洞利用
1 | import java.io.ByteArrayOutputStream; |
编译后打包为jar
新建文件上传表单
1 | <!DOCTYPE html> |
传上去后,调用customMethod方法,执行命令
记录
classloader 与 Class.forname的区别
https://blog.csdn.net/wt520it/article/details/83014038
该处也可以将恶意代码写入到static代码块中,但仍需要利用customMethod来触发代码块中代码。
通过class.forname触发