梦想家内容管理系统 Zip Slip Traversal Vulnerability

ZIP目录遍 ​ 因为ZIP压缩包文件中允许存在“../”的字符串,攻击者可以利用多个“../”在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原有的文件。可以利用此漏洞写入计划任务,或者写入Webshell造成任意代码执行漏洞。

0X01 ZIP目录遍历

​ 因为ZIP压缩包文件中允许存在“../”的字符串,攻击者可以利用多个“../”在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原有的文件。可以利用此漏洞写入计划任务,或者写入Webshell造成任意代码执行漏洞。

0X02 漏洞原理

在Linux/Unix系统中“../”代表的是向上级目录跳转,有些程序在当前工作目录中处理到诸如用“../../../../../../../../../../../etc/hosts”表示的文件,会跳转出当前工作目录,跳转到到其他目录中。

Java代码在解压ZIP文件时,会使用到ZipEntry类的getName()方法,如果ZIP文件中包含“../”的字符串,该方法返回值里面原样返回,如果没有过滤掉getName()返回值中的“../”字符串,继续解压缩操作,就会在其他目录中创建解压的文件。

0x03风险示例

近期做项目遇到一个从来没见过的小CMS,闲来无事就看着玩玩,所以用Dreamer CMS为例,在Dreamer CMS的风格设置中允许用户通过网络下载新的主题进行更换,主题文件其实是一个ZIP压缩文件。通过直接上传构造的恶意zip文件进行漏洞验证。

源码下载地址https://gitee.com/isoftforce/dreamer\_cms

使用evilzip https://github.com/TheKingOfDuck/evilzip 来构造恶意ZIP文件

上传恶意ZIP文件

系统进行解压

解压到我们设置的目录中,证明存在漏洞

0x04漏洞原因
主题文件其实是一个ZIP压缩包,从服务器下载后进行解压,但是解压时没有过滤entry.getName()返回的字符串中是否有“../”:

0x05漏洞利用

将编译好的jar包部署到虚拟机上并运行

生成恶意jia包并上传,反弹shell成功

  • 发表于 2021-08-23 17:29:59
  • 阅读 ( 7244 )
  • 分类:代码审计

1 条评论

00勇士王子
大佬tql
请先 登录 后评论
请先 登录 后评论
来给你一口甜
来给你一口甜

1 篇文章

站长统计