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

绕过方式:
1.unicode编码

2.字符串拼接
bsh.script=eval%00("ex"%2b"ec(bsh.httpServletRequest.getParameter(\"command\"))");&bsh.servlet.captureOutErr=true&bsh.servlet.output=raw&command=whoami

漏洞分析
漏洞出现在e-cology的组件beanshell上,由于beanshell这个接口可被未授权访问,同时这个接口在接受用户请求时未进行相应过滤,最终导致远程命令执行
那beanshell是什么呢?
简单说,就是一个微型的java解释器,可嵌入到其他程序中,用于动态的执行java代码,类似于csharp中的动态编译特性,我们通过一个例子来了解beanshell,如下图:
- 实例化Interpreter类
- eval()函数用于动态的执行java代码

除了eval函数,还有其他函数可以动态执行字符串

使用jadx反编译jar包,由于访问的组件路径为/weaver/bsh.servlet.BshServlet/,所以我们先查看一下类bsh.servlet.BshServlet,如下图

网站是post提交数据,所以我们查看doPost函数,发现只是执行了doGet函数:

跟踪doGet:
httpServletRequest.getParameter("bsh.script");参数为传入的值,赋值给了parameter

跟踪parameter,传入了evalScript函数:

跟踪evalScript函数:

直接调用interpreter.eval进行了代码执行

interpreter是Interpreter实例化的类

文中用到的工具
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
欢迎关注我的公众号啦!
