​Exchange Web Service(EWS)开发指南2——SOAP XML message

  • A+
所属分类:安全闲碎

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格式,示例如下图:

下载.png

0x03 SOAP XML message的使用

相比于EWS Managed API,SOAP XML message更底层,需要考虑的细节也更多一些。

1.查看收件箱的邮件数量

发送的XML格式:

image.png

返回的内容格式:

image.png

通过返回内容可以获得收件箱的邮件总数量,未读邮件数量。

2.获得收件箱邮件信息

发送的XML格式:image.png

通过返回内容可以获得收件箱所有邮件的标题、收发关系、是否带有附件等,但无法显示正文内容和附件名称。

通过返回内容能够获得每个邮件对应的ItemId和ChangeKey,进而获得邮件内容、附件的名称和ID。

3.获得指定邮件的具体内容

发送的XML格式:

image.png

其中的{id}为指定邮件对应的ItemId,{key}为指定邮件对应的ChangeKey。

通过返回内容可以获得邮件的详细信息,包括正文内容。

4.获得指定邮件的附件名称

发送的XML格式:image.png

其中的{id}为指定邮件对应的ItemId。

返回的内容格式:image.png

通过返回内容可以获得附件的名称,但无法获得附件的内容。

通过返回内容能够获得每个附件对应的Id,进而获得附件的类型和内容。

5.获得指定附件的内容

发送的XML格式:image.png

其中的{id}为指定附件对应的Id

返回的内容格式:

image.png

其中的{xxxxxxx}为base64编码后的内容,解码后可获得附件的内容。

这是需要注意附件的类型,如果为text,表示文本类型,否则在保存附件时需要以二进制格式写入。

0x04 开源Python实现代码

代码如下:

11.jpg

使用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。

如下图:

image.png

(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。

如下图:

image.png

保存指定邮件:

ewsManage.py 192.168.1.1 443 plaintext test.com user1 password1 saveattachment

接着输入附件的Id。

自动保存附件,区分是否为text格式。

结果保存为saveattachment.xml

如下图:

image.png

0x05 小结

本文介绍了SOAP XML message的使用,开源代码ewsManage.py,实现了利用hash对Exchange资源的访问。

本文为 3gstudent 原创稿件,授权嘶吼独家发布,如若转载,请注明原文地址

本文来源于互联网:​Exchange Web Service(EWS)开发指南2——SOAP XML message

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: