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

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

    TheHackerWorld官方

Exchange Web服务(EWS)开发指南5——exchangelib


Tenfk

推荐的帖子

0x00 前言

在之前的文章介绍了通过SOAP XML消息实现利用混杂对交换资源的访问,由于采用了较为底层的通信协议,在功能实现上相对繁琐,但是有助于理解通信协议原理和漏洞利用。

如果仅仅为了更高效的开发一个资源访问的程序,可以借助计算机编程语言库exchangelib实现。

本文将要介绍exchangelib的用法,开源代码,实现自动化下载邮件和提取附件。

0x01 简介

本文将要介绍以下内容:

exchangelib用法

开发细节

开源代码

0x02 exchangelib用法

参考资料:

https://github.com/ecederstrand/exchangelib

https://ecederstrand.github.io/exchangelib/

1.简单的登录测试

代码如下:

从exchangelib导入凭据、帐户、配置、代理

凭据=凭据(用户名=' MYWINDOMAIN \ \ myuser ',密码='topsecret ')

配置=配置(server='outlook.office365.com ',凭据=凭据)

Account=Account(primary _ SMTP _ address=' John @ example。' com ',config=config,

自动发现=假,访问类型=委托)

对于account.inbox.all()中的项目order _ by('-datetime _ received ')[:100]:

打印(项目。主题,项目。发件人,项目。日期时间_接收时间)

如果交换服务器证书不可信,需要忽略证书验证,加入以下代码:

从exchangelib .协议导入基础协议,NoVerifyHTTPAdapter

基本协议HTTP _ ADAPTER _ CLS=NoVerifyHTTPAdapter

屏蔽输出的提示信息不安全请求警告,加入以下代码:

导入urllib3

urllib3.disable_warnings()

完整代码如下:

从exchangelib导入凭据、帐户、配置、代理

从exchangelib .协议导入基础协议,NoVerifyHTTPAdapter

基本协议HTTP _ ADAPTER _ CLS=NoVerifyHTTPAdapter

导入urllib3

urllib3.disable_warnings()

凭据=凭据(用户名=' MYWINDOMAIN \ \ myuser ',密码='topsecret ')

配置=配置(server='outlook.office365.com ',凭据=凭据)

Account=Account(primary _ SMTP _ address=' John @ example。' com ',config=config,

自动发现=假,访问类型=委托)

对于account.inbox.all()中的项目order _ by('-datetime _ received ')[:100]:

打印(项目。主题,项目。发件人,项目。日期时间_接收时间)

2.使用明文或hash登录

使用明文登录:

凭据=凭据(' MYWINDOMAIN \ \ myuser ',' topsecret ')

使用混杂登录:

凭据=凭据('我的风域\ \我的用户',' 00000000000000000:7c 451851 ea 87 b 63 EC 7692126416d 01 EB ')

3.统计邮件数目

示例代码:

n=a.inbox.all().计数()

4.指定时间范围进行搜索

示例代码:

对于账户。收件箱。filter(datetime _ received _ _ gt=EWS日期时间(2021,1,20,tz info=account。默认_时区))中的项目:

打印(项目。主题,项目。发件人,项目。日期时间_接收时间)

5.指定下载数量:

指定前10个:

first_ten=a.inbox.all()[:10]

指定后10个:

last_ten=a.inbox.all()[:-10]

指定区间:

next_ten=a.inbox.all()[10:20]

6.文件夹枚举

能够遍历出邮箱用户下的所有文件夹,示例代码:

打印(account.root.tree())

7.将Python脚本编译成exe

如果将使用exchangelib开发的计算机编程语言脚本编译成可执行程序的扩展名格式,使用pyinstaller -F测试。巴拉圭命令会报错,提示:找不到具有关键字协调世界时。亦称COORDINATED UNIVERSAL TIME的时区

解决方法:

py安装程序-收集-所有tz数据-一个文件测试。巴拉圭

0x03 开发细节

1.通信协议

exchangelib也是通过SOAP XML消息实现利用混杂对交换资源的访问

2.邮件保存

exchangelib中会自动可扩展标记语言格式邮件内容进行解析,在保存邮件时,可以直接提取出对应的信息

这里需要注意的是可以将返回结果中的字符串\r\n替换成换行符,提高数据可读性

示例代码:

filtered_items=email.inbox.all()

对于项目中的项目:

用打开(item.id,' w ')作为fw:

fw.write(str(item)).替换(' \\r\\n ',' \r\n '))

3.条件匹配

exchangelib支持高级查询语法(AQS)

AQS参考资料:

https://份文件。微软。com/en-us/exchange/client-developer/we b-service-reference/query string-查询字符串类型

利用AQS可以实现日期搜索,搜索格式示例:

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

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

对于关键词搜索,你不能直接使用AQS。你可以选择接收所有邮件,然后匹配字符串。

0x04 开源代码

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

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

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

支持您自己的Exchange服务器和Office 365(outlook.office365.com)

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

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

Listfolder,枚举用户的所有文件夹。

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

0x05 小结

介绍了EWS Manage _ exchangelib _ downloader . py开源代码Exchange Lib的用法,并利用hash实现了对Exchange资源的访问。

如果想快速开发EWS的资源访问程序,推荐使用exchangelib。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...