Bahnhofstraße 22, 52134 Herzogenrath Poniedziałek - piątek: 8:00 - 16:30 kontakt@milnersoftware.de 0176 66798849

Aktualności · WordPress · · 5 min czytania

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ę.

Zwei Personen besprechen eine Website am Laptop

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

  1. 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.
  2. 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.
  3. Podmienić rdzeń WordPressa: foldery wp-admin i wp-includes w całości zastąpić świeżymi plikami tej samej wersji z wordpress.org.
  4. Zainstalować na nowo wtyczki i motyw z oryginalnego źródła. To, czego Państwo nie używają, usunąć, a nie tylko wyłączyć.
  5. Sprawdzić bazę danych, .htaccess i uploads tak, jak opisano wyżej.
  6. Sprawdzić użytkowników: usunąć nieznanych administratorów, zmienić wszystkie hasła.
  7. Odnowić klucze bezpieczeństwa: ustawić nowe wartości AUTH_KEY, SECURE_AUTH_KEY itd. w wp-config.php. Wszystkie istniejące sesje logowania stracą wtedy ważność.
  8. 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.

Autor: Przemysław Milner

Pozostałe wpisy