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

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

    TheHackerWorld官方

渗透技巧——用Exchange Web服务传递哈希


Anonymous

推荐的帖子

0x00 前言

之前的文章《渗透技巧——Pass the Hash with Remote Desktop Protocol》介绍了用hash登录RDP的方法,本文将继续介绍用hash登录ews的方法。

我们知道使用hash登录ews可以通过mimikatz的over pass hash和使用当前凭证登录来实现。详情请咨询《Exchange Web Service(EWS)开发指南》。

但缺点是需要获得管理员权限,操作lsass进程,无法同时认证多个用户。

因此,本文将介绍更多的通用方法、开源实现脚本、记录思路和开发流程。

0x01 简介

本文将介绍以下内容:

已解密的交换通信数据

使用hash登录ews的想法

开放源代码

0x02 解密Exchange的通信数据

Exchange默认使用TLS协议加密数据,我们只能通过Wireshark捕获数据包来获取加密的内容,需要解密。

本文分别介绍了交换服务器和交换客户端捕获明文通信数据的方法。

1.Exchange Server捕获明文通信数据的方法

(1)在Exchange Server上导出证书文件

对于mimikatz,命令如下:

mimikatz.exe crypto:capi ' crypto:certificates/system store:local _ machine/store:my/export '

注:

如果不使用crypto:capi命令,则无法导出带有私钥的证书文件(pfx文件)。

该命令将导出多个证书文件,如下图所示

2-1.png

为了找到交换通信数据所使用的证书文件,我们可以采用以下方法:

访问Exchange登录页面,通过查看证书有效期找到对应的证书文件,如下图所示。

2-2.png

您也可以通过命令行获取证书信息。请参考:https://github . com/3g student/howork-of-c-sharp/blob/master/sslcertscan . cs。

测试下图

2-3.png

(2)配置Wireshark

编辑-首选项.

协议- TLS

选择RSA密钥列表

填写配置信息,如下所示

2-4.png

(3)禁用ECDH密钥交换算法

参考资料:

https://tech community . Microsoft . com/t5/core-infra structure-and-security/demystifying-schannel/ba-p/259233 #

通过注册表关闭ECDH的Cmd命令:

REG add hklm \ SYSTEM \ current Control set \ Control \ security providers \ SCHANNEL \ KeyExchangeAlgorithms \ ECDH/v Enabled/t REG _ DWORD/d 0/f

关闭后,通过SSLCertScan再次获取证书信息,密钥交换算法由ECDH临时算法改为RsaKeyX。

如下图

2-5.png

至此,Exchange Server配置完成,再次捕获数据,可以获取明文通信数据,如下图所示。

2-6.png

2.Exchange Client捕获明文通信数据的方法

(1)添加环境变量

变量名为SSLKEYLOGFILE,值为文件路径。

如下图

3-1.png

(2)配置Wireshark

编辑-首选项.

协议- TLS

将(Pre)-Master-Secret日志文件名设置为c: \ test \ sslkey.log。

如下图

3-2.png

至此,Exchange客户端配置完成。

打开Chrome浏览器,访问Exchange,使用Wireshark获取明文数据,如下图所示。

3-3.png

0x03 使用hash登录ews的思路

通过mimikatz的over pass hash和ews用当前凭证登录,我们可以用hash登录ews。我们分别在Exchange Server和Exchange Client中捕获数据,如下图所示。

4-1.png

您可以看到,这里的身份验证过程使用了基于HTTP协议的NTLM。

请参考之前的文章《渗透技巧——通过HTTP协议获得Net-NTLM hash》,了解HTTP协议上的NTLM的详细信息。

认证流程:

1.客户端向服务器发送GET请求,请求获取web内容。

2.因为打开了NTLM身份验证,所以服务器返回401,表示需要NTLM身份验证。

3.客户端启动NTLM身份验证,并向服务器发送协商消息。

4.服务器收到消息后,会生成一个16位的随机数(这个随机数称为Challenge),并以明文形式发送回客户端。

5.收到质询后,客户端使用输入的密码哈希对质询进行加密,生成响应,并将响应发送给服务器。

6.服务器从客户端接收加密的响应,在相同的操作之后,比较结果。如果匹配,则提供后续服务,否则认证失败。

对于步骤5:“使用输入的密码哈希加密质询”

如果直接传入hash,加密挑战,也能实现同样的功能。

至此,我们得到了用hash登录ews的实现思路:

模拟HTTP协议上的NTLM,直接传入hash,加密挑战,生成响应,将响应发送给服务器。

0x04 程序实现

这里用的是Python,好处是可以直接调用Impacket实现HTTP协议上的NTLM。

参考代码:

https://github . com/dirkjanm/priv exchange/blob/master/priv exchange . py

在脚本运行之前,需要安装Impacket。

安装方法:pip安装包

我的实现代码已经上传到github,地址如下:

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

代码分别支持明文和ntlm哈希的验证。

验证明文,如下所示

5-1.png

验证哈希,如下所示

5-2.png

我的代码验证成功后,我将发送soap命令来获取收件箱的信息。

关于soap命令的格式,请参考:

https://docs . Microsoft . com/en-us/exchange/client-developer/web-service-reference/EWS-operations-in-exchange

注意,数据中soap命令的格式需要调整;否则,错误将返回到500,表明发生了内部服务器错误。操作失败。

调整格式示例:

3359 docs . Microsoft . com/en-us/exchange/client-developer/we B- service-reference/getfolder-operation中soap的格式如下:

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

默认

调整后的内容如下:

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

默认

0x05 小结

介绍了用Wireshark解密Exchange通信数据的方法,用hash登录ews的方法,开源实现脚本,记录思路和开发过程。

留下回复

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

黑客攻防讨论组

黑客攻防讨论组

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

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