Zscaler Proxy 3.6.1.25 及更早版本中存在不恰当的文件类型控制漏洞,允许本地攻击者绕过文件下载/上传限制。
2022 年夏天,我发现了一个影响 Zscaler 代理(3.6.1.25 及更早版本)的漏洞。该漏洞将允许本地攻击者使用 Burp 等工具,甚至使用依赖后台智能传输服务(BITS)协议的原生 Microsoft 实用程序(如 Bitsadmin),绕过对受密码保护的压缩包的下载/上传限制。
根据 Microsoft 的文档,BITS 协议*“定义了一种将大型有效负载从客户端传输到 HTTP 服务器或反之亦然的方法,即使在遇到中断的情况下,也可以通过将有效负载分成多个片段来发送”*。这允许绕过基于文件类型的限制,因为 Zscaler 无法在多个请求中正确重建文件。
尽管此概念验证仅关注_下载_方面,但该漏洞同样适用于上传。
在本节中,重点介绍了绕过 Zscaler 对受密码保护的压缩包下载限制的两种不同方法。 测试针对客户端 3.6.1.25 版本进行,使用了以下 URL。
第一种方法涉及修改 HTTP 请求,可以通过浏览器或 Burp Suite 等工具完成。为了本次测试,我选择了前者。
下图显示了请求被 Zscaler 拦截并阻止的情况。在添加 Range 头(值为 bytes = 0-x,其中 x 是小于文件总大小的任意值)后,请求被重新发送。

请求重新发送后,会收到状态码为“206 Partial Content”的响应。响应头将显示文件总大小,而响应正文以 base64 编码。


通过手动增加字节范围值来重复请求,直到到达最后一个文件块。

生成的负载可以通过多种方式重建:在本次测试中,使用了自定义的 Powershell 脚本(您可以在 Reconstruct-Payload.ps1 中找到它)。
重建 zip 文件的 MD5 哈希(CE6CFFEA60C6CDF40C998E56B6EFBD20)与 Virus Total 上找到的预期哈希匹配。



第二种方法利用 Microsoft 的 BITS 协议,该协议会将下载请求原生地分成多个块。
本次测试使用 CLI 实用程序 bitsadmin.exe,命令行如下:
bitsadmin.exe /transfer <job name> /download /priority normal <URL> <path_destination_file>


生成的 zip 的 MD5 哈希与上一节中找到的哈希匹配。