0x00 前言
Autodiscover是Exchange的一个服务,用来简化客户端应用程序的配置流程。用户只需要输入自己的电子邮件地址和密码,就能够通过Autodiscover服务获取运行客户端应用程序所需的配置信息。
在渗透测试中,当我们获得了一个邮件用户的凭据,能够通过Autodiscover服务挖掘出更多有价值的信息。
本文将要介绍通过Autodiscover服务读取配置信息的方法,开源实现代码,分享利用思路。
0x01 简介
本文将要介绍以下内容:
· 通过Autodiscover进行口令爆破的方法
· 通过Autodiscover读取配置信息的方法
· 通过Autodiscover访问Exchange邮件资源的方法
0x02 通过Autodiscover进行口令爆破的方法
对应的URL:https://
验证方式:NTLM Over HTTP Protocol(分别支持明文和NTLM hash登录)
登录失败返回401。
登录成功返回200,内容示例:
我们可以看到,Autodiscover的验证流程同EWS基本相同,所以在代码实现上也可以参照之前的代码checkEWS.py
这里不再重复介绍,具体细节可参考之前的文章《渗透技巧——Pass the Hash with Exchange Web Service》。
实现代码可参照checkAutodiscover.py中的checkautodiscover功能。
0x03 通过Autodiscover读取配置信息的方法
直接通过浏览器访问https://
无法获得配置信息,浏览器返回的内容示例:
如下图:
为了能够读取配置信息,我们需要以下操作:
1.发送GET包,Header中加入NTML认证信息,示例:Authorization: NTLM xxxxxxxxxxx
URL为/autodiscover/autodiscover.xml
指定编码格式为gzip,格式如下:
Accept-Encoding: gzip
2.接收返回结果
提示401 Unauthorized
3.发送POST包
在Header中完成NTML认证,同时Header还需要额外添加以下信息(X-Anchormailbox),指定当前用户的邮箱地址,示例:X-Anchormailbox: [email protected]。
POST的内容格式如下:
其中,{EMailAddress}为当前用户的邮箱地址。
完整数据包示例:
4.接收返回结果
提示200 OK
返回的Body内容为gzip压缩格式,需要进行解码。
不同版本的Exchange获得的内容有所不同,部分通用的内容如下:
· DisplayName
· LegacyDN
· AutoDiscoverSMTPAddress
其中值得注意的是AD,代表域控制器的计算机名,在Exchange 2013及更老的版本能够获得AD的信息,Exchange2016无法获取。
以上的实现代码可参照checkAutodiscover.py中的checkautodiscover功能。
在之前的文章《渗透技巧——通过Exchange ActiveSync访问内部文件共享》介绍了通过Exchange ActiveSync访问域内共享目录SYSVOL的方法,这里的路径需要指定域控制器的计算机名。
正确的写法:
\\dc1\SYSVOL\test.com\Policies\{6AC1786C-016F-11D2-945F-00C04fB984F9}\GPT.INI
错误的写法:
\\test.com\SYSVOL\test.com\Policies\{6AC1786C-016F-11D2-945F-00C04fB984F9}\GPT.INI
将以上两点进行结合,就能够完整的实现读取域内共享目录SYSVOL的文件。
为了能够支持Exchange2016,这里介绍一种更为通用(支持所有版本)获取域控制器计算机名的方法:通过EWS读取当前用户的配置信息,进而获得域控制器的计算机名。
参考资料:
这里需要注意请求的url为/autodiscover/autodiscover.svc,而不是/EWS/Exchange.asmx。
发送的SOAP格式示例:
这里需要注意{domain}必须为域名,不能是IP。
返回的结果中,ActiveDirectoryServer表示域控制器的计算机名,如下图:
实现代码可参照checkAutodiscover.py中的getusersetting功能。
0x04 通过Autodiscover访问Exchange邮件资源的方法
通过Autodiscover完成身份认证以后,可以使用MAPI OVER HTTP访问Exchange邮件资源。
注:
MAPI OVER HTTP是Outlook同Exchange2016之间默认的通信协议。
MAPI OVER HTTP是Exchange Server 2013 Service Pack 1 (SP1)中实现的新传输协议,用来替代RPC OVER HTTP(也称作Outlook Anywhere)
Exchange2013默认没有启用MAPI OVER HTTP,Outlook同Exchange之间的通信协议使用RPC OVER HTTP。
MAPI OVER HTTP的资料可参考:
https://interoperability.blob.core.windows.net/files/MS-OXCMAPIHTTP/[MS-OXCMAPIHTTP].pdf
ruler也支持MAPI OVER HTTP的部分功能,可以作为参考。
1.执行命令
流程:
1.connect
2.execute
3.disconnect
2.通过Offline Address Book (OAB)读取GlobalAddressList
(1)通过Autodiscover获得OABUrl
命令示例:
python checkAutodiscover.py 192.168.1.1 443 plaintext [email protected] DomainUser123! checkautodiscover
结果如下图:
获得OABUrl为https://dc1.test.com/OAB/9e3fa457-ebf1-40e4-b265-21d09a62872b/
(2)访问OABUrl,从中找到Default Global Address对应的lzx文件名。
命令示例:
python checkAutodiscover.py 192.168.1.1 443 plaintext [email protected] DomainUser123! checkoab
结果如下图:
获得Default Global Address为4667c322-5c08-4cda-844a-253ff36b4a6a-data-5.lzx
(3)下载lxz文件
命令示例:
python checkAutodiscover.py 192.168.1.1 443 plaintext [email protected] DomainUser123! downloadlzx
结果如下图:
(4)对lxz文件进行解码
使用工具oabextract
下载后需要进行安装。
编译好可在Kali下直接使用的版本下载地址:http://x2100.icecube.wisc.edu/downloads/python/python2.6.Linux-x86_64.gcc-4.4.4/bin/oabextract
将lzx文件转换为oab文件的命令示例:
oabextract 4667c322-5c08-4cda-844a-253ff36b4a6a-data-5.lzx gal.oab
提取出GAL的命令示例:
strings gal.oab|grep SMTP
结果如图:
0x05 小结
本文介绍了通过Autodiscover进行口令爆破、读取配置信息和访问Exchange邮件资源的方法,开源实现代码,分享利用思路。
本文为 3gstudent 原创稿件,授权嘶吼独家发布,如若转载,请注明原文地址