前言
前段时间,官方发布了10.58.3补丁,其中修复了一处前台任意文件上传漏洞,实际利用条件比较苛刻,在此分享一下分析过程
利用条件
1.目标开启集群模式。
漏洞分析
第一部分
通过diff10.58.3和10.58.2的补丁可以发现,在新版本中的补丁禁用了几个集群相关的uri
通过分析,涉及文件上上传的有clusterUpgrade.jsp、uploadFileClient.jsp、uploadFileServer.jsp,其中uploadFileServer.jsp需要验证用户信息,剩余两个文件的上传操作一致,我们选取一个进行分析。
首先会对传入的token做安全认证,我们跟进看一下
跟进后发现会对IP和token进行校验,我们分别跟进看一下能否进行绕过。我们首先看一下IP:
首先会判断当前应用程序的类别,此处默认返回ecology。然后会从请求中获取IP地址跟weaver.properties文件中的MainControlIP进行匹配。MainControlIP为集群模式中的主节点IP,默认安装不会配置这个参数,这就是这个漏洞比较鸡肋的一个地方。
我们继续跟进getIp方法中可以发现,它使用的是getRemoteAddr方法来获取IP地址,此处的getRemoteAddr被进行了重写,会从header的X-Forwarded-For来获取IP地址,由此我们可以绕过IP地址的检测。
绕过对IP的检查之后,我们回到上面看一下checkSecurity对token的检查规则。
跟进
发现会从数据库查询license的值来做加密的Key,无法伪造。后续通过翻看其他文件,发现在tokenCheck.jsp中泄漏了license
在代码中,他对获取到的license进行DES加密,key使用的是硬编码的值ecology2018_upgrade,我们可以通过这个接口来获取到加密后的key,然后再解密来获取license。除此之外getDistributeinfo的值也能通过这个接口来获取
第二部分
安全检查部分绕过之后,我们继续看上传的相关内容。
在upload方法内,会在进行一次安全检查。
之后就会进行文件操作,限定了必须位zip文件。上传路径位C:WEAVERecologyWEB-INFversionupgradeupload。
根据提示我们其实可以看出来,这个功能应该是用来上传补丁包的。正常的业务逻辑肯定是会涉及到解压缩的,且在补丁包中一般都会存在jsp文件,解压缩也不会限制jsp后缀,我们只需要对应的功能点就能完成漏洞的利用。
通过寻找发现在clusterUpgrade.jsp文件中进行upgrade是会对C:WEAVERecologyWEB-INFversionupgradeupload目录下的压缩包进行解压缩,默认解压路径位C:WEAVERecologyversionupgradetemp。常规业务代码,此处不做分析,感兴趣的可以自己跟一下。
漏洞复现
1.获取到token之后, 我们上传恶意的zip文件,其中存在我们想要上传的jsp文件
2.触发解压缩操作
3.文件上传成功
漏洞检测
检测思路:目前没能找到很好的检测目标是否配置MainControlIP的接口,通过检测其中的一处上传接口来进行判断。这种方法只能判断目标没有更新到最新补丁,或者没有禁用相关接口,还需要手动判断是否配置集群模式
nuclei批量检测:
./nuclei -u https://metabase.xxx.com/ -t ./ultimaste-nuclei-templates/ecology-oa/ecology-oa-clusterupgrade-upload.yaml
原文始发于微信公众号(极致攻防实验室):某微OA前台任意文件上传漏洞分析-附检测POC
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论