本文讲的是如何滥用 Exchange Web Service API?,
0x00 前言
一直以来,Outlook Web Access (OWA) 一直是一个为渗透测试人员产生攻击向量的源头。最常见的就是攻击者利用针对暴露在互联网的 OWA 网站进行爆破,以便能获取到有效的登录凭证。一旦攻击者获得了有效的登录凭证,他就可以通过一些使用单因子进行身份验证的网站访问目标的网络,例如,(Citrix, VPN, RDP)等。
在使用多个爆破工具之后,我发现有很多不足的地方,因此我决定编写我自己的 OWA 爆破工具。我发现很多已安装的 Exchange 通过 Exchange Web Service (EWS) 提供了一个 API 并且编写了一系列高级的模块。
0x01 编写自己的 OWA 爆破工具
EWS 是一个暴露出来的非常方便的 API,其可以允许编程式的访问他人的邮箱以及一些 Exchange 的功能。在利用这些模块之前,你必须安装 Exchange Web Service 的 API 。安装之后,可以从这拷贝一份 OWA-Toolkit 。之后将这些模块导入,如下:
Import-module C:pathtoOWA-Toolkit.psm1
导入模块之后你可以看到它所包含的 PS cmdlets,如下:
获取 OWA 版本的方法说明:
此函数用于获取目标 Exchange 服务器上运行的 Exchange 版本,访问 http(s)://目标地址/owa/auth/logon.aspx,在响应头里的 X-OWA-VERSION 的值就是 Exchange 的版本号。常见的值有 OWA2007,OWA2010。
针对 OWA 2013 版此方法无效,不过可以在响应的 body 中查找 owa/auth/15. 或 owa/15. 关键字,这些关键字是 OWA 2013 版的标志。
在使用 OWA-Toolkit 时,如果出现如下错误提示,
"You need to install the Exchange Web Service API or check your Microsoft.Exchange.WebServices.dll path"
请修改 dll 文件路径进行尝试。
$dllPath = "C:Program Files (x86)MicrosoftExchangeWeb Services2.1Microsoft.Exchange.WebServices.dll"
如果你想使用用户的 ID 或者是完整的emial地址来进行爆破的话,需要准备一个目标的列表。这个列表是一个一行一条数据的 txt 文件。之后你就可以调用 Brute-EWS 进行爆破。可以使用 -Domain 参数指定要爆破的域名,如下:
Brute-EWS -TargetList .userids.txt -ExchangeVersion 2007_SP1 -ewsPath "https://webmail.yourdomain.com/EWS/Exchange.asmx" -Password "omg123" -Domain "yourdomain.com"
可以使用 UserAsPass 参数尝试使用用户名作为密码进行身份验证,一旦爆破出了有效的凭证,此凭证会加入到全局地址列表(GAL)以便进行其他一些爆破尝试或者是社工。当我使用 Burp 作为代理对所有邮箱地址进行爆破时,这个过程有点痛苦。因此,我决定利用 EWS 编写一个可以获取 GAL 的脚本。使用 Steal-GAL 这个cmdlet 就可以调用,如下:
Steal-GAL -Password "littlejohnny" -User "dbetty" -domain "yourdomain.com" -ExchangeVersion 2007_SP1
你也可以使用管道符将一个 Exchange Web Service对象传递给这个 cmdlet ,如下:
OTK-Init -Password "littlejohnny" -User "dbetty" -Domain "yourdomain.com" -ExchangeVersion 2007_SP1 | Steal-GAL
同样可以使用管道符将输出定向到一个输出方法中,最简单的方式是在命令中添加 "| export-csv -Path .gal.csv"。
0x02 Exchange Web Service API 介绍
EWS 的全称是 Microsoft Exchange Web service, 它是 Exchange 2007 以后推出的一个基于SOAP (Simple Object Access Protocol) 协议的 web service, 提供了访问 Exchange 资源的接口。微软的 Exchange 团队后续又推出了 Microsoft Exchange Web Service(EWS) Managed API。这个全新的接口提供了很多操作邮箱的功能。
在安装了 Microsoft Exchange Web Service(EWS) Managed API 之后,打开安装目录。如下图:
可以看到下面有一个 GettingStarted.doc, 此说明文档介绍了有关于 Exchange Web Service(EWS) Managed 的常用操作,并给出了代码示例,建议阅读英文版的说明文档,有更详细的说明。
编写工具注意事项
此 API 是基于 .NET Framework 开发的,所以除了可以使用 PowerShell 直接调用也可以使用 C# 编写自己的 OWA 利用工具。在需有使用这个 API 的项目中添加 Microsoft.Exchange.WebServices.dll 引用, 然后使用Microsoft.Exchange.WebServices.Data 这个命名空间。
在这个命名空间里提供了数十个操作邮箱的方法,如,邮箱登录,邮件获取,邮件收发等等。如下图:
具体每一个方法的使用实例代码可以参考微软官方的说明。
另外,Microsoft Exchange Web Service(EWS) Managed API 有 32 位和 64 位的版本,在安装时要注意安装的路径,如果你安装的是 EWS API 2.0,需要设置工程属性的 .NET Framework 版本为 .NET Framework 4。EWS API 的其他版本可能需要使用不同版本的.NET Framework。
原文发布时间为:2017年3月28日
本文作者:李白
本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。