zip炸弹简介(附件),以及用Gzip炸弹对抗爬虫恶意扫描与入侵尝试

刚开通公网IP的服务器或者说刚开通的云服务器,就像新搬进小区的住户,还没来得及装饰(网页什么都没放,我设置返回444),立马就发现有人不停地在门口转悠,使用各种扫描工具24小时不间断地探测服务器。更烦人的是,那些脚本小子们,孜孜不倦地尝试访问各种可能存在漏洞的路径,妄想找到突破口黑进来。还有可能网站被海量爬虫压到宕机,这不是我们不想看到的场景。

图片[1]-zip炸弹简介(附件),以及用Gzip炸弹对抗爬虫恶意扫描与入侵尝试-王先生笔记

面对这种不识趣的行为,是时候给他们一点小小的惊喜了。

ZIP炸弹:数字世界的“潘多拉魔盒”

zip炸弹其实是算法惹的祸,无损压缩的有趣点就是重复

4.5PB压缩包(42kb),你可能听说过传说中的ZIP炸弹——那个著名的42KB压缩包,解压后竟然变成4.5PB的庞然大物。原理很简单:利用无损压缩算法的特性,通过多层递归嵌套,让解压过程像滚雪球一样不断膨胀。具体来说,42.zip文件初始只有42KB,解压密码为42,但解压后会得到16个压缩包,每个包又包含16个更小的包,如此反复5次,最终产生1048576个4.3GB的文件,总体积达到惊人的4.5PB。貌似是制作者的下载介绍平台:https://unforgettable.dk/

无限大小压缩包(28kb)还有droste.zip,这个文件名灵感应该取自德罗斯特效应 ( Droste Effect ),是指一张图片的部分与整张图片相同,无限循环。就好比两部手机,手机A开启屏幕镜像和相机,手机B接收手机A的屏幕镜像,手机A拍摄手机B的屏幕,就发现手机B无限循环展示。droste.zip本体只有28kb,但可以无限递归解压快速膨胀,解压本体,直到塞满你的硬盘,也是非常强大了,算法大概就是在引号里重复这句话 “ 在引号里重复这句话 ”。貌似是制作者的下载介绍平台:https://alf.nu/ZipQuine

1000YB压缩包(122kb)前段时间,有人在网上宣称自己制作了世界上最大的ZIP炸弹,容量达到1148857344 Quettabytes(1 Quettabyte = 1,000,000,000,000,000,000,000,000,000,000 bytes,后面有30个零)。也就是最大单位YB,1000尧字节(yottabyte)下载:https://twsh.lanzouu.com/iaSw9376uwih

图片[2]-zip炸弹简介(附件),以及用Gzip炸弹对抗爬虫恶意扫描与入侵尝试-王先生笔记

2048YB压缩包(266kb)有人制作了2048YB压缩包,这是我目前见过的最大压缩包,这个数字之大连理解起来都困难。这是我复刻的地址:https://github.com/twsh0305/ZIPBOMB

名称与前一个单位换算容量比喻(基于日常数据场景)
比特 bit (b)1字节(B)= 8比特(b)1 个比特 = 1 个 “二进制开关”,仅能表示 “0” 或 “1”—— 相当于1 个英文字母的 1/8(1 个字母需 8 比特存储)。
字节 B(基础单位,1024倍为下一级)1 个字节 = 8 个比特,刚好能存储1 个英文字母(如 “A”“b”),或 1 个数字(如 “5”)。
千字节 KB1 KB = 1024 B1 KB ≈ 1024 字节,约等于1 段 500 字的纯文本段落(中文每字约 2 字节,500 字≈1000 字节),或 1 张极小的黑白像素图。
兆字节 MB1 MB = 1024 KB1 MB ≈ 1024 KB,相当于:
- 1 首普通质量的 MP3 音乐(约 3-5 MB,1 MB≈1/4 首短歌);
- 2-3 张手机拍摄的普通 jpg 照片(单张约 300-500 KB);
- 1 本 50 万字的纯文本电子书(约 1 MB,文字压缩后更小)。
吉字节 GB1 GB = 1024 MB1 GB ≈ 1024 MB,相当于:
- 1 部高清电影(1080P 画质,约 1.5-5 GB,1 GB≈1/3 部短电影);
- 200-300 首高品质 MP3 音乐(单首约 3-5 MB);
- 1 台手机的基础 “可用空间”(早期手机多为 16/32 GB,1 GB≈1 个 APP + 缓存的占用);
- 1000 张以上手机高清照片(按单张 1 MB 算)。
太字节 TB1 TB = 1024 GB1 TB ≈ 1024 GB,相当于:
- 200-300 部 1080P 高清电影(按单部 4 GB 算),够连续播放 100 小时以上;
- 1 个家庭的 “全家数据库”:包含 10 年的照片(约 5 万张)、所有视频(孩子成长记录、旅行视频)、音乐库(数千首歌)和各类文档,通常 1-2 TB 可装下;
- 1 块主流电脑硬盘的容量(目前笔记本 / 台式机硬盘多为 1-4 TB)。
拍字节 PB1 PB = 1024 TB1 PB ≈ 1024 TB,相当于:
- 1 个中小型视频平台的 “月度存储量”(如某地方短视频 APP,每天新增 10 万条 100 MB 的短视频,1 个月≈300 TB,1 PB 可存 3 个月以上);
- 1 座省级图书馆的 “全数字化馆藏”:包含所有纸质书扫描件(百万册级)、古籍影像、学术论文等,1 PB 基本能覆盖核心馆藏。
艾字节 EB1 EB = 1024 PB1 EB ≈ 1024 PB,相当于:
- 1 个大型云计算公司的 “单区域数据中心存储量”(如阿里云 / AWS 某区域,服务数百万企业用户的数据库、备份文件、云存储数据,1 EB 可支撑该区域核心业务);
- 全球 1 年的 “社交媒体照片总上传量”(估算:全球每天约上传 10 亿张照片,单张按 2 MB 算,1 年≈7.3 PB,1 EB≈137 年的总上传量)。
泽字节 ZB1 ZB = 1024 EB1 ZB ≈ 1024 EB,相当于:
- 全球 “互联网核心数据总量”(2024 年全球互联网数据量约 100-200 ZB,1 ZB≈全球 1-2% 的互联网总数据);
- 1 个国家级 “全民健康数据库”:存储 14 亿人的电子病历、体检报告、基因数据(每人数据约 100 GB,14 亿人≈14 ZB,1 ZB≈7% 的全国数据)。
尧字节 YB1 YB = 1024 ZB1 YB ≈ 1024 ZB,相当于:
- 全球 “未来 10 年的互联网数据增量”(按当前数据增长速度,每年约增 20-30 ZB,1 YB≈30-50 年的增量);
- 人类 “全历史数字化数据总和”:包含所有已归档的文献、影像、科研数据、互联网存档(如 Wayback Machine),目前总量远不足 1 YB,1 YB 是未来数十年才可能达到的 “全球级超大规模存储”。

