当Python遇到zip解压炸弹,防护不到位让你泪流满面!

压缩炸弹(zipbomb)制作(附演示) 最近看到资料有说到ZIP炸弹,主要在存在上传功能且对上传文件有解压动作的地方,如果校验不严,可能导致压缩炸弹,导致消耗CPU导致宕机 1、生成ZIP炸弹: https://github.com/CreeperKong/zipbomb-generator python3 zipbomb.py --mode=quoted_overlap --num-files=250 --compressed-size=21179 > zbsm.zip –num-files :压缩包包含的文件数量 –compresse 阅读详情
zip解压炸弹

在文章的开头,让我们先来介绍一下zip解压炸弹是个什么妖怪!

解压炸弹是指解压缩后能够产生巨大的数据量的可疑压缩文件!默认设置是文件扫描中产生500MB以上解压数据的是“解压炸弹”,实时监控中是100MB,邮件监控是30MB。
这样的压缩文件解压缩可能对解压程序造成严重负担或崩溃(可能用来攻击压缩软件以及占用大量电脑资源,或者杀毒软件的解压缩功能)。
解压炸弹内,还可能存在病毒,解压中会自启动窃取用户信息

如何制作解压炸弹

** 42.zip **是很有名的zip炸弹。一个42KB的文件,解压完其实是个4.5PB的“炸弹”。zip炸弹文件中有大量刻意重复的数据,这种重复数据在压缩的时候是可以被丢弃的,这也就是压缩后的文件其实并不大的原因。


42.zip

这一百多万个最终文件,每个大小为 4.3 GB 。
因此整个解压过程结束以后,会得到 1048576 * 4.6 GB = 4508876.8 GB
也就是 4508876.8 ÷ 1024 ÷ 1024 = 4.5 PB
这需要特殊的压缩算法和工具,但我们可以通过Python做一个简单的zip解压炸弹:

# -*- coding: utf-8 -*-
# @微信号   : King_Uranus
# @公众号    : 清风Python
# @GitHub   : https://github.com/BreezePython
# @Date     : 2020/09/08 23:30:33
# @File     : zip_boom.py
import os

def make_boom(file_path, file_num, string_len):
    if not os.path.exists(file_path):
        os.mkdir(file_path)
    os.chdir(file_path)
    for i in range(file_num):
        with open('boom%d.txt' % i, 'w',encoding='utf-8') as f:
            f.write('Boom' * string_len)

make_boom('zip_boom', 1000, 1000 * 1000)

我们快速创建1000个boom文件,每个文件中写入了一百万个boom,制作出了一个3.72GB的文件夹,然后只用7z工具的极限压缩效果,最终得到的zip文件只有4.8MB。


7z极限压缩

压缩效果
开始捣乱

我们自己制作的zip解压炸弹准备完毕,现在我们要找地方去黑别人的服务器了。找谁呢?刚好最近报了一个网易云课堂的Java微专业,他们每次提交打压的时候都是上传zip文件,然后老师获取到文件后解压进行批改,如图:


开始上传

上传成功

现在只要我提交附件,就可以静等批改作业的老师,把我按在地上摩擦了。(当然我肯定不会提交的...)这么大的一个网站,居然都没有对zip解压炸弹进行上传检查,可见大家日常开发过程中,存在多么大的安全隐患啊!

常规校验

正如刚才拿网易云课堂进行的上传演示,日常开发中我们对压缩文件的校验,主要分为类型、大小的校验。
比如我们Flask开发时,会通过flask_wtf校验文件类型:

from flask_wtf.file import FileField, \
    FileRequired, FileAllowed
allow_type = ['zip', 'rar', '7z']

class UploadForm(FlaskForm):
    zip_file = FileField('请上传文件:',
                         validators=[FileRequired(),
                         FileAllowed(allow_type)])
    submit = SubmitField()

同样的,会通过设置Flask最大文本长度对上传文件的大小进行校验

