漏洞描述
蓝凌OA未授权导致RCE。
漏洞分析
首先根据POC中地址定位文件
定位JSP文件,根据URL以及路径+参数等综合定位,得到其对应的JSP文件
这里获取 s_bean 参数,然后循环,调用 getBean 从容器中获取该 bean 对象,这里POC中 s_bean 参数传入的是sysFormulaSimulateByJS ,说明获取一个 sysFormulaSimulateByJS 实例,全局搜索一下,查看spring的配置文件(通常是spring.xml)之类的中对 bean 的描述
获取到 bean 对应的完整类名,定位该类,注意:在许多OA等项目中,通常习惯把Java等代码文件打包为jar放在Lib目录,还有就是通常这类Java相关的文件存在在WEB-INF目录下,我们只需要使用IDEA打开WEB-INF目录,然后把lib目录(不一定叫lib,注意观察具体是哪一个目录存放的JAR文件)Add as Library
直接全局搜索 sysFormulaSimulateByJS 定位该类对应的定义
回到最开始的POC请求接口处,可以看到这里通过 getBean 获取到类实例对象后接着调用了 getDataList 方法,问题也就是在这个方法中。
来着对应的类定义中查看其方法实现,注意这里的 this.formulaSimula 方法调用。
注意如下代码,也就是上图中81-82行代码.
FormulaParser parse = FormulaParserByJS.getInstance(returnData, new SysFormulaSimulateByJS.SimulateVarGetter((SysFormulaSimulateByJS.SimulateVarGetter)null), (String)null);
result = parse.parseValueScript(script, type);
跟进 parseValueScript 方法分析
继续 parseValueScript 方法分析
恶意代码被拼接到了 m_script 变量中,我们再看看这个变量流入了哪些地方
注意这里,可以看到流入了 interpreter.eval 这个方法中,我们看看这个 interpreter.eval 方法
根据方法属实类的类名定位看了逻辑挺多,这个包不像是该 OA 自写的,所以百度该报发现原来这个包的 eval 方法可以实现Java代码动态执行,其实就是我们熟知的Beanshell
最终也是该处导致代码执行。
结语
其实还存在一处同类型漏洞接口,且整个漏洞产生于该文件的产生点一模一样。
原文始发于微信公众号(安全之道):蓝凌OA未授权分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论