Да забыл сказать, что у клиента интернет-магазин работающий на сцепке WordPress + WooCommerce.

Начал я с отключения возможности отсылки писем по SMTP, переключился на встроенную PHP функцию mail(). Как говорится всемирно известный глюк не отсылки писем этой функцией при сцепке WordPress + WooCommerce, я решил использовать в своих целях. То есть обращение и всё остальное проходит как положено, но письма никуда не уходят, а значит сайт спамом не занимается. Но об этом потом. Так же я поставил вместо плагина Wordfense, плагин S.A.F.
Дальше я сделал бэкапы сайта и БД, скачал к себе на локальную машину. И благополучно прогнал через Касперыча (всё как положено, лицензия есть, не стоит экономить на безопасности). Он, как и ожидалось ничего не нашел, так как судя по логам, спам активировался в определённые промежутку времени, не постоянно. Конечно, я воспользовался рядом онлайн сервисов по проверке сайта. Кстати, будьте осторожны с ними, некоторые в целях снять с Вас деньги могут находить и видеть то чего нет. Был еще опыт и с одним хостингом, где ввели услугу лечения от вирусов и у всех на сайтах вдруг появился файл с вирусом, которого до этого не было. Изучение его на предмет вируса, показало наличие кода, но не законченного и латентного в плане активности. Ну Вы поняли, что это было, бизнес и ничего более.
Так вот, следующим моим действием было использование такого хорошего скрипта как AI-Bolit (берите на вооружение, не стесняйтесь), вещь в хозяйстве нужная и полезная. Были найдены около 3 файлов с подозрительными сигнатурами (красное выделение) и 11 (желтенького характера). Проверив их все выяснилось, что всё в рамках нормы и морали.
Стал копаться в логах и отчёт S.A.F. пришел как нельзя вовремя. Так как при сопоставлении данных из логов и из отчёта. Выяснилось, что происходит подозрительное обращение извне к файлу x.gif, лежащему с изображениями. Весил он целый килобайт, а что это был за файл и как он туда попал, информация отсутствовала. Более того из отчёта S.A.F. следовало, что кто-то благополучно выяснил логин администратора к админ панели, а он к слову сказать был мной установлен и имел вид: "v4Df3G67J1d5", пароль еще сложнее. Удалив x.gif и сменив логин вместе с паролем, я заодно поменял все пароли начиная с редакторов и менеджеров магазина и заканчивая БД, и самим хостингом.
Если у вас есть сложности в работе с паролями, то бишь в их структурированном хранении и быстром использовании, рекомендую Вам программу, которой пользуюсь сам: "KeePass Password Safe 2", поищите в Интерент, она уже давно известна и делает удобной жизнь многим.
Но вернёмся к сайту и нашему спаму. Логи функции PHP mail() показывали, что спам до сих пор рассылается. Но в логах, которые предоставлял хостер было не понятно, откуда приходит вызов функции. И я решил поглядеть, кто и откуда это делает. Для этого пришлось залезть в файл class-phpmailer.php, расположенный в папке wp-include, и изменить одну функцию, вписав код для записи стека вызова функций:
private function mailPassthru($to, $subject, $body, $header, $params) { $name = "log_bs_"; $c = file_get_contents('log_bs_num.txt'); $name .= $c; file_put_contents('log_bs_num.txt', ++$c); $name .= ".txt"; //Check overloading of mail function to avoid double-encoding if (ini_get('mbstring.func_overload') & 1) { $subject = $this->secureHeader($subject); } else { $subject = $this->encodeHeader($this->secureHeader($subject)); } if (ini_get('safe_mode') || !($this->UseSendmailOptions)) { $log = serialize(debug_backtrace()); $result = @mail($to, $subject, $body, $header); } else { $log = serialize(debug_backtrace()); $result = @mail($to, $subject, $body, $header, $params); } $f = fopen($name,'w'); $r = fwrite($f,$log); fclose($f); return $result; }
Запись в разные файлы по одному стеку, сделал, для своего удобства. После некоторого ожидания, спамер снова проявил себя. И у меня появилось множество файлов. Чтобы было удобно их просматривать, я написал небольшой файл и запустил его на локальной машине:
echo ""; if (!isset($_POST['file'])) echo "
Где имя файла!
"; else { $file = strip_tags($_POST['file']); if (file_exists($file)){ $f=fopen($file,"r"); if($f){ while (!feof($f)) { $out = unserialize(fread($f,filesize($file))); echo ''; print_r ($out); echo ''; } fclose($f); }else{ echo 'Ошибка!'; } }else echo "
Указанный файл не существует!
"; }После просмотра стеков, было выяснено, что китайские товарищи, а это были именно, они, так как спам шел на их языке и на адреса в их стране, не взламывали сам сайт, но использовали для рассылки спама такой компонент для WordPress как JetPack. Стоять бояться, куда! Не надо его удалять, он хороший. Просто там есть модуль "Поделиться". И там есть функция поделиться по E-mail, то есть отправить ссылку на статью кому-либо на электронный адрес. Так вот эти хитрецы с помощью этой функции рассылали спам по 9-14 писем за раз с интервалом 5-10 секунд. При этом всовывая рекламу вместе с адресом получателя, а компонент (это на совести разработчиков) брал и оставляя адрес, остальное перемещал в тело отправляемого письма. Отключив возможность делиться по E-mail, я прекратил спам.
Мораль, если что-то происходит, а Вы пока не можете понять, что и где, не надо рвать волосы у первых встречных и метаться в разные стороны. Просто будьте последовательны и проблема будет решена Вами. Добра Вам!