Anonymous 发布于2022年11月8日 分享 发布于2022年11月8日 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文件)。 该命令将导出多个证书文件,如下图所示 为了找到交换通信数据所使用的证书文件,我们可以采用以下方法: 访问Exchange登录页面,通过查看证书有效期找到对应的证书文件,如下图所示。 您也可以通过命令行获取证书信息。请参考:https://github . com/3g student/howork-of-c-sharp/blob/master/sslcertscan . cs。 测试下图 (2)配置Wireshark 编辑-首选项. 协议- TLS 选择RSA密钥列表 填写配置信息,如下所示 (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。 如下图 至此,Exchange Server配置完成,再次捕获数据,可以获取明文通信数据,如下图所示。 2.Exchange Client捕获明文通信数据的方法 (1)添加环境变量 变量名为SSLKEYLOGFILE,值为文件路径。 如下图 (2)配置Wireshark 编辑-首选项. 协议- TLS 将(Pre)-Master-Secret日志文件名设置为c: \ test \ sslkey.log。 如下图 至此,Exchange客户端配置完成。 打开Chrome浏览器,访问Exchange,使用Wireshark获取明文数据,如下图所示。 0x03 使用hash登录ews的思路 通过mimikatz的over pass hash和ews用当前凭证登录,我们可以用hash登录ews。我们分别在Exchange Server和Exchange Client中捕获数据,如下图所示。 您可以看到,这里的身份验证过程使用了基于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哈希的验证。 验证明文,如下所示 验证哈希,如下所示 我的代码验证成功后,我将发送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的方法,开源实现脚本,记录思路和开发过程。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子