Tenfk 发布于2022年11月8日 分享 发布于2022年11月8日 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。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子