泛微OA clusterUpgrade.jsp文件上传分析
2023-12-6 10:15:2 Author: mp.weixin.qq.com(查看原文) 阅读量:18 收藏

0x01 跳过分析uploadFileserver.jsp
其中/clusterupgrade/uploadFileserver.jsp接口,由于需要用户登录暂不分析

uploadFileserver.jsp要求user != null
0x02 分析uploadFileClient.jsp和token校验算法
其中/clusterupgrade/uploadFileClient.jsp接口,需求获取token的值并校验,然后就可以进行上传。

uploadFileClient.jsp仅要求获取可校验的token参数值

进一步分析token校验方法cluster.checkSecurity(),检查能否绕过检查:

对应类路径:weaver.upgradetool.upgrade.ClientOperation#checkSecurity(java.lang.String,javax.servlet.http.HttpServletRequest)

checkSecurity方法由CheckIp方法和checkSecurity方法组成

这里跳过checkIp分析。

直接跟进checkSecurity 方法:

checkSecurity方法类路径:weaver.upgradetool.upgrade.ClientOperation#checkSecurity(java.lang.String)

checkSecurity方法

在checkSecurity方法中,根据反射调用weaver .upgradetool.upgrade.CheckSecurity类的check方法。

直接跟进check方法:

weaver.upgradetool.upgrade.CheckSecurity#check

根据代码可以看出:

1、des算法的加密key为license2、token=des.encrypt("wEAver2018"+distributeinfo)

跟随getDistributeinfo函数,发现这里的distributeinfo大致就是时间戳信息:

如果获取到license和distributeinfo信息,这里就可以根据license加密("wEAver2018"+distributeinfo)生成一个合法的token,最终完成token的验证。
0x03 获取license和distributeinfo计算token值

但是这个license和distributeinfo信息怎么获取?

这里通过全局搜索getDistributeinfo找到/clusterupgrade/tokenCheck.jsp文件

在这个文件中存在distributeinfo和license的调用,可通过访问接口获取到license和distributeinfo的信息。

tokenCheck.jsp会返回distributeinfotoken信息

通过访问接口可获取到distributeinfo(timestamp值)和DES加密后的license(key值,DES密钥为ecology2018_upgrade)。

通过对返回key值进行DES解密得到license,再使用license作为密钥进行DES加密"wEAver2018"+timestamp值,就得到了token值。

好了,到这里token已经获取到了,这里只要默认密钥没有修改那么这里就存在漏洞。


0x04 放弃uploadFileClient.jsp上传

我们重新回到上传处理方法

weaver.upgradetool.upgrade.UploadHandle#upload

这里同样也对token做了校验,当通过token校验后,对上传的文件后缀校验是否为zip,然后写入到相应的文件夹并拼接文件名

在这里发现该接口只是传上zip并没有自动解压,看到这里放弃。

0x05 分析clusterUpgrade.jsp接口

开始分析下一个/clusterupgrade/clusterUpgrade.jsp接口

clusterUpgrade.jsp代码内容

这里读取了method的值并根据不同的值进行不同的操作,看到这执行顺序盲猜应该是这样:上传-->更新-->获取更新信息

跟进一下

weaver.upgradetool.upgrade.ClientOperation#uploadFileClient

这里和/clusterupgrade/uploadFileClient.jsp中是同一种方法不再分析,往下走进入更新:

weaver.upgradetool.upgrade.ClientOperation#upgrade-->weaver.upgradetool.upgrade.UpgradeThread#run-->weaver.upgradetool.upgrade.ClusterUpgrade#unZip-->weaver.upgradetool.upgrade.UpdateOperation#unzipUpdateweaver.upgradetool.upgrade.GCONSTUClient#getUploadSysFilePath4cluster

获取刚刚上传存储的zip路径WEB-INF/filesystem4cluster/upload

weaver.upgradetool.upgrade.GCONSTUClient#getTempSysFilePath

解压路径:filesystem4cluster/temp

进入更新流程

根据参数条件进入更新线程

获取更新包路径下的文件

解压更新包文件

解压更新包文件

解压更新包文件

上传压缩包的实际路径

解压压缩包的实际路径

0x06 利用逻辑总结
step 11、通过访问/clusterupgrade/tokenCheck.jsp获取DES加密的license和timestamp。(默认DES密钥为:ecology2018_upgrade)2、利用license作为DES密钥加密(”wEAver2018”+timestamp (类似2019-02-19 12:57:28.373)),生成token值。
step 2这里有多条上传路径,以下两个路径均可通过token上传zip文件。/clusterupgrade/clusterUpgrade.jsp/clusterupgrade/uploadFileClient.jsp上传需注意 /clusterupgrade/clusterUpgrade.jsp 需要指定method
step 3调用更新,使得压缩包解压

0x07 分析思路大致逻辑总结
上传方法/clusterupgrade/clusterUpgrade.jsp上传/clusterupgrade/uploadFileClient.jsp上传
token校验:验证客户端IP与token(这里是默认写入在weaver.upgradetool.upgrade.CheckSecurity#check ,默认token为:wEAver2018+当前时间戳)
weaver.upgradetool.upgrade.DesUtils为返回当前时间戳的方法,这里通过搜索关键字的方法定位到clusterupgrade/tokenCheck.jsp获取到固定的Liecense加密密钥为:ecology2018_upgrade
继续往下跟进为上传方法:weaver.upgradetool.upgrade.ClientOperation#uploadFileClient
上传zip路径:WEB-INF/filesystem4cluster/upload
下面为更新方法:weaver.upgradetool.upgrade.UpgradeThread#run()(weaver.upgradetool.upgrade.GCONSTUClient#getPackagePath)
获取更新zip位置(更新完会删除zip包):WEB-INF/filesystem4cluster/upload(weaver.upgradetool.upgrade.GCONSTUClient#getTempSysFilePath)
解压路径:WEB-INF/filesystem4cluster/temp
0x99 免责声明

在学习本文技术或工具使用前,请您务必审慎阅读、充分理解各条款内容。

1、本团队分享的任何类型技术、工具文章等文章仅面向合法授权的企业安全建设行为与个人学习行为,严禁任何组织或个人使用本团队技术或工具进行非法活动。

2、在使用本文相关工具及技术进行测试时,您应确保该行为符合当地的法律法规,并且已经取得了足够的授权。如您仅需要测试技术或工具的可行性,建议请自行搭建靶机环境,请勿对非授权目标进行扫描。

3、如您在使用本工具的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。

4、本团队目前未发起任何对外公开培训项目和其他对外收费项目,严禁任何组织或个人使用本团队名义进行非法盈利。

5、本团队所有分享工具及技术文章,严禁不经过授权的公开分享。

如果发现上述禁止行为,我们将保留追究您法律责任的权利,并由您自身承担由禁止行为造成的任何后果。

END

如您有任何投稿、问题、建议、需求、合作、后台留言NOVASEC公众号!

或添加NOVASEC-余生 以便于及时回复。

感谢大哥们的对NOVASEC的支持点赞和关注

加入我们与萌新一起成长吧!

本团队任何技术及文件仅用于学习分享,请勿用于任何违法活动,感谢大家的支持!


文章来源: https://mp.weixin.qq.com/s?__biz=MzUzODU3ODA0MA==&mid=2247489236&idx=1&sn=8797f396b4fed1eb06e00bd03fb6dc0c&chksm=fad4cbc3cda342d5497865149123615af39a0183f21bbcaccdaa776d6b08e72c2cb39c99167e&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh