Welcome, guest | Sign In | My Account | Store | Cart

This creates a zip bomb with a programmable recursion depth. It's useful when you want to create a very deep zip archive for testing decompression software, virus scanners and so on. Recursion depth is limited by Python itself, so very high values are probably not going to work. The algorithm could be re-structured to avoid recursion, but I've never needed a nesting depth of more than 900!

Each zip file will get the name stack<n>.zip where <n> is the number of zip files inside each layer. The data file at the core is called needle.txt.

Python, 26 lines
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import os, zipfile, StringIO

def GetZipWith(fname, content):
	fp = StringIO.StringIO()
	zf = zipfile.ZipFile(fp, "a", zipfile.ZIP_DEFLATED, False)
	zf.writestr(fname, content)
	zf.close()
	return fp.getvalue()

def CreateRecursiveZip(stack, fname, content):
	if stack:
		zipname = stack.pop()
		arcname, outer = CreateRecursiveZip(stack, fname, content)
		print "Adding '%s' to zipfile '%s' (%d bytes)" % (arcname, zipname, len(outer))
		return zipname, GetZipWith(zipname, outer)
	else:
		print "Creating '%s'" % fname
		return fname, GetZipWith(fname, content)

if __name__ == "__main__":

	depth = 900
	stack = ["stack%d.zip" % i for i in xrange(1,depth)]
	arcname, out = CreateRecursiveZip(stack, "needle.txt", "my data")
	print "Writing zip bomb to '%s'" % arcname
	file(arcname, "wb").write(out)
Created by Simon Harrison on Tue, 7 Jun 2016 (MIT)
Python recipes (4591)
Simon Harrison's recipes (3)

Required Modules

  • (none specified)

Other Information and Tasks