from flask import Flask
app = Flask(__name__)
app.config['SECRET_KEY'] = 'Breeze Python'
app.config['UPLOAD_PATH'] = os.path.join(app.root_path, 'uploads')
app.config['MAX_CONTENT_LENGTH'] = 30 * 1024 * 1024  # 30Mb

或者在文件读写过程中,通过os.path.getsize(filePath)来校验文件大小。
但如果你只做了如上方式,那么恭喜你一大波zip解压炸弹正向你赶来...

正确的方式

那么,我们可以通过什么方式来对zip解压炸弹进行预防呢?其实很简单:

  1. 文件数量
  2. 动态解析文件总大小

先上代码看看:

# -*- coding: utf-8 -*-
# @微信号   : King_Uranus
# @公众号    : 清风Python
# @GitHub   : https://github.com/BreezePython
# @Date     : 2020/09/08 23:30:33
# @File     : zip_boom.py
import zipfile
import os

def unzip(filename: str):
    # 限制最大文件数100
    max_file_num = 100
    # 设置解压内容最大值(一般平均最大的压缩率20,再高就很可能是异常文件了!)
    max_file_size = 1024 * 1024 * 100 * 20
    total_size = 0
    to_zip_file = zipfile.ZipFile(filename)
    dirname = filename.replace('.zip', '')
    # 校验文件总数量
    if len(to_zip_file.filelist) > max_file_num:
        raise ValueError("压缩文件的数量超过了上限")
    # 校验解压文件内容最大值
    for file in to_zip_file.filelist:
        total_size += file.file_size
        if total_size > max_file_size:
            raise IOError("压缩包内容异常")
    # 判断文件夹重复则退出
    if os.path.exists(dirname):
        print(f'{dirname} dir has already existed')
        return -1
    else:
        # 创建文件夹,并解压
        os.mkdir(dirname)
        to_zip_file.extractall(dirname)
        to_zip_file.close()

unzip('zip_boom.zip')

比如刚才的网易云课堂,学生做的解题答案,一个类加几个依赖文件了不起了。所以我们通过设置压缩包最大解压文件数进行检测。
我们再设置原始文件的最大内存上限(一般平均最大的压缩率不会超过20,再高就很可能是异常文件了!),起到二次校验的作用,最终达到zip解压炸弹的安全防护。
日常开发过程中,软件的安全、可信要时刻放在首要位置。不然你今天偷的懒,就是你明天流的泪啊!

The End

期待你关注我的公众号清风Python,如果你觉得不错,希望能动动手指转发给你身边的朋友们。
我的github地址:https://github.com/BreezePython

惊爆:当Python代码遇到zip解压炸弹,未做防护的你后悔莫及! zip解压炸弹 在文章的开头,让我们先来介绍一下zip解压炸弹是个 什么妖怪! 解压炸弹是指解压缩后能够产生巨大的数据量的可疑压缩文件!默认设置是文件扫描中产生500MB以上解压数据的是“解压炸弹”,实时监控中是100MB,邮件监控是30MB。这样的压缩文件解压缩可能对解压程序造成严重负担或崩溃(可能用来攻击压缩软件以及占用大量电脑资源,或者杀毒软件的解压缩功能)。解压炸弹内,还可能存在病毒,解压中会自启动窃取用户信息 如何制作解压炸弹 42.zip是很有名的zip炸弹。一个42KB的文件,... 阅读详情

相关推荐

从42.zip到实战:用Python生成Zip炸弹,测试你的JavaWeb应用抗压性

本文探讨了如何利用Python生成Zip炸弹来测试JavaWeb应用的抗压性,揭示了文件解压功能可能带来的安全风险。通过工程化测试方法,包括资源耗尽测试、协议合规测试和混合攻击测试,帮助开发者验证系统的防护机制。文章还介绍了Python工具链的深度定制和自动化测试框架集成,为JavaWeb应用安全提供实用解决方案。

xieye114的专栏 281

42.zip