虽然各大安全软件已经会识别zip炸弹,但仍然不可轻视,因为zip的各种属性可以被篡改,安全软件可能识别不到的。曾经,有人利用zip炸弹,让安全软件清理zip炸弹结果过程中,去入侵系统等操作,所以当初的危害还是比较大的。

实战:制作温和版Gzip炸弹

虽然上述的ZIP炸弹威力巨大,但我们并不需要那么极端。一个1GB的Gzip炸弹足以让恶意扫描者的内存跑到2GB,多次访问至少会导致对方杀后台、宕机或卡顿,用于对抗恶意扫描恶意爬虫防护足够了。

生成Gzip炸弹

Pythen版更好用,可自定义大小

创建一个放置炸弹的目录

mkdir -p /www/wwwroot/default.com/gzip_bomb/

Linux下用,命令一键生成,生成1GB Gzip压缩包,压缩后是1MB

dd if=/dev/zero bs=1M count=1024 | gzip > /www/wwwroot/default.com/gzip_bomb/bomb.gz

这个命令会创建一个1GB的文件并压缩为gzip格式。dd命令的基本语法:

  • dd:用于拷贝或转换数据
  • if=<文件>:指定输入文件,这里的/dev/zero,是一个会不断生成零字节数据的特殊设备
  • bs=<字节数>:指定块大小,设置块大小为1MB,意味着每次处理1MB数据
  • count=<块数>:指定要复制的块数,处理1024个这样的块,总共生成1GB的零数据

以上为1GB压缩包示例,下方是10GB示例,压缩后是10MB

dd if=/dev/zero bs=1M count=10240 | gzip > /www/wwwroot/default.com/gzip_bomb/bomb.gz

用装有pythen的设备执行以下脚本即可,win11可用,Linux和Mac未测,请大家自测,若无法使用,请评论区反馈

Nginx使用Gzip炸弹

实现默认站点任何访问都返回炸弹,以宝塔为例子

创建网站default.com

图片[3]-zip炸弹简介(附件),以及用Gzip炸弹对抗爬虫恶意扫描与入侵尝试-王先生笔记

设置为默认网站

图片[4]-zip炸弹简介(附件),以及用Gzip炸弹对抗爬虫恶意扫描与入侵尝试-王先生笔记

修改默认网站Nginx配置

    # 将所有访问重定向到/index.html
    # location / {
        # 使用301重定向到/index.html,让用户看到URL变化
    #    return 301 /index.html;
    # }
    # 上下两者是或的关系,只能开一个,取消注释则开启,解释部分不要取消注释
    # 使用rewrite(保持URL不变)
     location / {
         rewrite ^(.*)$ /index.html last;
     }
    
    # 处理/index.html请求,返回gzip炸弹
    location = /index.html {
        # 设置正确的MIME类型
        default_type text/html;
        
        # 关键:声明这是gzip压缩内容
        add_header Content-Encoding gzip;
        
        # 防止MIME类型嗅探
        add_header X-Content-Type-Options nosniff;
        
        # 禁用缓存
        add_header Cache-Control "no-cache, no-store, must-revalidate";
        add_header Pragma "no-cache";
        add_header Expires "0";
        
        # 返回gzip压缩的炸弹文件,把炸弹放在指定位置
        alias /www/wwwroot/default.com/index.html.gz;
        
        # 可选:添加更多伪装头
        add_header Content-Type "text/html; charset=utf-8";
    }
