CleanOps

Jak sprawdzić, czy strona Joomla jest zainfekowana — objawy, miejsca ukrycia i 6 testów

8 października 2026 • 3 min czytania • Joomla, malware, diagnostyka

Osoba pracująca na laptopie przy drewnianym stole

O infekcjach WordPressa napisano wszystko. O Joomli znacznie mniej, a stron na Joomli w Polsce jest wciąż bardzo dużo: firmowe wizytówki z lat 2012–2019, katalogi produktów, strony stowarzyszeń. Wiele z nich nikt nie aktualizował od lat, i właśnie one trafiają do nas najczęściej. Ten wpis jest o tym, jak rozpoznać infekcję w Joomli i gdzie jej szukać.

Objawy, które widać bez logowania

  1. Hosting pisze o malware albo strona zwraca 403 z krótkim komunikatem. W Joomli to najczęstszy pierwszy sygnał, bo stare instalacje rzadko ktoś ogląda.
  2. Strona przekierowuje na obcy adres, zwykle tylko z telefonu albo tylko przy wejściu z Google.
  3. Dziwne adresy w Google po wpisaniu site:twojadomena.pl: podstrony o lekach, kasynach, w obcym języku, których nigdy nie było.
  4. Strona nagle zwolniła albo hosting zgłasza przekroczenie limitu procesora bez wzrostu ruchu. Kod rozsyłający spam potrafi obciążyć konto bardziej niż odwiedzający.
  5. Poczta na domenie trafia do spamu, bo z serwera wychodzą tysiące maili, których nie wysyłałeś.

Objawy widoczne w panelu administratora

  • Nowi Super Użytkownicy w Użytkownicy → Zarządzaj, założeni w nocy, z adresami na losowych domenach.
  • Nieznane rozszerzenia w Rozszerzenia → Zarządzaj → Zarządzaj. Nazwy udają rzeczy systemowe: plg_system_cache, mod_core_helper, com_update.
  • Wyłączone rozszerzenia bezpieczeństwa albo wyczyszczone logi akcji użytkowników.
  • Data modyfikacji configuration.php nowsza niż ostatnia zmiana, którą pamiętasz.

Gdzie Joomla chowa malware

W WordPressie wszyscy sprawdzają wp-content/uploads. W Joomli odpowiedniki są inne:

Katalog Co tam znajdujemy
images/, media/ pliki PHP z nazwami udającymi obrazki (logo.php, thumb.php)
tmp/, cache/, administrator/cache/ droppery i web‑shelle, bo te katalogi mają prawa zapisu
templates/nazwa/ zainfekowany index.php szablonu albo doklejony kod w error.php
libraries/, plugins/system/ podmienione pliki rdzenia i wtyczki systemowe ładowane przy każdym żądaniu
.htaccess w tysiącach podkatalogów allowlisty web‑shelli (opisaliśmy to w osobnym wpisie)

Osobna kategoria to pliki w katalogu głównym o nazwach jak about.php, radio.php, lock360.php, wp-login.php. Joomla nie ma pliku wp-login.php. Jeśli jest, to backdoor.

6 testów, które zrobisz sam

1. Sprawdź wersję i datę wydania

Plik libraries/src/Version.php (Joomla 3.x i nowsze) albo libraries/cms/version/version.php (starsze) pokaże wersję. Joomla 3 nie dostaje poprawek bezpieczeństwa od sierpnia 2023. Jeśli strona stoi na 3.x lub starszej, zakładaj, że luki są publicznie znane i że ktoś je wykorzystał.

2. Poszukaj plików PHP tam, gdzie nie powinno ich być

Przez SSH:

find images media tmp cache -name "*.php" -o -name "*.phtml" -o -name "*.php.*"

Przez FTP: przejrzyj te katalogi ręcznie i sortuj po dacie modyfikacji. Jeden plik PHP w images/ to prawie zawsze infekcja.

3. Sprawdź najnowsze zmiany

find . -type f -mtime -30 -name "*.php" | head -50

Pokaże pliki PHP zmienione w ostatnich 30 dniach. Jeśli nikt nic nie aktualizował, lista powinna być pusta.

4. Porównaj z oficjalnym wydaniem

Pobierz paczkę tej samej wersji Joomli z oficjalnej strony projektu i porównaj sumy kontrolne plików w libraries/, administrator/ i components/. Każda różnica w pliku rdzenia to kandydat na infekcję. Robimy to automatycznie w CleanOps, ale ręcznie też się da dla kilku kluczowych plików.

5. Przeszukaj pod kątem typowych konstrukcji

grep -rl "eval(base64_decode\|gzinflate(base64_decode\|str_rot13(" --include="*.php" . | head

Trafienia w libraries/vendor/ bywają niewinne (biblioteki używają tych funkcji legalnie). Trafienia w images/, tmp/, templates/ niewinne nie są.

6. Obejrzyj stronę jak Googlebot i jak telefon

curl -s -A "Googlebot/2.1" https://twojadomena.pl | grep -i "<script\|location.href" | head
curl -s -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)" https://twojadomena.pl | head -40

Jeśli odpowiedź różni się od tego, co widzisz w przeglądarce na komputerze, kod rozpoznaje odwiedzającego i serwuje różne treści.

Co dalej

Jeden test z wynikiem pozytywnym wystarczy, żeby nie kasować niczego na własną rękę. Zrób kopię całego katalogu i bazy, a potem naprawiaj metodycznie: najpierw porównanie z wydaniem, potem reguły na znane wzorce, na końcu analiza niejednoznacznych plików. W CleanOps sprawdzenie Joomli jest bezpłatne i niczego nie zmienia na serwerze, dopiero naprawa jest płatna.

Czytaj też