师傅们,最近较忙,没啥时间写文章,但是遇到有好文章直接转,深怕你们错过了,喜欢这篇文章的给该安全绘景公众号点点关注!
老样子,师傅们如果有用到该平台的漏洞,要记得及时找厂商进行修复以及做好防护策略,这样子就可以预防一下啦。
简介
致远OA存在前台密码重置漏洞,可以重置系统中默认账户,使用重置后的密码通过接口获取cookie后可getshell,此组合拳可以实现致远的前台RCE。
漏洞复现
-
重置系统中默认的管理员密码
未重置前通过密码获取cookie失败
![致远OA最新0day_前台安全绕过+RCE 致远OA最新0day_前台安全绕过+RCE]()
重置审计管理员密码
-
-
-
分析
密码重置这个漏洞在去年用了挺多次的,后来打了补丁后能打的不多了,本来打算开工后就写文章,一直忙于项目。正好最近看到有师傅分析了整个过程,公众号上也有一些风声,索性蹭一波师傅的文章进行学习和补充。
阅读下文前强烈推荐看这一篇文章,本文基于这篇文章(https://xz.aliyun.com/t/13741)进行补充。
前面分析基本上都和上面文章中一致则不再赘诉,在文章最后说到,需要使用普通用户权限修改管理员密码,从而实现RCE或留后门。如果只是这样,那这个漏洞其实也就是越权,实用性不太强;因为致远后台本身就存在低权限getshell的漏洞,所以有了用户就不需要进行此操作。
这个漏洞如果是前台的话,则实用性就非常强,不再需要爆破弱口令等方式来进入后台。通过此漏洞直接前台重置默认管理员密码后使用接口来获取cookie,从而后台getshell;通过这种组合拳,基本上可以实现致远前台RCE。感谢参考文章师傅的分析和分享,下面我的水文开始。
查阅致远开发文档后可知,如果声明了@NeedlessCheckLogin注解,则不需要登录即可访问。当Controller上声明此注解时,所有aciton都不需要登录;如果在某个Controller中action上声明此注解,则表示当前action不需要登录。
经过一番简单寻找,发现GenericController和ShareController在action中声明了此注解(可能还有其他Controller,当时找到这两个后就没有继续寻找)。所以调用这两个Controller的action时,不需要登录即可访问。
其实这两个Controller能够达到的效果完全一致,下面用genericController.do再进行简单复现。
核心思想是通过xxx.do的后缀让致远使用SpringController的方式进行验证,而不是使用rest方式;但我们的请求格式又满足重置密码的rest接口,所以最终会调用rest接口来重置密码;而密码是share.do/genericController.do,这两个接口正好满足SpringController调用且声明了不需要鉴权的注解,从而完成前台密码重置。
通过ZipSlip漏洞,将webshell解压到根目录下从而getshell。
-
-
通过构造特殊的zip文件,从而使得webshell解压到根目录下。
-
首先判断了必须为MultipartHttpServletRequest
,否则抛出异常,简单来说就是上传请求。
接着判断了MaxUploadSizeExceeded和unknownException参数,不为空则抛出异常。
然后获取上传信息,并创建临时zip文件来保存信息。
接下来创建一个临时目录,判断是否有文件,有就清空。
最后创建zip文件,遍历zip中的文件并取出后进行拼接。未对zip文件进行过滤,导致可以通过../
跨越目录,从而写入到web目录中获取服务器权限。
https://xz.aliyun.com/t/13741
http://open.seeyon.com/seeyon/webhelp/APIdoc/content/api/cn/oa.json11.24
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
点赞
https://cn-sec.com/archives/2555006.html
复制链接
复制链接
-
左青龙
- 微信扫一扫
-
-
右白虎
- 微信扫一扫
-
评论