图片[5]-zip炸弹简介(附件),以及用Gzip炸弹对抗爬虫恶意扫描与入侵尝试-王先生笔记

其它网站可以增加nginx判断条件(不要直接用,只是示例,用于正在使用的网站,而不是上面那种啥请求都返回炸弹的)

# 针对常见恶意扫描路径返回zip炸弹
location ~* ^/(目录名|目录名|目录名|目录名|backup|config|database) {
    # 设置正确的MIME类型
    default_type text/html;
    add_header Content-Encoding gzip;
    
    # 禁用缓存
    add_header Cache-Control "no-cache, no-store, must-revalidate";
    add_header Pragma "no-cache";
    add_header Expires "0";
    
    # 返回zip炸弹文件
    alias /www/wwwroot/default.com/index.html.gz;
}

# 针对恶意文件类型请求
location ~* \.(php|asp|aspx|jsp|sh|pl|py|exe|dll)$ {
    # 设置正确的MIME类型
    default_type MIME类型; #默认网页声明,记得改,伪装就行
    add_header Content-Encoding gzip; #记得改,伪装就行
    
    # 禁用缓存
    add_header Cache-Control "no-cache, no-store, must-revalidate";
    add_header Pragma "no-cache";
    add_header Expires "0";
    
    # 返回zip炸弹文件
    alias /www/wwwroot/default.com/index.html.gz;
}

# 针对恶意文件类型请求
location ~* \.(php|asp|aspx|jsp|sh|pl|py|exe|dll)$ {
    # 检查是否在正常目录外请求这些文件,以下是排除,如上面是执行脚本,下面目录就填静态文件目录,如防止PHP脚本被意外上传到媒体目录,被访问执行操作
    if ($uri !~ "^/(目录|目录)/") {
        default_type text/html;
        add_header Content-Encoding gzip;
        add_header Cache-Control "no-cache, no-store, must-revalidate";
        add_header Pragma "no-cache";
        add_header Expires "0";
        alias /www/wwwroot/default.com/index.html.gz;
    }
}

# 针对SQL注入和XSS攻击特征
location ~* "(union.*select|sleep\(|benchmark|exec\(|eval\(|base64_decode|script\s*=|onload\s*=)" {
    default_type text/html;
    add_header Content-Encoding gzip;
    add_header Cache-Control "no-cache, no-store, must-revalidate";
    add_header Pragma "no-cache";
    add_header Expires "0";
    alias /www/wwwroot/default.com/index.html.gz;
}

# 针对扫描工具User-Agent(UA)
if ($http_user_agent ~* "(nmap|sqlmap|w3af|nikto|acunetix|nessus|metasploit)") {
    default_type text/html;
    add_header Content-Encoding gzip;
    add_header Cache-Control "no-cache, no-store, must-revalidate";
    add_header Pragma "no-cache";
    add_header Expires "0";
    alias /www/wwwroot/default.com/index.html.gz;
}

# 正常网站请求继续处理,伪静态等,在其他位置设置过就无需再设置
# location / {
    # 如wordpress:try_files $uri $uri/ /index.php?$args;
# }

# 正常PHP处理 将PHP文件交给PHP-FPM处理
# location ~ \.php$ {
#     include fastcgi_params;
#     fastcgi_pass php-fpm;
#     fastcgi_index index.php;
#     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# }

PHP使用Gzip炸弹

如果使用PHP,可以这样返回Gzip炸弹,你可以参考这个,并且增加某些条件,注意炸弹位置路径,并且可以与nginx互相配合,让PHP告知nginx返回什么,URL也不变,玩法多变,自己思考。

<?php
//声明格式
header('Content-Encoding: gzip');
//返回网站目录中的炸弹
echo file_get_contents('index.html.gz');
?>

其他语言基本都是这个逻辑

效果展示

实际上,5GB的炸弹让浏览器内存占用瞬间飙升到5000MB了,只是我没截到

图片[6]-zip炸弹简介(附件),以及用Gzip炸弹对抗爬虫恶意扫描与入侵尝试-王先生笔记

结语

部分爬虫已经实现识别压缩炸弹,并不会去解压导致他的服务器宕机,所以Gzip炸弹并不是100%成功。

只是歪门邪道罢了,一点儿惩罚对手的小手段,求求你别扫了,我送你个礼物好不好。

原文链接(非王先生笔记发布均为盗版):https://wxsnote.cn/6511.html

评论后可接收该文章的更新邮箱通知
友情赞助

如果你喜欢我的内容,可以赞助我哦!你的一点点心意,是我不断前进的动力!
温馨提示: 本文最后更新于2025-09-30 20:38:39,某些文章具有时效性,若有错误或已失效,请在下方留言或加入QQ群: 399019539 联系群主反馈。注意一些链接无法访问可能是你网络的原因,如Github,并非资源地址失效。
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
相关推荐
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容

王先生笔记