最近看linux的解压缩,无意间了解到了一个和压缩率相关的小故事——42.zip 一般我们使用压缩工具的时候,都会用到无损压缩技术,对于无损压缩,算法非常重要,不同的算法实现 的压缩率和速度有很大差别,主流的算法压缩率都在30%-40%之间,而这里要说的42.zip,它的压缩率可 以说是相当恐怖了,这里顺便贴上这个文件的下载地址:42.zip。 它的原始大小就和它的文件名一样:42kb,但...

weixin_30783913的博客 6995

跨平台文件解压工具Unisuzip:从核心库到原生应用的全栈实现

文件压缩与解压是数据存储和传输中的基础技术,其核心原理是通过特定算法减少文件体积,便于存储和网络共享。从早期的ZIP、TAR到后来的RAR、7z,不同格式各有其技术特点与应用场景。在当今多设备协同的背景下,跨平台文件解压成为提升工作效率的刚需,它要求工具能无缝兼容Windows、macOS、Linux乃至移动端系统,并支持广泛的压缩格式。实现这一目标需要采用“核心库+平台外壳”的架构,例如使用Rust或C++编写高性能、安全的核心解压库,再为各平台构建原生应用外壳。这不仅解决了格式支持碎片化和平台体验割裂的

靓靓软件工作室 493

ZBLG:非递归zipbomb炸弹,比例为28000000:1

分享一个有趣的工具 ZBLG:非递归zipbomb炸弹,比例为28000000:1

北观止的博客 4335

Google浏览器 chrome_42.zip

Google浏览器 chrome老版本 42.0.2311.152_chrome64_stable_windows_installer.exe 离线安装包,亲测可用。

apache-tomcat-8.5.42.zip

这个版本是目前我们用的相对稳定的一个版本,里面优化了好多东西,官网也可以下载,为了方便我这里就单独上传一个自己配置;下载使用时记得修改下startup.bat文件,里面我单独指定了tomcat路径和jdk版本。

ZIP炸弹防御实战:Linux安全解压与工具选型指南

压缩包处理是运维开发中的高频操作,但一个看似微小的ZIP文件可能隐藏着ZIP炸弹、路径穿越等致命威胁。现代压缩算法对重复数据的压缩率极高,可让数十GB内容缩成几MB,解压时瞬间耗尽磁盘空间或inode。如何平衡效率与安全?关键在于建立“解压前检查、解压中限制、解压后审计”的防护链路。本文从Linux实际环境出发,对比unzip、7zip替代方案及Python zipfile的适用边界,并给出容器沙箱、rlimit等隔离手段,帮助你在处理外部交付包时避免系统被拖垮。

weixin_42533120的博客 113

资料汇总-张大头42步进.zip

资料汇总——张大头42步进

Python高效解压ZIP文件方案与安全实践

文件压缩是数据存储和传输中的基础技术,ZIP作为最通用的压缩格式,其处理效率直接影响系统性能。Python标准库zipfile模块提供了原生的ZIP处理能力,通过编码转换解决中文乱码问题,配合多线程技术可实现高效批量解压。在服务器日志处理、自动化运维等场景中,该方案相比图形界面操作效率提升显著,同时通过文件大小校验、权限控制等机制保障安全性。针对大文件处理的ZIP64支持和内存优化技巧,使该方案能够稳定处理生产环境中的海量压缩文件。

weixin_33883104的博客 232

hp g42.zip

惠普G42图纸与点位图

载波同步技术(一):BPSK的Costas Loop 载波同步

Author:McCrocodile 2010/11/04          载波的提取在相干解调中往往比较重要,根据信号中是否包含载频分量,载波同步一般也可以分为两种方法。包含载频分量的可以采用窄带滤波或者基本的锁相环环路来实现,不包含的则比较麻烦需要采用特殊的环路实现载波的同步。这里介绍的BPSK的载波恢复就属于后面一种。 对于不包含载频分量的信号载波同步一般有:同相-正交环(就是常说的Costas环)、判决反馈环(几乎可以适用所有调制方式)、同相-正交环衍生环(QPSK松尾环、N相同相-正交环)。

McCrocodile Blog 1万+

