*本文作者:si1ence,本文属 CodeSec 原创奖励计划,未经许可禁止转载。
前言一次偶然的机会发现某台Web服务器被黑了之后被植入了挖矿病毒,然后忙活了好久清理完病毒之后就开始思考思考到底是怎么被黑的,俗话说的好死要死得明白。
服务器本身只开发了外网的web端口,然后初步怀疑是从web服务端进来的于是先用D盾查杀一下果不出所料查杀出一个webshell,路径却在Openfire目录下以前没有接触过这个玩意遂研究之。


0×1 功能介绍
Openfire 是基于XMPP 协议的IM 的服务器端的一个实现,虽然当两个用户连接后,可以通过点对点的方式来发送消息,但是用户还是需要连接到服务器来获取一些连接信息和通信信息的,所以服务器端是必须要实现的。Openfire 也提供了一些基本功能,但真的很基本的!庆幸的是,它也提供插件的扩展,像Spark 一样,同样强烈建议使用插件扩展的方式来增加新的功能,而不是修改人家的源代码。
然后上Zoomeye搜索一波,发现应用还挺广泛的:

0×2 过程溯源
由于是生产环境也不好瞎搞,然后就找到这个webshell的目录发现还有一个叫做helloworld.jar的包,打开一下才发现这个玩意才是上传的主体,然后自己从官网下载一个最新版本的openfire本地安装测试一下。

就一个exe安装文件直接点点点就好了,安装完毕之后直接就进入了配置界面截取关键的二个步骤如下:

然后进入了一个配置管理员的界面,说实话不知道是什么玩意也不知道有什么用然后就下一步下一步直接跳过了。

安装完成之后,进入登陆界面,输入用户名密码admin:admin直接就登陆成功了,毫无违和感。


发现有一个插件的地方,按照google搜索到的办法结合从服务器保存下来的helloword.jar文件然后就上传一下试一下,上传成功。

然后转换到用户接口设置的地方点击一下就直接访问到了webshell的内容:


测试了一下权限就是运行openfire的用户的管理system这波操作是真的可以。

0×3 过程分析
查看了一下helloword的包里面具体都包含了什么东西,看起来类似于一个基于servlet的网站目录结构。
查看了一下plugin.xml文件当中Url指向的是chakan.jsp这个文件,但是我并没有在这个web目录下面搜到这个jsp,反而是这个被查杀出来的sqzr.jsp这个代码貌似没有运行的样子。

根据xml当中提示:
Main plugin class 提示这里是你的插件全路径:
com.iteye.redhacker.openfire.plugin.helloWorldPlugin才发现了chakan.jsp的源文件都还是class文件。

在web.xml当中发现了这个webapp插件同时也定义好了servlet-mapping所有的这个路径下资源的请求都通过chakan.jsp和update2.jsp处理。

管理员的用户名和密码都明文保存在保存在数据库当中:

0×4 总结
1.祸患常积于忽微平时在配置一些应用系统的时候看来还真的不能太马虎,跳过一小步可能就是安全一大步了
2.如果不是最开始扫描出来的那个sqzr.jsp这个大马估计排查起来需要很长的时间,这种基于war包和jar包的webshell查杀起来还是有些麻烦。
*本文作者:si1ence,本文属 CodeSec 原创奖励计划,未经许可禁止转载。