Aktualna sytuacja: PHP2Shell. Dwie krytyczne luki w PHP (CVSS 9,2) umożliwiają wykonanie złośliwego kodu bez logowania. Poprawki od 21.10.2026.Co należy teraz zrobić →

Pliki PHP w katalogu uploadu: jak prawidłowo ocenić znaleziska

Plik PHP w katalogu uploadu to prawie zawsze sygnał alarmowy, ale nie każdy jest złośliwym kodem. Oto jak ocenić znalezisko bez niszczenia śladów i wyjaśnić, czy ktoś go wywołał.

Stan 5 min czytaniaWykrywanie i informatyka śledcza

Krótko: Plik PHP w katalogu uploadu to poważny sygnał ostrzegawczy, ponieważ powinny tam leżeć tylko obrazy i dokumenty. Pliku nigdy nie wolno otwierać w przeglądarce, lecz czytać go jako tekst, sprawdzić znaczniki czasu i właściciela oraz wyszukać nazwę pliku w logach dostępu. Niegroźne są zwykle tylko puste zaślepki, takie jak index.php bez zawartości; wszystko inne proszę traktować jako możliwe włamanie.

Dlaczego PHP nie ma czego szukać w katalogu uploadu

Katalogi uploadu służą treściom, które wgrywają odwiedzający lub redaktorzy: obrazom, plikom PDF, filmom. Użytkownik serwera WWW może tam zapisywać, inaczej uploady by nie działały. Właśnie to czyni te katalogi atrakcyjnymi dla atakujących. Kto przez lukę może zapisywać pliki, umieszcza je tam, gdzie zapis jest dozwolony.

Nowe pliki PHP w katalogach uploadu lub cache należą według znanych nam doniesień do ogólnych sygnałów ostrzegawczych po włamaniu. Dla PHP2Shell nie ma potwierdzonych wskaźników kompromitacji (Indicators of Compromise); znalezisko nic więc nie mówi o tym, przez jaką lukę plik się pojawił. Jak bezpiecznie budować funkcje uploadu, opisuje Bezpieczna realizacja uploadu plików w PHP.

To, czy taki plik może wyrządzić szkodę, rozstrzyga konfiguracja serwera WWW. Jeśli wykonuje on pliki PHP w katalogu uploadu, każdy zapisany tam plik staje się możliwym zdalnym sterowaniem. Jeśli wykonywanie jest tam zablokowane, plik pozostaje ciałem obcym, ale początkowo bez skutku. Wiele instalacji nigdy nie wprowadziło tej blokady.

Jak plik PHP trafia do katalogu uploadu?

Przy ocenie pomaga znajomość możliwych dróg. Każda prowadzi do innych pytań następczych.

Droga Typowe tło Pytanie następcze
Niebezpieczny formularz uploadu kontrola tylko rozszerzenia lub typu zgłoszonego przez przeglądarkę Które formularze przyjmują pliki?
Luka we wtyczce lub motywie znana podatność w przestarzałym rozszerzeniu Które rozszerzenia są przestarzałe?
Skradzione dane dostępowe konto administratora, FTP lub hostingu Jakie były ostatnie logowania?
Wykonanie kodu przez lukę np. w interpreterze, jak możliwe przy PHP2Shell Czy PHP było w tym czasie podatne?
Uzasadniona wtyczka zaślepka, rzadko pliki cache Czy plik należy do oryginalnego pakietu?

Kilka dróg może się nałożyć. Atakujący, który przez lukę wykonuje kod, może umieścić plik tylko po to, by później wygodniej wrócić.

Systematyczne wypisanie miejsc znalezisk

Zanim ocenią Państwo pojedynczy plik, proszę uzyskać przegląd. Polecenia tylko odczytują dane. Ścieżki są przykładami dla WordPress; w innych systemach proszę dostosować ścieżkę uploadu.

# Pliki podobne do PHP w katalogu uploadu z rozmiarem, właścicielem, mtime i ctime
find /var/www/html/wp-content/uploads -type f \
  \( -iname "*.php*" -o -iname "*.phtml" -o -iname "*.phar" -o -iname ".htaccess" -o -iname ".user.ini" \) \
  -printf '%s Bytes  %u  m:%T+  c:%C+  %p\n'

# Określić typ pliku według zawartości, a nie rozszerzenia (obrazy z zawartością PHP rzucają się w oczy)
find /var/www/html/wp-content/uploads -type f -newermt "2026-10-17" -exec file {} + | grep -viE "image|pdf|video|audio"

Inne systemy używają innych katalogów zapisu, na przykład fileadmin w TYPO3, images w Joomla lub folder mediów pod public w Shopware 6. Dochodzą katalogi cache i tymczasowe aplikacji. W instalacjach multisite i przy kilku stronach na jednym serwerze jest odpowiednio wiele katalogów uploadu; każdy należy do wyszukiwania.

Podejrzane są także pliki .htaccess i .user.ini w katalogu uploadu. Za ich pomocą można w tym katalogu ponownie włączyć wykonywanie PHP lub zmienić konfigurację.

Plik PHP w katalogu uploads: prawidłowa ocena znaleziska

Nie każde trafienie jest równie poważne. Poniższa klasyfikacja pomaga w pierwszej ocenie. Nie zastępuje dokładnego badania.

