前段时间,官方发布了10.58.3补丁,其中修复了一处前台任意文件上传漏洞,实际利用条件比较苛刻,在此分享一下分析过程
通过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:\WEAVER\ecology\WEB-INF\versionupgrade\upload
。
根据提示我们其实可以看出来,这个功能应该是用来上传补丁包的。正常的业务逻辑肯定是会涉及到解压缩的,且在补丁包中一般都会存在jsp文件,解压缩也不会限制jsp后缀,我们只需要对应的功能点就能完成漏洞的利用。
通过寻找发现在clusterUpgrade.jsp
文件中进行upgrade
是会对C:\WEAVER\ecology\WEB-INF\versionupgrade\upload
目录下的压缩包进行解压缩,默认解压路径位C:\WEAVER\ecology\versionupgrade\temp
。常规业务代码,此处不做分析,感兴趣的可以自己跟一下。
获取到token之后, 我们上传恶意的zip文件,其中存在我们想要上传的jsp文件
触发解压缩操作
文件上传成功
检测思路:目前没能找到很好的检测目标是否配置MainControlIP
的接口,通过检测其中的一处上传接口来进行判断。这种方法只能判断目标没有更新到最新补丁,或者没有禁用相关接口,还需要手动判断是否配置集群模式