在野0day | 致远OA组合拳至前台RCE

admin 2024年3月7日11:58:38评论76 views字数 1792阅读5分58秒阅读模式

简介

致远OA存在前台密码重置漏洞,可以重置系统中默认账户,使用重置后的密码通过接口获取cookie后可getshell,此组合拳可以实现致远的前台RCE

漏洞复现

  1. 重置系统中默认的管理员密码

未重置前通过密码获取cookie失败

在野0day | 致远OA组合拳至前台RCE

重置审计管理员密码

在野0day | 致远OA组合拳至前台RCE

  1. 使用重置后的密码通过接口获取cookie

在野0day | 致远OA组合拳至前台RCE

  1. 获取当前用户信息,确认cookie有效性

在野0day | 致远OA组合拳至前台RCE

  1. getshell

详情见后续分析。

分析

密码重置这个漏洞在去年用了挺多次的,后来打了补丁后能打的不多了,本来打算开工后就写文章,一直忙于项目。正好最近看到有师傅分析了整个过程,公众号上也有一些风声,索性蹭一波师傅的文章进行学习和补充。

阅读下文前强烈推荐看这一篇文章,本文基于这篇文章(https://xz.aliyun.com/t/13741)进行补充。

前面分析基本上都和上面文章中一致则不再赘诉,在文章最后说到,需要使用普通用户权限修改管理员密码,从而实现RCE或留后门。如果只是这样,那这个漏洞其实也就是越权,实用性不太强;因为致远后台本身就存在低权限getshell的漏洞,所以有了用户就不需要进行此操作。

  • 思考

这个漏洞如果是前台的话,则实用性就非常强,不再需要爆破弱口令等方式来进入后台。通过此漏洞直接前台重置默认管理员密码后使用接口来获取cookie,从而后台getshell;通过这种组合拳,基本上可以实现致远前台RCE。感谢参考文章师傅的分析和分享,下面我的水文开始。

  • 什么情况下不需要登录就可以访问

查阅致远开发文档后可知,如果声明了@NeedlessCheckLogin注解,则不需要登录即可访问。当Controller上声明此注解时,所有aciton都不需要登录;如果在某个Controlleraction上声明此注解,则表示当前action不需要登录。

在野0day | 致远OA组合拳至前台RCE

  • 哪些Controller声明了此注解

经过一番简单寻找,发现GenericControllerShareController在action中声明了此注解(可能还有其他Controller,当时找到这两个后就没有继续寻找)。所以调用这两个Controlleraction时,不需要登录即可访问。

GenericController:

在野0day | 致远OA组合拳至前台RCE

在野0day | 致远OA组合拳至前台RCE

ShareController:

在野0day | 致远OA组合拳至前台RCE

在野0day | 致远OA组合拳至前台RCE

  • 为什么选择share.do

其实这两个Controller能够达到的效果完全一致,下面用genericController.do再进行简单复现。

在野0day | 致远OA组合拳至前台RCE

在野0day | 致远OA组合拳至前台RCE

核心思想是通过xxx.do的后缀让致远使用SpringController的方式进行验证,而不是使用rest方式;但我们的请求格式又满足重置密码的rest接口,所以最终会调用rest接口来重置密码;而密码是share.do/genericController.do,这两个接口正好满足SpringController调用且声明了不需要鉴权的注解,从而完成前台密码重置。

  • 后台getshell

通过ZipSlip漏洞,将webshell解压到根目录下从而getshell。

  1. 上传zip

在野0day | 致远OA组合拳至前台RCE

  1. 访问shell

通过构造特殊的zip文件,从而使得webshell解压到根目录下。

在野0day | 致远OA组合拳至前台RCE

  1. 分析

通过接口定位代码

在野0day | 致远OA组合拳至前台RCE

在野0day | 致远OA组合拳至前台RCE

首先判断了必须为MultipartHttpServletRequest,否则抛出异常,简单来说就是上传请求。

在野0day | 致远OA组合拳至前台RCE

接着判断了MaxUploadSizeExceeded和unknownException参数,不为空则抛出异常。

在野0day | 致远OA组合拳至前台RCE

然后获取上传信息,并创建临时zip文件来保存信息。

在野0day | 致远OA组合拳至前台RCE

接下来创建一个临时目录,判断是否有文件,有就清空。

在野0day | 致远OA组合拳至前台RCE

最后创建zip文件,遍历zip中的文件并取出后进行拼接。未对zip文件进行过滤,导致可以通过../跨越目录,从而写入到web目录中获取服务器权限。

在野0day | 致远OA组合拳至前台RCE

参考文章:
https://xz.aliyun.com/t/13741
http://open.seeyon.com/seeyon/webhelp/APIdoc/content/api/cn/oa.json11.24

广

0/1daypoc和分析复现退

注:使用Apple的师傅,切勿直接使用Apple的付款方式,可以选择wx或其他方式,也可以私信联系。

在野0day | 致远OA组合拳至前台RCE

在野0day | 致远OA组合拳至前台RCE

在野0day | 致远OA组合拳至前台RCE

原文始发于微信公众号(安全绘景):在野0day | 致远OA组合拳至前台RCE

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月7日11:58:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   在野0day | 致远OA组合拳至前台RCEhttps://cn-sec.com/archives/2554821.html

发表评论

匿名网友 填写信息