Ajankohtainen tilanne: PHP2Shell. Kaksi kriittistä PHP-haavoittuvuutta (CVSS 9.2) sallii haittakoodin suorittamisen ilman kirjautumista. Korjaukset 21.10.2026 alkaen.Mitä nyt on tehtävä →

PHP-tiedostot upload-kansiossa: löytöjen oikea tulkinta

PHP-tiedosto upload-kansiossa on lähes aina hälytysmerkki, mutta kaikki eivät ole haittakoodia. Näin arvioitte löydön tuhoamatta jälkiä ja selvitätte, onko joku kutsunut tiedostoa.

Tilanne Lukuaika 5 minHavaitseminen ja forensiikka

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 lataus­lomake 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.

Toimi heti

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

  1. Varmistakaa: Kopioikaa tiedosto tarkistussumman ja aikaleimojen kanssa, varmistakaa lokit.
  2. Selvittäkää alkuperä: Tarkistakaa upload-lomakkeet, liitännäiset ja löytöä edeltävä ajanjakso.
  3. Etsikää muita osia: lisätiedostot, cron-työt, uudet ylläpitäjätilit.
  4. Estäkää suoritus: Kieltäkää PHP upload-kansiossa verkkopalvelimen tasolla, kuten artikkelissa PHP:n suorituksen kieltäminen upload-kansioissa kuvataan.
  5. 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ä.

Lähteet

Pikayhteys

Jokainen tunti on tärkeä. Kirjoittakaa meille nyt.

Kuvatkaa lyhyesti järjestelmä, PHP-versio ja havainnot. Otamme yhteyttä, selvitämme tilanteen ja työskentelemme etänä, kunnes tapaus on käsitelty loppuun ja dokumentoitu.

Pikaapu