跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

Exchange Web服务(EWS)开发指南4——自动下载程序

精选回复

发布于

0x00 前言

在我之前的文章《Exchange Web Service(EWS)开发指南》和《Exchange Web Service(EWS)开发指南2——SOAP XML message》中,我详细介绍了如何通过SOAP XML消息使用hash访问Exchange资源。

因为是比较底层的通信协议,所以实现功能比较繁琐,比如下载邮件附件。需要依次完成以下操作:

读取文件夹信息,获取邮件对应的ItemId和ChangeKey。

阅读电子邮件信息以获取附件的ItemId。

通过附件的ItemId获取每个附件对应的AttachmentId。

通过AttachmentId下载邮件内容,并将内容解码为Base64以获得实际内容。

如果你想完全自动化下载邮件和提取附件,原来的ewsManage.py需要做一些改动。

所以本文将介绍自动下载邮件和提取附件的实现细节,开源代码ewsManage_Downloader。

0x01 简介

本文将介绍以下内容:

设计理念

发展细节

开放源代码

0x02 设计思路

EwsManage _ Downloader需要满足以下功能:

支持明文和NTLM哈希登录

支持关键字搜索

支持日期搜索

下载时可以指定下载次数。

可以自动下载邮件和提取附件。

在通信过程中,每一个SOAP XML消息请求都需要完整的NTLM验证,因此登录过程不能通过会话机制来简化。

因此需要重新设计ewsManage.py原有的代码结构,减少代码冗余。

0x03 开发细节

1.修复登录用户Domain参数的bug

最初的ewsManage.py需要指定登录用户的域作为参数。

例如,登录用户是test.com\administrator,域参数需要设置为test.com。

但是,如果登录用户是管理员,则不能指定Domain参数。

这是我以前使用NTLM认证时没有考虑到的地方。解决方案如下:

添加参数判断。如果Domain参数为NULL,则在NTML身份验证期间不指定Domian参数。

代码示例:

if domain=='NULL ':

ntlm_nego=ntlm.getNTLMSSPType1(主机)

否则:

ntlm_nego=ntlm.getNTLMSSPType1(主机,域)

2.支持关键词搜索

发送SOAP格式:

?xml版本='1.0 '编码='utf-8 '?

AllProperties{querystring}

其中{querystring}是搜索关键字,返回的结果是具有指定关键字的电子邮件对应的ItemId和ChangeKey。

3.支持日期搜索

发送SOAP格式同上,区别是{querystring}。

参考文献1:

https://docs . Microsoft . com/en-us/windows/win32/lwef/-search-2x-WDS-aqs reference?重定向自=MSDN

参考文献1中的时间格式为MM/DD/YY,示例如下:

2021年3月1日对应的格式是03/01/21。

但是经过实际测试,{querystring}中关于时间的语法无法遵循参考文献1的格式。

参考文献2:

https://support . Microsoft . com/en-us/office/learn-to-narrow-your-search-criteria-for-better-searches-in-outlook-d 824 D1 e 9-a255-4c8 a-8553-276 FB 895 A8 da?ocmsassetid=ha 010238831 correlation id=BF 4c DCF 9-abb 8-4d 43-930 e-d 0909 de 76728 ui=en-usrs=en-usad=us

参考文献2中的时间格式为年/月/日,示例如下:

2021年3月1日对应的格式是2021年3月1日。

关于时间格式,正确的语法是reference 2。

综上所述,2021年1月1日至2021年12月30日发送的参数选择如下:

发送日期:=2021年1月1日,发送日期:=2021年12月30日

从2021年1月1日到2021年12月30日的选定参数如下:

接收日期:=2021年1月1日,接收日期:=2021年12月30日

4.支持长度搜索

一般情况下,长度小于2000的所选参数为:size:2000。

但是要考虑XML格式转义,实际参数内容为:size:2000。

0x04 开源代码

完整的代码已经上传到github,地址如下:

https://github . com/3g student/Homework-of-Python/blob/master/EWS manage _ downloader . py

支持明文和NTLM哈希登录,代码支持以下功能:

下载,下载邮件和提取附件,并指定邮箱文件夹和下载次数。

Findallpeople,导出联系人列表

搜索,邮件搜索和下载,支持关键词,时间,长度和其他语法。

下载邮件时,邮件用户名作为父文件夹,不同的操作会创建不同的子文件夹。在使用搜索功能创建子文件夹时,为了避免特殊字符(如字符)被用作文件夹名称,此处将删除特殊字符。

0x05 小结

介绍了自动下载邮件和提取附件的开发细节,开源代码ewsManage_Downloader.py,利用hash实现对Exchange资源的访问。

由于是底层通信协议,实现功能相对繁琐,但对理解通信协议原理和漏洞利用有帮助。

留下回复

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。