网站被恶意扫描时的反击魔法之一:用gzip压缩炸弹给恶意请求埋地雷
最近查看网站访问日志,发现有不少恶意扫描和采集本站的请求,虽然被我的防护规则阻挡了,但看着这些源源不断的恶意扫描器的请求,光抵抗不反击,心里头还是有火的。我们的伟大领袖说过:打得一拳开,免得百拳来。为了贯彻领袖的指导思想,决定进行适当的反击还是需要的。冷静下来,搞了一个用魔法打败魔法的方法:用gzip压缩炸弹给恶意请求埋地雷。
一、先来说说文件压缩炸弹
文件压缩炸弹其实十几年前我就遇到过,那时还是一脸懵圈的时候,只知道某些特殊的压缩包解压后的文件大小是个越级恐怖的大,才知道有个东西叫文件压缩炸弹,是通过打包压缩一些非常多的空文件或小文件,然后在解压时释放出海量的小文件,并大量占用磁盘空间。
二、再来说说gzip文件的特点
其它场景不说,只在浏览器请求时(也包含网络爬虫等类似场景下),服务端是可以发送压缩后的gzip文件,浏览器拿到gzip文件后会进行解压处理。因此,借用此机制,就可以发挥一些想象空间了。
三、linux中的dd命令
在 Unix 和 Linux 系统中,dd 是一个功能强大的命令行工具,可以进行低级别的数据复制、创建磁盘镜像、备份磁盘等任务。这里也列一下 dd 命令的常见用法和选项:
基本语法:dd if=<输入文件> of=<输出文件> [其他选项]
常用选项
if=<文件>:指定输入文件,默认为标准输入(stdin)。
of=<文件>:指定输出文件,默认为标准输出(stdout)。
bs=<字节数>:指定读写操作的字节数,即块大小(block size)。
count=<块数>:指定要复制的块数。
status=<级别>:显示命令的状态信息,level 可以是 none、noxfer 或 progress。
示例:
dd 命令非常强大,但也非常危险,如果不小心使用可能会导致数据丢失或覆盖。在执行涉及磁盘的操作时,一定要确认目标设备和文件路径,避免误操作。可以先使用 lsblk 或 fdisk -l 等命令查看磁盘设备信息,确保选择正确的设备。通过掌握 dd 命令的这些基本用法和选项,你可以更灵活地进行数据复制、备份和恢复等操作。
四、回到本往篇主题,如何在网站被恶意扫描时,用魔法打败魔法。方法就是给恶意扫描器进行埋地雷:
4.1、生成一个超级大的gzip文件,可参考上面的示例生成。如生成了一个1M大小的SimonsSu.cn_backup.gzip的,解压后为100G的gzip文件;
4.2、在系统目录下新建一个PHP文件,如bomp_no_open.php,内容为如下。
header('Content-Encoding: gzip');//设置文件头
echo file_get_contents('SimonsSu_backup.gzip');//读取刚才生成的GZIP文件,这里要注意目录是否同一级,若不是,指定目录
4.3、在Nginx的对应站点配置中,可以添加访问请求的http_user_agent中包含恶意标识的(并非一定要用user aget,用找到恶意IP或其它标识也一样效果,只要相应添加就行了)
location / {
#UA BOMB
if ($http_user_agent ~* "(恶意user-agent1|恶意user-agent2)") {
rewrite ^/.* /bomp_no_open.php last;
}
}
此时恶意的扫描或者请求,就会重定向到这个gzip包,然后就解这个gzip的包为100G的数据,基本就能干崩溃扫描器的请求。如果觉得100G不够大,可以生成几个T的gzip也行~~~
当然了,以上思路也不全是我的想法,也根据网上的一些方式进行完善调整的。
五、我为何称这个方法为埋地雷呢。因为炸弹是主动触发的,而我这个用gzip压缩成小包,释放大包的方法是恶意攻击我时,才会被动触发的。
同时,这个方法能不用就不要用,避免误伤。误伤也没事哈~~~~~~最多浏览器(不是用浏览器访问的都不是正经的)的当前页面崩溃掉,本机的CPU有些波动而已。