蓝凌EKP 远程代码执行漏洞分析
type
status
date
slug
summary
tags
category
icon
password
AI summary
文章首发自先知社区
漏洞描述
某凌 EKP 由深圳市某凌软件股份有限公司开发,是一款面向中小企业的移动化智能办公产品。
该系统存在远程命令执行漏洞,攻击者能够借助
sysUiComponent
接口的 replaceExtend
方法,把 dataxml.jsp
后台命令执行漏洞转化为前台命令执行漏洞。影响版本
漏洞分析
前置漏洞
该漏洞属于后台 dataxml.jsp 远程命令执行的前台绕过版本,接下来先介绍一下此后台漏洞的原理。

在此处执行了
treeBean
的 getDataList
方法,并传入了请求的参数。而 SysFormulaSimulateByJS
类继承了 IXMLDataBean
,其 getDataList 方法如下:
通过
FormulaParser#parseValueScript()
执行了传入的 script 脚本,尽管禁用了 unicode 以及一些黑名单,但未禁用 Runtime.exec
和 ProcessBuilder
,所以仍然能够执行命令。
这种利用 bsh 的打法还有许多接口可用,在此不逐一举例,更多详情见:LandrayEkpAudit
漏洞绕过
这个洞后来加了权限校验(WEB-INF/KmssConfig/sys/authentication/spring.xml),匿名用户仅允许访问以下接口:
还有一种打法是通过custom.jsp去SSRF打dataxml.jsp。不过这里也已经无法利用了。
在该系统V16版本中,引入了
SysUiComponent
,并且在design.xml
(WEB-INF/KmssConfig/sys/ui/design.xml)和spring.xml
中忘记添加鉴权,导致可调用SysUiComponentAction#getThemeInfo
进行文件上传。这次漏洞的绕过方式是通过
SysUiComponentAction#replaceExtend()
将dataxml.jsp
所在目录的文件复制到可访问的目录。借助这个漏洞,我们能够将其移动至无需鉴权的位置,也就是配置中的静态资源或者匿名路径所在之处。

继续跟进,调用的是
SysUiComponentService#replaceExtend()

这里获取两个参数的值,删除extendId目录,然后将folderName目录的文件复制过来。

继续跟进copyDirectory得到:
继续跟进
最后通过
Files.copy
将一个目录及其内容递归地复制到另一个目录。路由分析
通过分析配置文件
/WEB-INF/KmssConfig/sys/ui/spring-mvc.xml
,我们可以得出以下结论:访问方式
- URL:
/sys/ui/sys_ui_component/sysUiComponent.do
- 类:
com.landray.kmss.sys.ui.actions.SysUiComponentAction
调用特定方法
要调用
SysUiComponentAction
类中的 replaceExtend()
方法,需要在URL中添加 method
参数接下来如何构造PoC就很清晰了,只需要将
dataxml.jsp
所在的目录/sys/common
通过目录穿越复制到匿名用户可访问的Web目录即可。执行命令
Loading...