CVE-2021-26855 ssrf 简单利用 golang 练习
- Exchange Server 2013 小于 CU23
- Exchange Server 2016 小于 CU18
- Exchange Server 2019 小于 CU7
该漏洞不同于以往的 exchange 漏洞,此漏洞并不需要一个可登录的用户身份,可以在未授权的情况下获取内部用户资源,配合 CVE-2021-27065 可以实现远程命令执行。
漏洞触发必要条件
- 目标服务器存在漏洞
- 目标 exchange 服务器必须为负载均衡服务器,即同时使用两台及以上服务器
- 目标邮箱地址,
注意,该地址需要为域内邮件地址而非邮箱地址,二者存在差异经过测试别非如此,只要是正确的邮箱地址就可以,特殊情况除外 - 攻击者还必须标识内部Exchange服务器的
完全限定域名(FQDN)实际上,只需要服务器主机名即可,因为在域内可以通过主机名解析
以上四项中,FQDN 可以通过 ntlm type2 消息抓取;邮件地址可以直接枚举。 对FQDN做一个额外说明,由于我仅仅是使用ntlm type2抓取系统信息,因此工具默认获得的FQDN就是当前访问的机器,因此无法直接触发该漏洞,需要手工根据FQDN名判断使用 -n 更换其他exchange服务器主机名。
这一漏洞利用,使用脚本语言如 ruby python 等更为方便,用 golang 写主要是为了学习 golang,因此这个小工具只能算半成品,有时间再更新。
本工具目前支持以下功能:
- 漏洞检测(只是简单检测能不能打,并不能用作检测)
- 用户枚举
- 简单的邮件 id、标题读取
- 邮件下载(已升级,现在为标准的eml文件)
- 用户保存的联系人读取(注意,非全局,仅为目标自己保存的联系人)
- folder指定,非任意,具体请参考https://docs.microsoft.com/zh-cn/exchange/client-developer/web-service-reference/distinguishedfolderid
其他利用请自行修改xml内容。
用法:
go run CVE-2021-21978.go -h <target ip>
-h string 必填,目标地址或域名
-U string 选填,需要枚举的用户列表
-d 选填,下载邮件
-l 选填,列出邮件列表
-n string 选填,需要指定 FQND 事填写
-t string 选填,请求延迟时间 (default "1")
-u string 选填,指定目标 (default "administrator")
-c 选填,读取当前用户保存的联系人,非全部
-f string 选填,指定查看的 folder (default "inbox")
更新下载功能
完善下载功能
更新读联系人功能
更新指定folder