WordPress przekierowuje na strony ze spamem – jak znaleźć przyczynę i wyczyścić stronę
Odwiedzający trafiają na strony ze spamem, a Państwo niczego nie widzą? Gdzie przekierowanie ukrywa się w .htaccess, bazie i motywie, jak dochodzi do włamania i jak wyczyścić stronę.
W skrócie: jeśli Państwa strona na WordPressie przekierowuje odwiedzających na strony ze spamem, loteriami albo kasynami, prawie na pewno została zhakowana. Przekierowanie zwykle siedzi w pliku .htaccess, w skrypcie JavaScript wstrzykniętym do bazy danych, w zmienionym pliku motywu albo w ukrytej wtyczce. Często jest zbudowane tak, żeby zalogowany administrator niczego nie zauważył: dotyczy tylko użytkowników telefonów albo osób wchodzących z Google. Wyłączenie wtyczki nie wystarczy. Stronę trzeba całkowicie wyczyścić i zamknąć lukę.
Zwykle dowiadujemy się o tym od innych. Klientka pisze, że na Państwa stronie nagle trafiła na „Wygrałeś iPhone’a”. Państwo otwierają stronę na komputerze i wszystko wygląda normalnie. To nie przypadek. Kto włamuje się na stronę, chce, żeby jak najdłużej pozostało to niezauważone, i dlatego omija dokładnie tę osobę, która najszybciej by zareagowała: właściciela.
Po czym rozpoznać przekierowanie
- Przekierowanie działa tylko na telefonie, tylko przy pierwszej wizycie albo tylko po wejściu z wyników Google.
- Zalogowani administratorzy niczego nie widzą, wylogowani odwiedzający tak.
- Google pokazuje przy Państwa stronie ostrzeżenie, że witryna mogła zostać zhakowana, albo Chrome ostrzega przed niebezpieczną stroną.
- W Google Search Console w sekcji „Problemy dotyczące bezpieczeństwa” pojawiają się komunikaty albo w sekcji „Strony” nagle widać tysiące adresów, których Państwo nigdy nie tworzyli.
- W kodzie źródłowym strony jest skrypt z nieznanej domeny.
Inne objawy, np. japoński spam w wynikach wyszukiwania albo nieznani administratorzy, opisuję w artykule Zhakowany WordPress? Jak to rozpoznać.
Jak samodzielnie sprawdzić przekierowanie
Proszę otworzyć stronę w oknie prywatnym przeglądarki, najlepiej na telefonie w sieci komórkowej, a nie w Wi-Fi. Warto wyszukać stronę w Google i kliknąć wynik, zamiast wpisywać adres. Kto nie boi się wiersza poleceń, może sprawdzić odpowiedź serwera jako odwiedzający z telefonu, który przyszedł z Google:
curl -sI -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)" \
-e "https://www.google.com/" https://twoja-domena.de/
Jeśli w odpowiedzi jest linia Location: z obcym adresem, przekierowanie pochodzi z serwera, najczęściej z .htaccess albo z pliku PHP. Jeśli jej nie ma, przekierowanie i tak może działać przez JavaScript w przeglądarce. Wtedy znajdą je Państwo w kodzie źródłowym strony.
Gdzie zwykle ukrywa się przekierowanie
.htaccess
Dopisane reguły, które rozróżniają przeglądarkę albo źródło wejścia, np. RewriteCond %{HTTP_REFERER} google albo RewriteCond %{HTTP_USER_AGENT} android|iphone, a po nich przekierowanie na obcą domenę. Proszę sprawdzić nie tylko .htaccess w katalogu głównym, ale też w podfolderach, takich jak wp-content i wp-content/uploads.
Baza danych
Bardzo często skrypt siedzi we wpisach, stronach albo widżetach. Proszę sprawdzić w phpMyAdmin tabelę wp_options, przede wszystkim wartości siteurl i home. Jeśli jest tam obca domena, WordPress przekierowuje wszystko. Wpisy z wstrzykniętym kodem znajdą Państwo zapytaniem:
SELECT ID, post_title FROM wp_posts
WHERE post_content LIKE '%<script%';
Prefiks wp_ może być u Państwa inny. Jest zapisany w wp-config.php jako $table_prefix.
Pliki motywu i systemu
Ulubione miejsca to header.php i functions.php motywu, index.php i wp-config.php w katalogu głównym oraz pliki w wp-includes. Kod jest zwykle zaciemniony, typowe są długie ciągi znaków z eval, base64_decode albo gzinflate.
Ukryte wtyczki i pliki PHP w uploads
Proszę zajrzeć do wp-content/mu-plugins. Wtyczki w tym folderze działają automatycznie i nie da się ich wyłączyć w panelu. W folderze wp-content/uploads pliki PHP nie mają czego szukać, tam są zdjęcia i PDF-y. Plik .php między zdjęciami to prawie zawsze tylne drzwi.
Jak włamywacze dostają się do środka
Na zhakowanych stronach, które czyściłem, droga była prawie zawsze jedna z tych:
- Przestarzałe wtyczki ze znaną luką bezpieczeństwa. Znany przykład to wtyczka „WP File Manager”: w wersjach od 6.0 do 6.8 można było wgrywać pliki bez logowania. Luka była masowo wykorzystywana we wrześniu 2020. Wtyczki menedżerów plików to w ogóle ulubiony cel, bo mają pełny dostęp do wszystkich plików.
- Skradzione albo zbyt proste hasła do WordPressa, FTP albo panelu hostingu.
- Pirackie motywy i wtyczki premium ze stron „nulled”, w których tylne drzwi są już wbudowane.
- Inne strony na tym samym hostingu. Jeśli w jednym pakiecie jest pięć stron, a jedna z nich jest przestarzała, zagrożone są wszystkie pięć.
Co zrobić teraz
- Nie usuwać niczego w panice. Najpierw kopia plików i bazy danych w obecnym stanie. Będzie potrzebna, żeby później ustalić, jak włamywacz dostał się do środka.
- Zmienić dostępy u hostingodawcy: panel, FTP i hasło do bazy danych. Nowe hasło do bazy trzeba potem wpisać w
wp-config.php. - Podmienić rdzeń WordPressa: foldery
wp-adminiwp-includesw całości zastąpić świeżymi plikami tej samej wersji z wordpress.org. - Zainstalować na nowo wtyczki i motyw z oryginalnego źródła. To, czego Państwo nie używają, usunąć, a nie tylko wyłączyć.
- Sprawdzić bazę danych, .htaccess i uploads tak, jak opisano wyżej.
- Sprawdzić użytkowników: usunąć nieznanych administratorów, zmienić wszystkie hasła.
- Odnowić klucze bezpieczeństwa: ustawić nowe wartości
AUTH_KEY,SECURE_AUTH_KEYitd. wwp-config.php. Wszystkie istniejące sesje logowania stracą wtedy ważność. - Poinformować Google: gdy strona jest czysta, w Search Console w sekcji „Problemy dotyczące bezpieczeństwa” poprosić o weryfikację.
Przywrócenie starej kopii zapasowej brzmi kusząco. Pomaga jednak tylko wtedy, gdy kopia na pewno pochodzi sprzed ataku, i nie zamyka luki. Wiele ataków przez tygodnie pozostaje niezauważonych, zanim przekierowanie zacznie działać. A razem ze starym stanem wraca też stara, dziurawa wtyczka.
Kiedy warto poprosić o pomoc
W zasadzie zawsze, gdy przekierowanie wraca po pierwszym czyszczeniu. Oznacza to, że gdzieś nadal są tylne drzwi. Tak samo, gdy chodzi o sklep z danymi klientów, bo może wtedy obowiązywać zgłoszenie naruszenia zgodnie z RODO, albo gdy na tym samym hostingu jest kilka stron.
Profesjonalna pomoc
Czyszczę zhakowane strony na WordPressie w całości: usuwam złośliwy kod z plików i bazy danych, szukam tylnych drzwi, znajduję i zamykam lukę, odnawiam dostępy i prowadzę weryfikację w Google. Usuwanie malware zaczyna się od 490 € netto, więcej w usłudze zhakowany WordPress. Żeby to się nie powtórzyło, aktualizacja WordPress doprowadza przestarzałe wtyczki i PHP do aktualnego stanu.