Stručne: Súbor PHP v priečinku na nahrávanie je vážny výstražný signál, pretože tam majú ležať len obrázky a dokumenty. Súbor nikdy neotvárajte v prehliadači, ale čítajte ho ako text, skontrolujte časové pečiatky a vlastníka a vyhľadajte názov súboru v prístupových logoch. Neškodné sú zvyčajne len prázdne zástupné súbory, ako index.php bez obsahu; všetko ostatné považujte za možné vlámanie.
Prečo PHP v priečinku na nahrávanie nemá čo hľadať
Priečinky na nahrávanie slúžia obsahu, ktorý nahrávajú návštevníci alebo redaktori: obrázky, PDF, videá. Používateľ webového servera tam smie zapisovať, inak by nahrávanie nefungovalo. Presne to robí tieto priečinky lákavými pre útočníkov. Kto môže cez zraniteľnosť zapisovať súbory, ukladá ich tam, kde je zápis povolený.
Nové súbory PHP v priečinkoch na nahrávanie alebo cache patria podľa správ, ktoré máme k dispozícii, medzi všeobecné varovné signály po vlámaní. Pre PHP2Shell neexistujú potvrdené indikátory kompromitácie (Indicators of Compromise); nález teda nehovorí nič o tom, cez ktorú zraniteľnosť sa súbor dostal. Ako sa funkcie nahrávania stavajú bezpečne, opisuje Bezpečná implementácia nahrávania súborov v PHP.
Či môže takýto súbor spôsobiť škodu, rozhoduje konfigurácia webového servera. Ak vykonáva súbory PHP v priečinku na nahrávanie, stane sa každý tam uložený súbor možným diaľkovým ovládaním. Ak je tam vykonávanie zablokované, súbor ostáva cudzím telesom, ale spočiatku bez účinku. Mnohé inštalácie toto zablokovanie nikdy nenastavili.
Ako sa súbor PHP dostane do priečinka na nahrávanie?
Pre hodnotenie pomáha poznať možné cesty. Každá vedie k iným nadväzujúcim otázkam.
| Cesta | Typické pozadie | Nadväzujúca otázka |
|---|---|---|
| Nezabezpečený formulár na nahrávanie | kontrola len prípony alebo typu, ktorý hlási prehliadač | Ktoré formuláre prijímajú súbory? |
| Zraniteľnosť v plugine alebo téme | známa slabina v zastaranom rozšírení | Ktoré rozšírenia sú zastarané? |
| Odcudzené prístupové údaje | účet admina, FTP alebo hostingu | Aké prihlásenia sa vyskytli naposledy? |
| Vykonanie kódu cez zraniteľnosť | napríklad v interpreteri, ako je možné pri PHP2Shell | Bolo PHP v tom období zraniteľné? |
| Legitímny plugin | zástupné súbory, zriedka súbory cache | Patrí súbor do pôvodného balíka? |
Môže sa spojiť viacero ciest. Útočník, ktorý vykonáva kód cez zraniteľnosť, možno súbor len uloží, aby sa neskôr pohodlnejšie vrátil.
Systematicky vypísať miesta nálezu
Skôr než posúdite jednotlivý súbor, získajte prehľad. Príkazy len čítajú. Cesty sú príklady pre WordPress; pri iných systémoch prispôsobte cestu k nahrávaniu.
# Súbory podobné PHP v priečinku na nahrávanie s veľkosťou, vlastníkom, 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čiť typ súboru podľa obsahu namiesto prípony (nápadné sú obrázky s obsahom PHP)
find /var/www/html/wp-content/uploads -type f -newermt "2026-10-17" -exec file {} + | grep -viE "image|pdf|video|audio"
Iné systémy používajú iné zapisovateľné priečinky, napríklad fileadmin v TYPO3, images v Joomle alebo priečinok médií pod public v Shopware 6. K tomu pristupujú adresáre cache a dočasné adresáre aplikácie. Pri inštaláciách multisite a viacerých weboch na jednom serveri je zodpovedajúco veľa priečinkov na nahrávanie; každý patrí do hľadania.
Podozrivé sú aj súbory .htaccess a .user.ini v priečinku na nahrávanie. Pomocou nich sa dá vykonávanie PHP v tomto priečinku opäť zapnúť alebo zmeniť konfiguráciu.
Súbor PHP v priečinku uploads: správny výklad nálezu
Nie každý zásah je rovnako vážny. Nasledujúce zaradenie pomáha pri prvom hodnotení. Nenahrádza dôkladné vyšetrenie.
| Zistenie | Prvé zaradenie |
|---|---|
index.php s nulovým počtom bajtov alebo len komentárom |
zvyčajne zástupný súbor proti výpisu adresára, porovnať s pluginom |
| Súbor PHP s obsahom v mesačnom priečinku | vysoké podozrenie |
Dvojitá prípona ako bild.jpg.php alebo .php.png |
vysoké podozrenie, typické maskovanie |
Obrázok, ktorý podľa file obsahuje kód PHP |
vysoké podozrenie, môže sa vykonať cez vloženie |
.htaccess alebo .user.ini v priečinku na nahrávanie |
podozrenie, skontrolovať konfiguráciu |
| Súbor patrí používateľovi webového servera, ctime po 17. 10. | zodpovedá vlámaniu cez web |
Podozrivé súbory čítajte len ako text, napríklad pomocou head -c 2000 datei.php alebo less. Nápadné sú veľmi dlhé riadky, kódované reťazce a názvy funkcií ako eval alebo base64_decode. Ako spoznáte zahmlený kód, ukazuje Rozpoznanie zahmleného kódu PHP.
Bol súbor zavolaný? Pohľad do logu
Najdôležitejšia otázka po náleze znie: použil niekto súbor? Odpoveď je v prístupových logoch webového servera. Hľadajte názov súboru, aj v archivovaných logoch.
# Volania podozrivého súboru v aktuálnych a zabalených logoch (názov ako prí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
# Len úspešné volania s adresou IP a časom
grep -h "uploads/2026/10/thumb.php" /var/log/nginx/access.log* | awk '$9 == 200 {print $1, $4, $6, $7}'
Mnoho úspešných požiadaviek POST z niekoľkých adries naznačuje aktívne použitie ako webshellu. Žiadne zásahy automaticky neznamenajú odvolanie poplachu, pretože logy môžu byť rotované, zmazané alebo neúplné. Ak web beží za CDN alebo proxy, ďalšie protokoly sú tam; pri zdieľanom hostingu poskytuje prístupové logy zvyčajne poskytovateľ hostingu v zákazníckej zóne. Všímajte si aj požiadavky na iné nové súbory z tých istých adries, pretože často vedú k ďalším súčastiam. Logy od 20. októbra uschovajte. Ako logy dôkladne vyhodnotiť, je v sprievodcovi Vyhodnotenie logov webového servera po útoku.
Ak log ukazuje úspešné volania neznámeho súboru PHP, vychádzajte z vlámania. Zabezpečte súbor a logy, obmedzte prístup na server a skontrolujte, či môžu byť dotknuté osobné údaje.
Po vyhodnotení: správne poradie
- Zabezpečiť: Súbor skopírovať s kontrolným súčtom a časovými pečiatkami, zabezpečiť logy.
- Objasniť pôvod: Skontrolovať formuláre na nahrávanie, pluginy a obdobie pred nálezom.
- Hľadať ďalšie súčasti: ďalšie súbory, cronjoby, nové účty administrátorov.
- Zablokovať vykonávanie: Zakázať PHP v priečinku na nahrávanie na úrovni webového servera, ako opisuje článok Zákaz vykonávania PHP v priečinkoch na nahrávanie.
- Vyčistiť a zmeniť prístupy: až potom súbor odstrániť a obnoviť všetky heslá.
Ako konkrétne pomáha PHP SOS?
- Zhodnotiť nález: Súbor preveríme bez jeho spustenia a zaradíme ho.
- Objasniť použitie: Vyhodnotíme logy a zrekonštruujeme, kto súbor kedy zavolal.
- Vyčistiť úplne: Prostredníctvom odstránenia malvéru nájdeme všetky súčasti, uzavrieme príčinu a zmeníme prístupy.
- Zabrániť opakovaniu: Zablokujeme vykonávanie PHP v zapisovateľných priečinkoch a sledujeme nové súbory.
Časté otázky
Je každý súbor PHP v priečinku na nahrávanie nebezpečný?
Nie každý. Niektoré pluginy ukladajú prázdny index.php, aby sa obsah priečinka nevypisoval. Všetko ostatné, najmä súbory s obsahom, neobvyklým názvom alebo dvojitou príponou, by ste mali považovať za podozrivý prípad.
Smiem podozrivý súbor otvoriť v prehliadači?
Nie. Zavolanie cez web kód spustí. Súbor čítajte len ako text na serveri alebo v kópii, napríklad pomocou less alebo head.
Ako zistím, či sa súbor použil?
Vyhľadajte názov súboru v prístupových logoch webového servera. Požiadavky so stavom 200 a metódou POST ukazujú, že súbor bol zavolaný. Príslušné adresy IP a časy pomáhajú pri ďalšom vyšetrovaní.
Stačí súbor zmazať a zablokovať PHP v priečinku na nahrávanie?
Oboje je potrebné, no nie dostatočné. Navyše objasnite, ako sa tam súbor dostal, hľadajte ďalšie súčasti a zmeňte prístupové údaje. Inak sa útočník vráti tou istou cestou.