Web shell to złośliwy skrypt (najczęściej PHP) umieszczony na serwerze WWW, który daje atakującemu zdalny dostęp: może przeglądać pliki, uruchamiać polecenia i zmieniać treść strony. Zwykle trafia na serwer przez lukę w aplikacji, np. w formularzu wgrywania plików.
Jak działa web shell?
Atakujący wgrywa plik, np. wp-content/uploads/plik.php, a następnie wywołuje go w przeglądarce. Skrypt przyjmuje polecenia przez parametry żądania i wykonuje je na serwerze. Często jest ukryty pod nazwą przypominającą plik systemowy i obfuskowany.
Jak wykryć web shell?
- nowe lub zmienione pliki PHP w katalogach, w których ich być nie powinno (np. uploads),
- funkcje typu
eval,base64_decode,systemishell_execw nietypowych miejscach, - nietypowe żądania w logach, np. dziwne parametry do plików w uploads,
- skanery bezpieczeństwa i narzędzia kontroli integralności plików.
Jak zapobiegać?
Waliduj wgrywane pliki (typ, rozszerzenie, zawartość), przechowuj je poza katalogiem wykonywalnym lub wyłącz tam wykonywanie PHP, aktualizuj CMS i wtyczki oraz ogranicz uprawnienia zapisu. Po wykryciu web shella nie wystarczy usunąć pliku: trzeba znaleźć lukę, przez którą się dostał, i zmienić hasła.
Dobrą praktyką jest zakaz wykonywania skryptów w katalogu z uploadami.
Pliki o niedawnej dacie zmiany w katalogach z obrazami warto sprawdzić.
Złośliwy kod na zainfekowanej stronie często pokazuje robotom spam niewidoczny dla właściciela, co Google traktuje jak cloaking.
Zobacz w praktyce
Dynamic rendering a cloaking, czyli kiedy Google nakłada karę
Jak zaciemnić kod JavaScript i kiedy to ma sens
Jak zabezpieczyć aplikację przed SQL Injection