IronClaw 纯函数文档文本提取层(ironclaw_extractors):格式感知、防解压炸弹的字节到纯文本管道

本文围绕 IronClaw Agent OS 中的 `ironclaw_extractors` 叶子 crate 展开,讲解它如何在完全不接触 I/O、不关心字节来源的前提下,把 PDF、Office Open XML(Word/PPT/Excel)、旧版 Office、RTF 与 UTF-8 文本/代码字节统一转换为纯文本,并给出 `Text` / `Empty` / `Failed` 的三态分

gitblog_00877的博客 374

Unity透明视频播放全攻略:AVPro Video插件实战与避坑指南

在游戏开发与交互式内容创作中,视频播放是常见的多媒体需求。其核心原理在于通过解码器将压缩的视频数据流转换为连续的图像帧,再经由图形API渲染至屏幕。这项技术的价值在于能够高效地呈现动态视觉内容,广泛应用于游戏过场动画、UI特效、AR/VR虚拟展示等场景。当需求进阶到需要背景透明的视频时,技术实现复杂度显著增加,这涉及到对视频Alpha通道的编码、解码与渲染管线的特殊处理。本文聚焦于Unity引擎中实现高质量透明视频播放的工程实践,深入解析了AVPro Video这一专业插件如何解决原生VideoPlayer

weixin_30368981的博客 376

Python zipfile 模块权威指南:创建、读写、压缩与安全解压 ZIP 归档(CPython 源码级解析)

