Я построил настраиваемую тему для сайта клиента и, как я полагаю, продолжает взломать. То, что я нахожу, – это куча табельного кода в верхней части каждого файла темы и плагинов. Все это супер-сжато и не очень легко читать, но оно просто похоже на кучу чисел. Он ничего не выводит на сайт. Единственная причина, по которой я знаю, что это происходит, состоит в том, что добавление кода в плагины ломает плагин, и WP автоматически отключает его. Это произошло примерно 5-6 раз.
После второго раза я понял, что настройка по умолчанию не разрезала его. Поэтому я установил WordFence, и в течение месяца он работал отлично. WordFence начал рисовать картину того, сколько атак было предпринято против сайта в любой момент. Это безумие. Я также изменил все пароли (пользователи, FTP и т. Д.), Изменил префикс таблицы, заблокировал wp-admin и использовал другой URL-адрес для доступа к тире и выполнял почти каждый отдельный элемент в статье Hardening WordPress . Также посоветовал несколько сообщений здесь.
Все в порядке, хотя кажется. После целого месяца успеха плагин и мои меры перестали работать. Бесполезные строки начали появляться в верхней части файлов тем. Но, как ни странно, не файлы плагинов. Я прояснил ситуацию и попробовал пакет безопасности iThemes вместо WordFence. НЕА! Проснулся, чтобы найти сайт был взломан снова.
В дополнение к вышесказанному я также сузил список моих плагинов на несколько доверенных нескольких, которые оказались безвредными на других сайтах: «Исключительные и расширенные пользовательские поля». Я волнуюсь, что каким-то образом я что-то прикрутил в своей теме, но я закодировал дюжину или около того и никогда не имел этой проблемы ни на одном из этих сайтов вообще.
Я не понимаю, что делать. Я чувствую, что если бы я понял, что «взломать», я бы смог лучше бороться с ним, но я в недоумении. Эти вещи очень сложны для Google. Любые рекомендации будут оценены.
Вот ссылка на введенный код
Я однажды нашел эту проблему на сервере, и я, наконец, создал сценарий bash, который ищет этот код, удаляя только верхнюю строку из каждого зараженного PHP-файла. Он решил проблему.
Я поставил здесь, чтобы вы могли использовать его, чтобы избавиться от вредоносного кода, но не забудьте попытаться найти, как был взломан сервер, чтобы вы снова не взломали.
Это довольно простое использование в оболочке bash:
Проверьте, есть ли зараженные файлы
./remove_malware.sh /var/www/wp_path/
Очистка зараженных файлов
./remove_malware.sh /var/www/wp_path/ clean
Сценарий ( remove_malware.sh
):
#!/bin/bash # # This script remove malware of PHP files. # # In this case it will remove some malicious code # from all WordPress PHP files that is at top of # every PHP file. # # The string at the top of every file is: # # <?php if(!isset($GLOBALS["\x61\156\x75\156\x61"])) { $ua=strtolower($_SERVER["\x48\124\x54\120\x5f\125\x53\105\x52\137\x41\107\x45\116\x54"]); if ((! strstr($ua,"\x6d\163\x69\145")) and (! strstr($ua,"\x72\166\x3a\61\x31"))) $GLOBALS["\x61\156\x$ # # This script tries to find the string inside $_SERVER # of the above line at the top of the files to determine # if the file is infected. If you run the script and # nothing seems to be infected but you suspect and you # want to be sure, just open any PHP of WordPress and # check if the malicious line code is present. If is # present but the script did not detect, it is because # the content inside $_SERVER may be diferent. # In these cases, just replace in this script the string # in the -e parameter of grep line with the content of # $_SERVER found in your PHP (remember to escape # the \ with \\\\) and run again this removal script. # # # JavocSoft 2014 # if [[ -z "$1" ]]; then echo "Directory where to find is required." else grep -rnwl $1 --include \*.php -e "\\\\x48\\\\124\\\\x54\\\\120\\\\x5f\\\\125\\\\x53\\\\105\\\\x52\\\\137\\\\x41\\\\107\\\\x45\\\\116\\\\x54" | while read -r filename ; do if [[ ! -z "$2" ]]; then echo "Found file $filename. Cleaning..." awk 'BEGIN {matches=0} matches < 1 && /1/ { sub(/^.*<?php/,"<?php"); matches++ } { print $0 }' $filename > $filename.purged mv $filename $filename.bck mv $filename.purged $filename else echo "Found file $filename." fi done echo "Done." fi
Один из способов сузить его, было бы print_r (я верю его hex_values). Из вашего pastebin:
$ _SERVER [ "\ x48 \ 124 \ x54 \ 120 \ x5f \ 125 \ x53 \ 105 \ x52 \ 137 \ x41 \ 107 \ x45 \ 116 \ x54"]
print_r(\x48\124\x54\120\x5f\125\x53\105\x52\137\x41\107\x45\116\x54);
вывод:
$_SERVER["HTTP_USER_AGENT"];
Эта небольшая часть кода задокументирована в официальном руководстве :
'HTTP_USER_AGENT' Содержимое заголовка User-Agent: от текущего запроса, если таковой имеется. Это строка, обозначающая пользовательский агент, который обращается к странице. Типичный пример: Mozilla / 4.5 [en] (X11; U; Linux 2.2.9 i586). Помимо всего прочего, вы можете использовать это значение с помощью get_browser (), чтобы адаптировать выход вашей страницы к возможностям пользовательского агента.
Чтобы пройти весь код, потребуется некоторое время, потому что часть «тарабарщины» встроена в другие функции.
Небольшое предупреждение, я не эксперт по безопасности, или мастер php, при тестировании какого-либо кода попробуйте использовать песочницу в Интернете, например http://sandbox.onlinephpfunctions.com/