0x00 前言
在之前的文章《Exchange Web Service(EWS)开发指南》开源了工具ewsManage,实现了对Exchange资源的访问。
本文将要更近一步,通过SOAP XML message实现利用hash对Exchange资源的访问。
0x01 简介
本文将要介绍以下内容:
· 利用hash访问Exchange资源的方法
· SOAP XML message的使用
· 开源Python实现代码
· 代码开发细节
0x02 利用hash访问Exchange资源的方法
在之前的文章《渗透技巧——Pass the Hash with Exchange Web Service》介绍了使用hash登录ews的方法。
本文将要基于之前的研究,介绍登录ews以后访问Exchange资源的方法,所以在程序实现上会继续选择Python,使用EWS SOAP XML message访问Exchange的资源。
对于EWS SOAP XML message的格式,有以下两种方法进行参考:
1.查找资料
· https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/get-started-with-ews-client-applications
· https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/ews-xml-elements-in-exchange
2.抓包分析
配置Wireshark,实现在Exchange Server上面捕获明文通信数据。
使用ewsManage访问Exchange资源。
捕获通信数据,能够获得不同操作对应的EWS SOAP XML message格式,示例如下图:
0x03 SOAP XML message的使用
相比于EWS Managed API,SOAP XML message更底层,需要考虑的细节也更多一些。
1.查看收件箱的邮件数量
发送的XML格式:
返回的内容格式:
通过返回内容可以获得收件箱的邮件总数量,未读邮件数量。
2.获得收件箱邮件信息
发送的XML格式:
通过返回内容可以获得收件箱所有邮件的标题、收发关系、是否带有附件等,但无法显示正文内容和附件名称。
通过返回内容能够获得每个邮件对应的ItemId和ChangeKey,进而获得邮件内容、附件的名称和ID。
3.获得指定邮件的具体内容
发送的XML格式:
其中的{id}为指定邮件对应的ItemId,{key}为指定邮件对应的ChangeKey。
通过返回内容可以获得邮件的详细信息,包括正文内容。
4.获得指定邮件的附件名称
发送的XML格式:
其中的{id}为指定邮件对应的ItemId。
返回的内容格式:
通过返回内容可以获得附件的名称,但无法获得附件的内容。
通过返回内容能够获得每个附件对应的Id,进而获得附件的类型和内容。
5.获得指定附件的内容
发送的XML格式:
其中的{id}为指定附件对应的Id
返回的内容格式:
其中的{xxxxxxx}为base64编码后的内容,解码后可获得附件的内容。
这是需要注意附件的类型,如果为text,表示文本类型,否则在保存附件时需要以二进制格式写入。
0x04 开源Python实现代码
代码如下:
使用Python实现,脚本运行前需要安装Impacket。
安装方法: pip install Impacket。
分别支持对明文和ntlm hash的登录。
在功能上基本上和ewsManage保持一致。
支持以下功能:
· 查看收件箱邮件数量
· 查看发件箱邮件数量
· 查看收件箱邮件信息
· 查看发件箱邮件信息
· 查看指定邮件的具体信息
· 查看指定附件的信息
· 保存指定附件
用法示例:
(1)查看收件箱邮件数量(使用明文登录)
ewsManage.py 192.168.1.1 443 plaintext test.com user1 password1 getfolderofinbox
(2)查看收件箱中的邮件信息(使用hash登录)
ewsManage.py 192.168.1.1 443 ntlmhash test.com user1 c5a237b7e9d8e708d8436b6148a25fa1 listmailofinbox
(3)查看指定邮件的具体信息
查看收件箱中的邮件信息:
ewsManage.py 192.168.1.1 443 plaintext test.com user1 password1 listmailofinbox
结果保存为listmailofinbox.xml,从文件中获得对应邮件的ItemId和ChangeKey。
查看指定邮件的具体信息:
ewsManage.py 192.168.1.1 443 plaintext test.com user1 password1 getmail
接着输入邮件的ItemId和ChangeKey。
最终结果保存为getmail.xml。
如下图:
(4)保存指定附件
查看收件箱中的邮件信息:
ewsManage.py 192.168.1.1 443 plaintext test.com user1 password1 listmailofinbox
结果保存为listmailofinbox.xml,从中获得对应邮件的ItemId。
查看指定附件的信息:
ewsManage.py 192.168.1.1 443 plaintext test.com user1 password1 getattachment
接着输入邮件的ItemId。
命令行输出附件名称。
结果保存为getattachment.xml,从文件中获得对应附件的Id。
如下图:
保存指定邮件:
ewsManage.py 192.168.1.1 443 plaintext test.com user1 password1 saveattachment
接着输入附件的Id。
自动保存附件,区分是否为text格式。
结果保存为saveattachment.xml
如下图:
0x05 小结
本文介绍了SOAP XML message的使用,开源代码ewsManage.py,实现了利用hash对Exchange资源的访问。
本文为 3gstudent 原创稿件,授权嘶吼独家发布,如若转载,请注明原文地址