本文基于 CPython 标准库 [zipfile 官方文档](https://link.gitcode.com/i/83f3302d2ecd3dc4339746f0e68fcc40) 展开,系统讲解使用 `zipfile` 模块**创建、读取、写入、追加、列出和校验 ZIP 归档**的全部能力。你将掌握 `ZipFile`、`Path`、`PyZipFile`、`ZipInfo` 四大核心类的完

gitblog_00019的博客 547

【系统安全】Windows内核权限提升漏洞(CVE-2024-30088)

CVE-2024-30088是Windows内核提权漏洞,由越南安全研究员@Bùi Quang Hiếu详细分析。漏洞发生在AuthzBasepCopyoutInternalSecurityAttributes函数中,该函数在复制SecurityAttributesList时会使用用户提供的指针,在校验及复制期间存在时间差,导致存在TOCTOU漏洞。

李同學AI安全 1325

HotSpot G1 GC 的分区记账、SATB 并发标记与停顿目标调优解析

线上GC毛刺该调停顿目标、加大新生代还是换收集器?本文从HotSpot G1的设计出发,梳理分区与巨型对象、卡表与记忆集、写屏障与细化线程、停顿预测、SATB并发标记、自适应IHOP、混合回收规则及Full GC兜底,并注明JDK8至JDK27的版本差异。文中在JDK8与JDK17上实测:停顿目标从200ms降到20ms,伊甸区缩小四成、P99下降但仍超目标;巨型对象会反复触发又撤销并发标记;JDK17并行Full GC平均停顿约为JDK8的三成。最后给出日志解读、参数清单、调优流程与选型。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 170万+

解析Excel遭遇Zip炸弹:从报错到安全读取的实战指南

本文详细解析了Excel文件被误判为Zip炸弹的常见原因及解决方案,重点介绍了通过调整ZipSecureFile.setMinInflateRatio参数安全读取Excel文件的方法。文章涵盖技术原理、应急处理方案和工程化实践,帮助开发者有效应对压缩比异常导致的报错问题,确保系统稳定运行。

weixin_30911451的博客 204

手把手教你学Simulink--进阶电机控制场景实例:基于Simulink的直流电机双闭环调速系统抗负载扰动仿真

摘要:本文基于Simulink平台构建直流电机双闭环调速系统,重点研究其在工业传送带场景下的抗负载扰动性能。系统采用转速外环(稳速)和电流内环(限流)的嵌套结构,通过工程法整定PI参数,实现了转速跌落<10%、恢复时间<0.5s的优异抗扰性能。仿真结果表明,相比单闭环系统,双闭环控制使转速跌落率降低47%,恢复时间缩短75%。文中详细介绍了数学模型建立、Simulink模块实现及参数优化方法,并提供了完整代码和模型文件,为电机控制系统设计提供实用参考。

MHD0815的博客 179

Java压缩解压工具库深度对比与实战:从Commons Compress到Zip4j

文件压缩与解压是数据处理和传输中的基础技术,其核心原理是通过特定算法减少数据体积,以节省存储空间和网络带宽。在Java生态中,这一技术价值体现在高效处理日志归档、应用资源分发和用户文件上传等高频场景。面对ZIP、GZIP、TAR等多种格式以及加密、大文件等复杂需求,开发者需根据具体场景选择合适的工具库。本文聚焦于Apache Commons Compress、Zip4j等主流库的深度对比,通过决策树模型清晰呈现选型逻辑,并针对字符编码、资源管理、ZIP64支持等关键细节提供实战解决方案,帮助开发者规避乱码、

weixin_34413802的博客 310

内容审核与文本安全技术综述:检测、过滤与对齐

检测质量高度依赖数据。毒性/仇恨/冒犯语言检测领域形成了一批经典数据集,但它们的标签体系差异很大:例如 OLID(OffensEval)强调“是否冒犯—冒犯类型—目标对象”三层结构;HateXplain 在“hate/offensive/normal”三分类之外,还提供目标群体与人类标注的 rationale span;RealToxicityPrompts 则不做离散标签,而是用毒性分数来研究“模型续写时的毒性退化”。ACL 汇编。

nmdbbzcl的博客 1371

Open3D——点云构建Delaunay三角网【2026最新版】

点云构建Delaunay三角网

点云侠的博客 8367

watermarks-remover 安全策略解读:漏洞上报流程、攻击面与源码级防护实现

本篇文章围绕开源仓库 watermarks-remover 的官方安全策略文档([SECURITY.md](https://link.gitcode.com/i/193080e6772e200539e3814c2e7efc20))展开,系统梳理该项目的受支持版本范围、漏洞私密上报流程与响应预期,并逐一拆解策略文档列出的重点攻击面——路径穿越与不安全写入、可选工具的命令注入、畸形文件导致的解析器崩溃

gitblog_00779的博客 325

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Python多格式压缩解压工具实战:支持ZIP、7Z、RAR等主流格式

文件压缩技术通过消除数据冗余,以更小的存储空间表示原始信息,其核心分为无损压缩和有损压缩两大类。在无损压缩领域,DEFLATE、LZMA和Zstandard等算法通过不同原理在压缩率与速度间取得平衡,形成了ZIP、7Z等主流格式。这些技术对开发者而言具有重要工程价值,能显著提升代码分发、日志备份和数据传输的效率。在实际应用场景中,面对ZIPX、ZPAQ、7Z、RAR等多种格式的批量处理与密码保护需求,一个统一的多格式解决方案至关重要。本文通过构建一个基于Python的命令行工具,深入解析如何利用py7zr、

weixin_28739079的博客 312

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Python 用 zipfile 读写压缩包实战:流式解压不爆内存、防 Zip Slip 路径穿越攻击

处理用户上传的 zip、批量打包导出文件、解压第三方数据包——zipfile是绕不开的标准库。但两个坑几乎人人踩过:一个是read()一把把整个大文件读进内存,几百 MB 的压缩项直接把服务干 OOM;另一个更危险,直接用extractall解压不可信的 zip,一个构造好的压缩包能把文件写到/etc/或者你的项目源码目录里,这就是 Zip Slip 路径穿越漏洞。这篇把zipfile的正确姿势讲清楚:怎么读、怎么写、怎么流式处理不爆内存,以及解压不可信压缩包时必须做的安全防护。

weixin_42662753的博客 135

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 本想让程序执行加速,却走上了bug翻车之路
下一篇: 我用Python写了一个成语接龙的游戏,并把它部署到了手机上
清风Python
博客等级 码龄7年 406粉丝 267原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值