如何滥用 Exchange Web Service API?

本文讲的是如何滥用 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日

本文作者:李白

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-10-29 15:01:33

如何滥用 Exchange Web Service API?的相关文章

VMware 虚拟化编程(3) —VMware vSphere Web Service API 解析

目录 目录 前文列表 VMware vSphere Web Services API VMware vSphere Web Services SDK vSphere WS API 中的托管对象 Managed Object 托管对象引用 Managed Object References 托管对象属性收集器 PropertyCollector 连接 vCenter 并获取 MO 最后 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/VADP 概念简析 VM

使用VB.NET实现 Google Web Service

google|web web service 是当今因特网世界中最重要的开发技术之一,我们可通过使用XML (可扩展标记语言). SOAP (简单对象访问协议).WSDL (Web Services 描述语言)和UDDI (统一描述.发现和集成协议)以标准方式将web service技术用于业务应用和客户端之间的连接. XML可用于构造数据.SOAP 可用于数据传输.WSDL 可用于描述服务而UDDI 可用于获取可用服务的列表.Web service 使得应用程序无须考虑硬件系统.操作系统和编程

如何在SSIS 中使用 Web Service 以及 XML 解析

Web Service 的用途非常广几乎无处不在,像各大门户网站上的天气预报使用到的第三方 Web Service API,像手机客户端和服务器端的交互等都可以通过事先设计好的 Web Service 接口来实现两个不同平台的信息沟通. 记得第一次做 IPhone 手机客户端与服务器端交互的 Web Service 接口的时候,由于我们在客户端开发和服务器端开发都没有 IOS 平台开发经验,白天有其它的项目,只能利用晚上的时间不断尝试.最终在第三个通宵的时候,尝试搭建的第3套不同版本的 Web

SSIS:在 SSIS 中使用 Web Service 以及 XML 解析

Web Service 的用途非常广几乎无处不在,像各大门户网站上的天气预报使用到的第三方 Web Service API,像手机客户端和服务器端的交互等都可以通过事先设计好的 Web Service 接口来实现两 个不同平台的信息沟通. 记得第一次做 IPhone 手机客户端与服务器端交互的 Web Service 接口的时候,由于我们在客户端 开发和服务器端开发都没有 IOS 平台开发经验,白天有其它的项目,只能利用晚上的时间不断尝试.最 终在第三个通宵的时候,尝试搭建的第3套不同版本的 W

有关jsp-JavaScript + web service 连接mysql

问题描述 JavaScript + web service 连接mysql 如何实现?最好能有实例.比如说,mysql中有一个test数据,我想让html文件读取数据库的内容,用上述方法,如果有别的方法也可以,求详细例子.本人小白,各位大哥求帮助 解决方案 javascript是通过post等请求调用web service API.而web service内部再调用mysql,取决于你用什么实现的web service,那么一般都有对应类库调用musql 然后web service返回结果给js

exchange-Exchange Web Service 如何同步已经被取消的会议信息到本地

问题描述 Exchange Web Service 如何同步已经被取消的会议信息到本地 hi, I have a same problem, please take a look at :http://stackoverflow.com/questions/23174490/ews-java-get-meetings I'd like to know how to get appointment.getIsCancelled and why the value of it always is f

使用Axis2的底层API开发Web Service

1.使用Axis2的底层API开发Web Service Server端 1.1创建一个WebService(取名为MyService) 在MyService中有两个operations,如下所示. public void ping(OMElement element){}//IN-ONLY模式.仅仅接收OMElement,并对 其处理. public OMElement echo(OMElement element){}//IN_OUT模式.接收OMElemen,并返回 OMElement.

WCF 、Web API 、 WCF REST 和 Web Service 的区别

The .Net framework has a number of technologies that allow you to create HTTP services such as Web Service, WCF and now Web API. There are a lot of articles over the internet which may describe to whom you should use. Now a days, you have a lot of ch

什么情况下应该使用Web Service?

webservice 现在我将列举三种情况,在这三种情况下,你将会发现使用Web service会带来极大的好处.此后,我还会举出不应该使用Web service的一些情况. 跨越防火墙的通信 如果你的应用程序有成千上万的用户,而且他们都分布在世界各地,那么客户端和服务器之间的通信将是一个棘手的问题.那是因为客户端和服务器之间通常都会有防火墙或者代理服务器.在这种情况下,你想使用DCOM就不是那么简单了,而且,通常你也不愿意把你的客户端程序发布到如此庞大数量的每一个用户手中.于是,你最终选择了用