Aktuální situace: PHP2Shell. Dvě kritické zranitelnosti PHP (CVSS 9.2) umožňují spustit škodlivý kód bez přihlášení. Záplaty od 21. 10. 2026.Co nyní udělat →

Soubory PHP ve složce uploadu: správně vyložit místa nálezu

Soubor PHP ve složce uploadu je téměř vždy poplašný signál, ale ne každý je škodlivý kód. Jak nález posoudit, aniž byste zničili stopy, a zjistit, zda jej někdo zavolal.

Stav 5 min čteníDetekce a forenzní analýza

Stručně: Soubor PHP ve složce uploadu je vážný varovný signál, protože tam mají ležet jen obrázky a dokumenty. Soubor nikdy neotvírejte v prohlížeči, ale čtěte jej jako text, zkontrolujte časová razítka a vlastníka a hledejte název souboru v přístupových lozích. Neškodné jsou zpravidla jen prázdné zástupné soubory jako index.php bez obsahu; vše ostatní považujte za možný průnik.

Proč PHP ve složce uploadu nemá co dělat

Složky uploadu slouží obsahu, který nahrávají návštěvníci nebo redaktoři: obrázky, PDF, videa. Uživatel webového serveru tam smí zapisovat, jinak by uploady nefungovaly. Právě to činí tyto složky přitažlivými pro útočníky. Kdo může přes zranitelnost zapisovat soubory, ukládá je tam, kde je zápis dovolen.

Nové soubory PHP ve složkách uploadu nebo cache patří podle zpráv, které máme k dispozici, k obecným varovným signálům po průniku. Pro PHP2Shell neexistují potvrzené indikátory kompromitace (Indicators of Compromise); nález tedy nic neříká o tom, přes jakou zranitelnost se soubor dostal. Jak se bezpečně realizují funkce uploadu, popisuje Bezpečná implementace uploadu souborů v PHP.

Zda takový soubor může způsobit škodu, rozhoduje konfigurace webového serveru. Spouští-li soubory PHP ve složce uploadu, stává se každý tam uložený soubor možným dálkovým ovládáním. Je-li tam spouštění zakázáno, zůstává soubor cizím tělesem, ale zprvu bez účinku. Mnoho instalací tento zákaz nikdy nenastavilo.

Jak se soubor PHP do složky uploadu dostane?

Pro posouzení pomáhá znát možné cesty. Každá vede k jiným navazujícím otázkám.

Cesta Typické pozadí Navazující otázka
Nezabezpečený formulář uploadu kontrola jen přípony nebo typu hlášeného prohlížečem Které formuláře přijímají soubory?
Zranitelnost v pluginu nebo tématu známá slabina v zastaralém rozšíření Která rozšíření jsou zastaralá?
Odcizené přístupové údaje účet správce, FTP nebo hostingu Jaká přihlášení proběhla naposledy?
Spuštění kódu přes zranitelnost např. v interpretu, jak je možné u PHP2Shell Bylo PHP v tom období zranitelné?
Legitimní plugin zástupné soubory, vzácně soubory cache Patří soubor k originálnímu balíčku?

Může se sejít několik cest. Útočník, který spouští kód přes zranitelnost, soubor možná jen uloží, aby se později pohodlněji vrátil.

Místa nálezu systematicky vypsat

Než posoudíte jednotlivý soubor, udělejte si přehled. Příkazy jen čtou. Cesty jsou příklady pro WordPress; u jiných systémů upravte cestu uploadu.

# Soubory podobné PHP ve složce uploadu s velikostí, vlastníkem, mtime a 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'

# Určit typ souboru podle obsahu, ne podle přípony (obrázky s obsahem PHP vyniknou)
find /var/www/html/wp-content/uploads -type f -newermt "2026-10-17" -exec file {} + | grep -viE "image|pdf|video|audio"

Jiné systémy používají jiné zapisovatelné složky, například fileadmin u TYPO3, images u Joomly nebo složku médií pod public u Shopware 6. Přistupují k tomu adresáře cache a temp aplikace. U instalací Multisite a více webů na jednom serveru existuje odpovídajícím způsobem mnoho složek uploadu; každá patří do hledání.

Podezřelé jsou také soubory .htaccess a .user.ini ve složce uploadu. Pomocí nich lze v této složce znovu zapnout spouštění PHP nebo změnit konfiguraci.

Soubor PHP ve složce uploads: nález správně vyložit

Ne každý nález je stejně vážný. Následující zařazení pomáhá při prvním hodnocení. Nenahrazuje důkladné vyšetření.