Ustalenie Pierwsza klasyfikacja
index.php z zerem bajtów lub tylko komentarzem zwykle zaślepka przeciw wyświetlaniu zawartości katalogu, porównać z wtyczką
Plik PHP z zawartością w folderze miesięcznym wysokie podejrzenie
Podwójne rozszerzenie, jak bild.jpg.php lub .php.png wysokie podejrzenie, typowe maskowanie
Obraz, który według file zawiera kod PHP wysokie podejrzenie, może zostać wykonany przez dołączenie
.htaccess lub .user.ini w katalogu uploadu podejrzenie, sprawdzić konfigurację
Plik należy do użytkownika serwera WWW, ctime po 17.10. pasuje do włamania przez stronę

Podejrzane pliki proszę czytać wyłącznie jako tekst, na przykład head -c 2000 datei.php lub less. Rzucają się w oczy bardzo długie wiersze, zakodowane ciągi znaków i nazwy funkcji takie jak eval czy base64_decode. Jak rozpoznać zaciemniony kod, pokazuje Rozpoznawanie zaciemnionego kodu PHP.

Czy plik został wywołany? Spojrzenie do logu

Najważniejsze pytanie po znalezisku brzmi: czy ktoś użył pliku? Odpowiedź leży w logach dostępu serwera WWW. Proszę szukać nazwy pliku, także w logach archiwalnych.

# Wywołania podejrzanego pliku w aktualnych i spakowanych logach (nazwa jako przykład)
grep -h "uploads/2026/10/thumb.php" /var/log/nginx/access.log* 2>/dev/null
zgrep -h "uploads/2026/10/thumb.php" /var/log/nginx/access.log*.gz 2>/dev/null

# Tylko udane wywołania z adresem IP i momentem
grep -h "uploads/2026/10/thumb.php" /var/log/nginx/access.log* | awk '$9 == 200 {print $1, $4, $6, $7}'

Wiele udanych żądań POST z kilku adresów wskazuje na aktywne użycie jako webshell. Brak trafień nie oznacza automatycznie odwołania alarmu, ponieważ logi mogą być rotowane, usunięte lub niekompletne. Jeśli strona działa za CDN lub proxy, dalsze protokoły leżą tam; w hostingu współdzielonym dostawca hostingu udostępnia logi dostępu zwykle w panelu klienta. Proszę też zwrócić uwagę na żądania do innych nowych plików z tych samych adresów, ponieważ często prowadzą do dalszych składników. Logi od 20 października proszę zachować. Jak dokładnie analizować logi, opisuje poradnik Analiza logów serwera WWW po ataku.

Działać natychmiast

Jeśli log pokazuje udane wywołania nieznanego pliku PHP, proszę zakładać włamanie. Zabezpieczyć plik i logi, ograniczyć dostęp do serwera i sprawdzić, czy mogą być dotknięte dane osobowe.

Po ocenie: właściwa kolejność

  1. Zabezpieczyć: Skopiować plik z sumą kontrolną i znacznikami czasu, zabezpieczyć logi.
  2. Wyjaśnić pochodzenie: Sprawdzić formularze uploadu, wtyczki i okres przed znalezieniem.
  3. Szukać dalszych składników: dodatkowe pliki, zadania cron, nowe konta administratorów.
  4. Zablokować wykonywanie: Zakazać PHP w katalogu uploadu na poziomie serwera WWW, jak opisano w artykule Zakaz wykonywania PHP w katalogach uploadu.
  5. Oczyścić i zmienić dostępy: dopiero wtedy usunąć plik i odnowić wszystkie hasła.

Jak konkretnie pomaga PHP SOS?

  • Ocenić znalezisko: Sprawdzamy plik bez jego wykonywania i go klasyfikujemy.
  • Wyjaśnić użycie: Analizujemy logi i odtwarzamy, kto i kiedy wywołał plik.
  • Oczyścić w pełni: W ramach usuwania złośliwego oprogramowania szukamy wszystkich składników, zamykamy przyczynę i zmieniamy dostępy.
  • Zapobiec powtórce: Blokujemy wykonywanie PHP w katalogach zapisu i monitorujemy nowe pliki.

Częste pytania

Czy każdy plik PHP w katalogu uploadu jest niebezpieczny?

Nie każdy. Niektóre wtyczki zapisują pusty index.php, aby zawartość katalogu nie była wyświetlana. Wszystko inne, zwłaszcza pliki z zawartością, nietypową nazwą lub podwójnym rozszerzeniem, należy traktować jako przypadek podejrzany.

Czy mogę otworzyć podejrzany plik w przeglądarce?

Nie. Wywołanie przez stronę wykonuje kod. Plik proszę czytać wyłącznie jako tekst na serwerze lub w kopii, na przykład poleceniem less lub head.

Jak sprawdzić, czy plik był używany?

Proszę wyszukać nazwę pliku w logach dostępu serwera WWW. Żądania ze statusem 200 i metodą POST pokazują, że plik został wywołany. Powiązane adresy IP i momenty pomagają w dalszym badaniu.

Czy wystarczy usunąć plik i zablokować PHP w katalogu uploadu?

Jedno i drugie jest konieczne, ale niewystarczające. Dodatkowo trzeba wyjaśnić, jak plik tam trafił, poszukać dalszych składników i zmienić dane dostępowe. W przeciwnym razie atakujący wróci tą samą drogą.

Źródła

Kontakt natychmiast

Liczy się każda godzina. Proszę napisać do nas teraz.

Proszę krótko opisać system, wersję PHP i obserwacje. Skontaktujemy się z Państwem, ustalimy sytuację i będziemy pracować zdalnie, aż incydent zostanie zamknięty i udokumentowany.

Natychmiastowa pomoc