【技术原创】Exchange Web Service(EWS)开发指南6——requests_ntlm
2021-12-15 11:52:41 Author: www.4hou.com(查看原文) 阅读量:22 收藏

0x00 前言

在之前的文章《Exchange Web Service(EWS)开发指南4——Auto Downloader》和《Exchange Web Service(EWS)开发指南5——exchangelib》介绍了两种利用hash访问Exchange资源的方法,各有特点。

前者采用了较为底层的通信协议,在功能实现上相对繁琐,但是有助于理解通信协议原理和漏洞利用。后者借助第三方库exchangelib,开发便捷,但是不太适用于漏洞利用。

站在漏洞利用的角度,如果仅使用封装NTLM认证的第三方包,既不影响漏洞利用,又能兼顾效率。

所以本文选取了第三方包requests_ntlm,以自动化下载邮件和提取附件为例,开源代码,介绍用法。

0x01 简介

本文将要介绍以下内容:

◼requests_ntlm用法

◼开发细节

◼开源代码

0x02 requests_ntlm用法

说明文档:

https://github.com/requests/requests-ntlm

1.两种登录方法

我在低于1.0.0版本的requests_ntlm.py找到了使用Hash登录的方法,代码位置:

https://github.com/requests/requests-ntlm/blob/v0.3.0/requests_ntlm/requests_ntlm.py#L16

这里可以找到使用Hash登录的参数格式为ABCDABCDABCDABCD:ABCDABCDABCDABCD

两种登录Exchange的示例代码如下:

(1)明文登录

image.png

(2)Hash登录

image.png

2.Session机制

requests_ntlm支持Session机制,能够减少身份验证的次数,缩短通信数据包,效率更高

0x03 开发细节

1.使用requests_ntlm重新实现ewsManage_Downloader.py

在原有脚本ewsManage_Downloader.py的基础上,只需做以下替换即可

(1)

原代码:

image.png

替换为:

image.png

(2)

原代码:

image.png

替换为:

image.png

(3)

原代码:

image.png

替换为:

image.png

(4)

原代码:

image.png

替换为:

image.png

(5)

原代码:

image.png

替换为:

image.png

(6)

原代码:

image.png

替换为:

image.png

(7)

原代码:

image.png

替换为:

image.png

最后再去除一些多余的代码即可

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

https://github.com/3gstudent/Homework-of-Python/blob/master/ewsManage_requests_ntlm_Downloader.py.py

2.使用Session机制重新实现ewsManage_Downloader.py

通过Session机制能够减少身份验证的次数,缩短通信数据包,效率更高

所以在这里使用Session机制重新实现ewsManage_Downloader.py

换用Session机制的方法示例:

原代码:

image.png

新代码:

image.png

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

https://github.com/3gstudent/Homework-of-Python/blob/master/ewsManage_requests_ntlm_Session_Downloader.py

0x04 小结

在Exchange Web Service(EWS)开发上,使用第三方包requests_ntlm,封装了NTLM认证过程,不仅可以提高开发效率,同时不影响漏洞利用代码的编写,更可以借助Session机制减少认证过程的通信数据,十分推荐。

如若转载,请注明原文地址


文章来源: https://www.4hou.com/posts/rV5B
如有侵权请联系:admin#unsafe.sh