Nález První zařazení
index.php s nulovou velikostí nebo jen komentářem většinou zástupný soubor proti výpisu adresáře, porovnat s pluginem
Soubor PHP s obsahem v měsíční složce vysoké podezření
Dvojitá přípona jako bild.jpg.php nebo .php.png vysoké podezření, typické maskování
Obrázek, který podle file obsahuje kód PHP vysoké podezření, může se spustit vložením
.htaccess nebo .user.ini ve složce uploadu podezření, zkontrolovat konfiguraci
Soubor patří uživateli webového serveru, ctime po 17. 10. odpovídá průniku přes web

Podezřelé soubory čtěte jen jako text, například pomocí head -c 2000 datei.php nebo less. Nápadné jsou velmi dlouhé řádky, kódované řetězce a názvy funkcí jako eval nebo base64_decode. Jak poznat zašifrovaný kód, ukazuje Rozpoznání obfuskovaného kódu PHP.

Byl soubor zavolán? Pohled do logu

Nejdůležitější otázka po nálezu zní: Použil někdo soubor? Odpověď je v přístupových lozích webového serveru. Hledejte název souboru, i v archivovaných lozích.

# Zavolání podezřelého souboru v aktuálních a zabalených lozích (název jako příklad)
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

# Jen úspěšná zavolání s adresou IP a časem
grep -h "uploads/2026/10/thumb.php" /var/log/nginx/access.log* | awk '$9 == 200 {print $1, $4, $6, $7}'

Mnoho úspěšných požadavků POST z několika adres ukazuje na aktivní využívání jako webshell. Žádné nálezy neznamenají automaticky odvolání poplachu, protože logy mohou být rotovány, smazány nebo neúplné. Běží-li web za CDN nebo proxy, leží další protokoly tam; u sdíleného hostingu zpřístupňuje přístupové logy zpravidla hoster v zákaznické zóně. Všímejte si také požadavků na jiné nové soubory ze stejných adres, protože často vedou k dalším součástem. Logy od 20. října uchovejte. Jak logy důkladně vyhodnotit, uvádí průvodce Vyhodnocení logů webového serveru po útoku.

Jednejte ihned

Ukazuje-li log úspěšná zavolání neznámého souboru PHP, předpokládejte průnik. Zajistěte soubor a logy, omezte přístup k serveru a ověřte, zda mohou být dotčeny osobní údaje.

Po posouzení: správné pořadí

  1. Zajistit: Soubor zkopírovat s kontrolním součtem a časovými razítky, zajistit logy.
  2. Objasnit původ: Zkontrolovat formuláře uploadu, pluginy a období před nálezem.
  3. Hledat další součásti: další soubory, cron úlohy, nové účty správců.
  4. Zakázat spouštění: PHP ve složce uploadu zakázat na úrovni webového serveru, jak popisuje článek Zákaz spouštění PHP ve složkách uploadu.
  5. Vyčistit a změnit přístupy: teprve pak soubor odstranit a obnovit všechna hesla.

Jak konkrétně pomáhá PHP SOS?

  • Posoudit nález: Soubor kontrolujeme, aniž bychom jej spouštěli, a zařazujeme jej.
  • Objasnit použití: Vyhodnocujeme logy a rekonstruujeme, kdo soubor kdy zavolal.
  • Vyčistit úplně: S odstraněním malwaru hledáme všechny součásti, uzavíráme příčinu a měníme přístupy.
  • Zabránit opakování: Zakazujeme spouštění PHP v zapisovatelných složkách a sledujeme nové soubory.

Časté dotazy

Je každý soubor PHP ve složce uploadu nebezpečný?

Ne každý. Některé pluginy ukládají prázdný index.php, aby se neukazoval obsah složky. Vše ostatní, zvlášť soubory s obsahem, neobvyklým názvem nebo dvojitou příponou, byste měli považovat za podezřelý případ.

Smím podezřelý soubor otevřít v prohlížeči?

Ne. Zavolání přes web spustí kód. Soubor čtěte jen jako text na serveru nebo v kopii, například pomocí less nebo head.

Jak zjistím, zda byl soubor použit?

Hledejte název souboru v přístupových lozích webového serveru. Požadavky se stavem 200 a metodou POST ukazují, že soubor byl zavolán. Příslušné adresy IP a časy pomáhají při dalším šetření.

Stačí soubor smazat a zakázat PHP ve složce uploadu?

Obojí je nutné, ale nedostatečné. Navíc objasněte, jak se soubor na místo dostal, hledejte další součásti a změňte přístupové údaje. Jinak se útočník vrátí stejnou cestou.

Zdroje

Okamžitý kontakt

Každá hodina se počítá. Napište nám hned.

Stručně popište systém, verzi PHP a pozorování. Ozveme se, vyjasníme situaci a budeme pracovat na dálku, dokud nebude incident uzavřen a zdokumentován.

Okamžitá pomoc