Lyhyesti: PHP-tiedosto upload-kansiossa on vakava varoitusmerkki, sillä siellä pitäisi olla vain kuvia ja asiakirjoja. Älkää koskaan avatko tiedostoa selaimessa vaan lukekaa se tekstinä, tarkistakaa aikaleimat ja omistaja ja etsikää tiedoston nimeä käyttölokeista. Harmittomia ovat yleensä vain tyhjät paikkamerkit, kuten index.php ilman sisältöä; kaiken muun käsittelette mahdollisena murtona.
Miksi PHP:llä ei ole upload-kansiossa mitään tekemistä
Upload-kansiot on tarkoitettu sisällölle, jonka kävijät tai toimittajat lataavat: kuville, PDF-tiedostoille, videoille. Verkkopalvelinkäyttäjä saa kirjoittaa sinne, muuten lataukset eivät toimisi. Juuri se tekee näistä kansioista houkuttelevia hyökkääjille. Joka voi aukon kautta kirjoittaa tiedostoja, sijoittaa ne sinne, missä kirjoittaminen on sallittu.
Uudet PHP-tiedostot upload- tai välimuistikansioissa kuuluvat käytössämme olevien raporttien mukaan murron jälkeisiin yleisiin varoitusmerkkeihin. PHP2Shellille ei ole vahvistettuja Indicators of Compromise -tunnisteita; löytö ei siis kerro mitään siitä, minkä aukon kautta tiedosto tuli. Miten upload-toiminnot rakennetaan turvallisiksi, kuvaa Tiedostolatausten turvallinen toteutus PHP:ssä.
Se, voiko tällainen tiedosto aiheuttaa vahinkoa, ratkaistaan verkkopalvelimen konfiguraatiolla. Jos se suorittaa PHP-tiedostoja upload-kansiossa, jokaisesta sinne sijoitetusta tiedostosta tulee mahdollinen kauko-ohjain. Jos suoritus on siellä estetty, tiedosto jää vieraaksi kappaleeksi, mutta aluksi vaikutuksettomaksi. Monissa asennuksissa tätä estoa ei ole koskaan otettu käyttöön.
Miten PHP-tiedosto päätyy upload-kansioon?
Arvioinnissa auttaa, kun tuntee mahdolliset tiet. Jokainen johtaa eri jatkokysymyksiin.
| Tie | Tyypillinen tausta | Jatkokysymys |
|---|---|---|
| Turvaton latauslomake | Tarkistetaan vain pääte tai selaimen ilmoittama tyyppi | Mitkä lomakkeet ottavat vastaan tiedostoja? |
| Aukko liitännäisessä tai teemassa | tunnettu haavoittuvuus vanhentuneessa laajennuksessa | Mitkä laajennukset ovat vanhentuneita? |
| Varastetut tunnukset | ylläpitäjän, FTP- tai hosting-tili | Mitä kirjautumisia on viime aikoina ollut? |
| Koodin suoritus aukon kautta | esim. tulkissa, kuten PHP2Shellin kohdalla mahdollista | Oliko PHP haavoittuva kyseisenä aikana? |
| Oikeutettu liitännäinen | paikkamerkki, harvoin välimuistitiedostot | Kuuluuko tiedosto alkuperäiseen pakettiin? |
Useita teitä voi yhdistyä. Hyökkääjä, joka suorittaa koodia aukon kautta, saattaa sijoittaa tiedoston vain palatakseen myöhemmin mukavammin.
Löytöpaikkojen järjestelmällinen luettelointi
Ennen kuin arvioitte yksittäistä tiedostoa, hankkikaa yleiskuva. Komennot vain lukevat. Polut ovat esimerkkejä WordPressille; muissa järjestelmissä mukauttakaa upload-polku.
# PHP:n kaltaiset tiedostot upload-kansiossa koon, omistajan, mtimen ja ctimen kanssa
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'
# Määritä tiedostotyyppi sisällön eikä päätteen mukaan (PHP-sisältöiset kuvat pistävät silmään)
find /var/www/html/wp-content/uploads -type f -newermt "2026-10-17" -exec file {} + | grep -viE "image|pdf|video|audio"
Muut järjestelmät käyttävät muita kirjoituskansioita, esimerkiksi fileadmin TYPO3:ssa, images Joomlassa tai mediakansio polun public alla Shopware 6:ssa. Lisäksi tulevat sovelluksen välimuisti- ja temp-hakemistot. Multisite-asennuksissa ja useilla verkkosivustoilla samalla palvelimella on vastaavasti paljon upload-kansioita; jokainen kuuluu hakuun.
Myös .htaccess- ja .user.ini-tiedostot upload-kansiossa ovat epäilyttäviä. Niillä PHP:n suoritus voidaan kytkeä siinä kansiossa takaisin päälle tai konfiguraatiota muuttaa.
PHP-tiedosto uploads-kansiossa: löydön oikea tulkinta
Kaikki osumat eivät ole yhtä vakavia. Seuraava luokittelu auttaa ensiarvioinnissa. Se ei korvaa tarkkaa tutkimusta.
| Löytö | Ensimmäinen arvio |
|---|---|
index.php, jossa nolla tavua tai vain kommentti |
yleensä paikkamerkki hakemistoluettelointia vastaan, verrattava liitännäiseen |
| PHP-tiedosto sisällöllä kuukausikansiossa | korkea epäily |
Kaksoispääte kuten bild.jpg.php tai .php.png |
korkea epäily, tyypillinen naamiointi |
Kuva, jossa file-komennon mukaan on PHP-koodia |
korkea epäily, voidaan suorittaa liittämisen kautta |
.htaccess tai .user.ini upload-kansiossa |
epäily, tarkistettava konfiguraatio |
| Tiedoston omistaa verkkopalvelinkäyttäjä, ctime 17.10. jälkeen | sopii verkkosivuston kautta tehtyyn murtoon |
Lukekaa epäilyttävät tiedostot vain tekstinä, esimerkiksi komennolla head -c 2000 datei.php tai less. Silmään pistävät hyvin pitkät rivit, koodatut merkkijonot ja funktioiden nimet kuten eval tai base64_decode. Mistä tunnistatte hämärretyn koodin, näyttää Hämärretyn PHP-koodin tunnistaminen.
Onko tiedostoa kutsuttu? Katsaus lokiin
Tärkein kysymys löydön jälkeen on: onko joku käyttänyt tiedostoa? Vastaus on verkkopalvelimen käyttölokeissa. Etsikää tiedoston nimeä, myös arkistoiduista lokeista.
# Epäilyttävän tiedoston kutsut nykyisissä ja pakatuissa lokeissa (nimi esimerkkinä)
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
# Vain onnistuneet kutsut IP-osoitteen ja ajankohdan kanssa
grep -h "uploads/2026/10/thumb.php" /var/log/nginx/access.log* | awk '$9 == 200 {print $1, $4, $6, $7}'
Monet onnistuneet POST-pyynnöt muutamasta osoitteesta viittaavat aktiiviseen käyttöön web shellinä. Osumien puuttuminen ei automaattisesti tarkoita hälytyksen peruuntumista, sillä lokit voivat olla kierrätettyjä, poistettuja tai puutteellisia. Jos verkkosivusto toimii CDN:n tai välityspalvelimen takana, lisää lokeja on siellä; jaetussa hostingissa hosting-yritys tarjoaa käyttölokit yleensä asiakaspaneelissa. Kiinnittäkää huomiota myös samoista osoitteista tuleviin pyyntöihin muille uusille tiedostoille, sillä ne johtavat usein muihin osiin. Säilyttäkää lokit 20. lokakuuta alkaen. Miten lokit arvioidaan perusteellisesti, kerrotaan oppaassa Verkkopalvelimen lokien arviointi hyökkäyksen jälkeen.
Jos loki näyttää onnistuneita kutsuja tuntemattomaan PHP-tiedostoon, lähtekää siitä, että kyseessä on murto. Varmistakaa tiedosto ja lokit, rajatkaa pääsyä palvelimelle ja tarkistakaa, voivatko henkilötiedot olla vaarantuneet.
Arvioinnin jälkeen: oikea järjestys
- Varmistakaa: Kopioikaa tiedosto tarkistussumman ja aikaleimojen kanssa, varmistakaa lokit.
- Selvittäkää alkuperä: Tarkistakaa upload-lomakkeet, liitännäiset ja löytöä edeltävä ajanjakso.
- Etsikää muita osia: lisätiedostot, cron-työt, uudet ylläpitäjätilit.
- Estäkää suoritus: Kieltäkää PHP upload-kansiossa verkkopalvelimen tasolla, kuten artikkelissa PHP:n suorituksen kieltäminen upload-kansioissa kuvataan.
- Siivotkaa ja vaihtakaa tunnukset: vasta sitten poistakaa tiedosto ja uusikaa kaikki salasanat.
Miten PHP SOS auttaa konkreettisesti?
- Löydön arviointi: Tarkistamme tiedoston suorittamatta sitä ja luokittelemme sen.
- Käytön selvitys: Arvioimme lokit ja rekonstruoimme, kuka kutsui tiedostoa ja milloin.
- Täydellinen siivous: Haittaohjelmien poistolla etsimme kaikki osat, suljemme syyn ja vaihdamme tunnukset.
- Toiston estäminen: Estämme PHP:n suorituksen kirjoituskansioissa ja seuraamme uusia tiedostoja.
Usein kysytyt kysymykset
Onko jokainen PHP-tiedosto upload-kansiossa vaarallinen?
Ei jokainen. Jotkin liitännäiset jättävät tyhjän index.php-tiedoston, jotta kansion sisältöä ei luetteloida. Kaiken muun, erityisesti tiedostot, joilla on sisältöä, epätavallinen nimi tai kaksoispääte, pitäisi käsitellä epäiltynä tapauksena.
Saanko avata epäilyttävän tiedoston selaimessa?
Ei. Kutsu verkkosivuston kautta suorittaa koodin. Lukekaa tiedosto vain tekstinä palvelimella tai kopiona, esimerkiksi komennoilla less tai head.
Miten selvitän, onko tiedostoa käytetty?
Etsikää tiedoston nimeä verkkopalvelimen käyttölokeista. Pyynnöt tilakoodilla 200 ja POST-menetelmällä osoittavat, että tiedostoa on kutsuttu. Niihin liittyvät IP-osoitteet ja ajankohdat auttavat jatkotutkimuksessa.
Riittääkö, että poistan tiedoston ja estän PHP:n upload-kansiossa?
Molemmat ovat tarpeen mutta eivät riittäviä. Selvittäkää lisäksi, miten tiedosto sinne päätyi, etsikää muita osia ja vaihtakaa tunnukset. Muuten hyökkääjä palaa samaa tietä.