这个问题有关zip炸弹的信息自然将我带到了维基百科页面关于这个话题。这篇文章提到了一个45.1kb的zip文件的例子,它可以解压缩到1.3EB。
创建这样一个文件首先要用到的原则/技术是什么?我实际上并不想这样做,我更感兴趣的是对所涉及的概念的简化的“如何工作”的解释。
附注:
这篇文章提到了9层zip文件,所以这不是一个简单的压缩一堆零的例子。为什么是9个文件,为什么每个文件有10个文件?
发布于 2009-09-22 12:21:40
引用自维基百科页面:
Zip炸弹的一个例子是文件45.1.zip,其是45.1千字节的压缩数据,
包含9层嵌套的zip文件,每组10个,每个底层归档文件包含一个1.30 10的文件
总共1.30艾字节的未压缩数据。
因此,您所需要的只是一个1.3 is的充满零的文件,将其压缩为ZIP文件,复制10个副本,将这些文件打包为ZIP文件,然后重复此过程9次。
这样,你得到一个文件,当完全解压时,它会产生一个荒谬的数据量,而不需要你从这个数量开始。
此外,嵌套的归档文件使像病毒扫描程序(这些“炸弹”的主要目标)这样的程序变得更难聪明,并拒绝解压“太大”的归档文件,因为直到最后一层数据总量不是那么多,你才能“看到”最低层的文件有多大,直到你达到那个级别,并且每个单独的文件都不“太大”-只有巨大的数字才是有问题的。
发布于 2009-09-22 12:07:09
创建一个1.3艾字节的零文件。
右键单击>发送到压缩(压缩)文件夹。
发布于 2009-09-22 12:30:27
在Linux下,使用以下命令可以轻松完成此操作:
dd if=/dev/zero bs=1024 count=10000 | zip zipbomb.zip -
将count替换为要压缩的KB数。上面的例子创建了一个10MiB的zip炸弹(根本不是一个炸弹,但它展示了这个过程)。
您不需要硬盘空间来存储所有未压缩的数据。
https://stackoverflow.com/questions/1459673
复制相似问题