Web Shell (backdoor) — co to jest i jak go zlokalizować?
Czym jest web shell?
Web shell (znany też jako backdoor lub tylne wejście) to złośliwy plik PHP (rzadziej: Python, Perl, ASP), który po umieszczeniu na serwerze daje atakującemu zdalny dostęp do systemu przez przeglądarkę internetową. Wystarczy znać adres URL pliku i ewentualne hasło — i można wykonywać dowolne polecenia na serwerze, przeglądać pliki, edytować bazy danych czy rozsyłać spam.
Web shell jest często pierwszą rzeczą, którą haker instaluje po udanym ataku — nawet zanim zainfekuje pliki WordPressa. Dzięki temu, nawet jeśli właściciel strony zaktualizuje WordPressa i usunie widoczne infekcje, atakujący może wrócić przez web shell i wszystko zacząć od nowa.
Jak wygląda web shell?
Zaawansowane web shelle mają rozbudowany interfejs graficzny z menedżerem plików, konsolą SQL, narzędziami sieciowymi i edytorem kodu. Prostsze wyglądają jak kilka linii kodu:
<?php if(isset($_REQUEST['cmd'])){ echo shell_exec($_REQUEST['cmd']); } ?>
Taki plik, umieszczony np. pod adresem twojadomena.pl/wp-content/uploads/x.php, pozwala wykonać dowolne polecenie systemowe przez URL: ...x.php?cmd=ls+-la
Jak hakerzy maskują web shelle?
Hakerzy stosują różne techniki kamuflażu:
- Zaciemnianie przez base64 — cały kod jest zakodowany i odkodowywany dopiero w czasie wykonania:
eval(base64_decode("cGhwaW5mbygpOw=="));
- Ukrywanie w obrazkach — plik o rozszerzeniu
.php zaczyna się od bajtów JPEG/PNG, żeby wyglądać jak obraz
- Puste pliki z ukrytym kodem — kod wstrzyknięty na końcu pliku jako białe znaki po
?>
- Nazwy imitujące oryginalne pliki —
wp-includes/class-wp-db.php vs złośliwy wp-includes/class-wp-db_.php
Gdzie najczęściej chowają się web shelle?
wp-content/uploads/ — najczęstsze miejsce, bo folder jest zapisywalny przez PHP
wp-content/cache/ — podobnie, zapisywalny przez mechanizmy cache
wp-includes/ — hakerzy wstrzykują pliki imitujące oryginalne pliki WordPressa
- Katalogi tymczasowe i sesyjne poza public_html — często pomijane podczas skanowania
- Zagnieżdżone foldery z losowymi nazwami, np.
uploads/2024/03/a7f8e/
Jak znaleźć web shell na serwerze?
Metoda 1 — Wyszukiwanie plików PHP w katalogach, w których nie powinno ich być
find wp-content/uploads -name "*.php" -o -name "*.php5" -o -name "*.phtml"
Metoda 2 — Szukanie charakterystycznych funkcji
grep -r "shell_exec|system(|exec(|passthru|base64_decode" --include="*.php" -l public_html/
Metoda 3 — Pliki ze świeżą datą modyfikacji
find public_html -name "*.php" -mtime -30 -ls | sort -k8
To pokaże wszystkie pliki PHP zmodyfikowane w ciągu ostatnich 30 dni. Każdy nierozpoznany plik wymaga uwagi.
Znalazłem web shell — co teraz?
Nie usuwaj od razu. Najpierw:
- Zapisz datę modyfikacji i uprawnienia pliku
- Sprawdź logi serwera pod kątem żądań do tego pliku — dowiesz się, kiedy był używany i z jakich adresów IP
- Przeszukaj katalogi w pobliżu — zwykle web shell nie jest sam, w tym samym miejscu mogą być kolejne
- Dopiero potem usuń plik i sprawdź, czy infekcja nie wróciła po 24 godzinach
Jeśli nie masz dostępu do logów serwera lub nie wiesz jak je interpretować — skontaktuj się z nami. Analiza logów to kluczowy element każdego profesjonalnego odwirusowania.