网站被恶意扫描时的反击魔法之一:用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。

示例:

4MB 的块大小复制 inputfile 到 outputfile:dd if=inputfile of=outputfile bs=4M
‌创建磁盘镜像‌,将 /dev/sda 整个磁盘的内容复制到 SimonSu.img 文件中: dd if=/dev/sda of=SimonSu.img bs=4M
‌从镜像恢复‌,把 SimonSu.img 的内容写回到 /dev/sda 磁盘中:dd if=SimonSu_cn.img of=/dev/sda bs=4M
‌创建一个固定大小的文件‌,创建一个大小为 100MB 的文件 simonsu,内容全部为零:dd if=/dev/zero of=simonsu bs=1M count=100
‌数据备份到网络‌,把本地磁盘 /dev/sda 的内容通过 SSH 复制到远程主机上的 SimonSu.img 文件中:dd if=/dev/sda | ssh user@remotehost ‘dd of=SimonSu_cn.img bs=4M’
‌显示进度‌,加上参数status=progress这将显示复制过程中的进度信息: dd if=/dev/sda of=SimonSu.img bs=4M status=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有些波动而已。

原创文章,作者:AIRF,如若转载,请注明出处:http://www.ai-rf.com/index.php/2024/12/16/%e7%bd%91%e7%ab%99%e8%a2%ab%e6%81%b6%e6%84%8f%e6%89%ab%e6%8f%8f%e6%97%b6%e7%9a%84%e5%8f%8d%e5%87%bb%e9%ad%94%e6%b3%95%e4%b9%8b%e4%b8%80%ef%bc%9a%e7%94%a8gzip%e5%8e%8b%e7%bc%a9%e7%82%b8%e5%bc%b9/

(0)
AIRFAIRF
上一篇 2024年9月26日
下一篇 2024年12月25日

相关推荐

  • Linux Nvidia英伟达GPU驱动安装流程

    GPU驱动安装流程

    Linux 2025年2月14日
  • Linux 上保护 SSH 服务器连接的 8 种方法

    SSH 是一种广泛使用的协议,用于安全地访问 Linux 服务器。大多数用户使用默认设置的 SSH 连接来连接到远程服务器。但是,不安全的默认配置也会带来各种安全风险。 具有开放 …

    Linux 2023年11月20日
  • linux系统重启网卡后网络不通(NetworkManager篇)

    一.故障现象 RHEL7.6系统,使用nmcli绑定双网卡后,再使用以下命令重启network服务后主机网络异常,导致无法通过ssh远程登录系统。 # systemctl rest…

    Linux 2021年11月16日
  • 运维人员必须知道的10个系统进程

    前言 在日常运维工作中,经常会看到一些奇怪的系统进程占用资源比较高,但是又不敢随意的Kill这些进程 而这些系统级的内核进程都是会用中括号括起来的,它们会执行一些系统的辅助功能(如…

    2023年12月16日
  • Linux 系列基础教程(一)

    Linux 是一种自由和开放源码的类 UNIX 操作系统。 Linux 英文解释为 Linux is not Unix。 Linux 是在 1991 由林纳斯·托瓦兹在赫尔辛基大学…

    2022年9月25日
  • Linux Polkit 权限提升漏洞风险

    描述 在 polkit 的 pkexec 实用程序中发现了一个本地权限提升漏洞。pkexec 应用程序是一个 setuid 工具,旨在允许非特权用户根据预定义的策略以特权用户身份运…

    2022年1月28日
  • 服务器IO读写/下载测速脚本SuperBench

    前言 有的朋友想测试一下自己的服务器硬盘读写速度及各地到自己服务器的网速,所以就诞生了这款脚本SuperBench,这款脚本原作者已停止更新,此脚本为修复版,支持Centos8 介…

    Linux 2022年12月2日
  • 麒麟系统Ping报错:未知的名称或服务

    前言 在/etc/hosts里添加了集群服务器的主机名+IP,但是ping主机名提示:未知的名称或服务 ping域名和其他的IP都可以正常返回 处理步骤 修改/etc/nsswit…

    2024年6月25日
  • uefi和legacy的区别有哪些

    我也是因为这两天安装Windows系统时,硬盘大于4T且默认安装使用的MBR模式,导致RAID的4T空间只能分出2T的空间,最后把服务器模式更改为UEFI,并且需要把U盘的格式从N…

    2023年3月7日
  • LVM 缩减 / 根目录导致的开机错误

    前景描述 给服务器lv_var扩容,没空间扩容,于是将lv_root由200G缩小至100G,几分钟后,服务器告警,ping状态变为停止,于是登陆服务器管理口远程查看 报错过程 发…

    Linux 2022年9月25日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注