Trenutno stanje: PHP2Shell. Dvije kritične PHP ranjivosti (CVSS 9.2) omogućuju zlonamjerni kod bez prijave. Zakrpe od 21. 10. 2026.Što sada učiniti →

Prepoznavanje i uklanjanje webshella

Kako otkriti stražnja vrata na PHP web-poslužiteljima bez uništavanja tragova i zašto samo brisanje rijetko dovoljno.

Stanje 5 min čitanjaSavjetnik

Ukratko: Webshell prepoznajete po novim ili izmijenjenim PHP datotekama na neuobičajenim mjestima, po stranim procesima korisnika web-poslužitelja i po neuobičajenim vezama. Osigurajte tragove prije nego išta obrišete i vratite kod iz čistog izvora. Zakrpa sama ne uklanja stražnja vrata.

Zašto su webshellovi tema nakon PHP2Shella

Ranjivosti CVE-2026-109618 i CVE-2026-109619 u samom PHP-u omogućuju izvršavanje zlonamjernog koda izdaleka bez prijave. Logičan cilj nakon uspješnog napada je trajna stražnja vrata, dakle webshell. Ona ostaju i kad je PHP u međuvremenu ažuriran.

Prema medijskim izvješćima prvi pokušaj napada opažen je već 17.10.2026., a zakrpe su uslijedile 21.10. Tko je u tom razdoblju bio ranjiv, trebao bi ciljano provjeriti. Potvrđeni Indicators of Compromise do sada nisu objavljeni. Potraga se stoga temelji na upadljivostima u ponašanju, a ne na gotovom popisu.

Djelujte odmah

Ako na poslužitelju s podacima klijenata pronađete webshell: ništa ne brišite na brzinu. Najprije osigurajte dokaze, zatim izolirajte poslužitelj i planirajte daljnju obradu.

Kako prepoznati webshell: provjera datoteka

Većina webshellova su PHP datoteke u web-direktoriju. Upadljive su datoteke nastale ili izmijenjene nakon 17.10., PHP datoteke u mapama za uploade i cache te datoteke sa zamaskiranim kodom. Sljedeće naredbe ništa ne mijenjaju, samo ispisuju:

# PHP datoteke izmijenjene od 17.10.2026.
find /var/www -type f -name "*.php*" -newermt "2026-10-17" -ls

# PHP datoteke u mapama za upload, cache ili tmp
find /var/www -type f -name "*.php*" \( -path "*upload*" -o -path "*cache*" -o -path "*tmp*" \) -ls

# Tipično maskiranje: eval u kombinaciji s dekodiranjem
grep -rlE "eval\s*\(\s*(base64_decode|gzinflate|str_rot13|gzuncompress)" /var/www --include="*.php"

# Neobično dugi retci često upućuju na pakirani kod
grep -rlE ".{3000,}" /var/www --include="*.php"

Pogoci su naznake, a ne dokazi. Neki dodaci legitimno koriste kodirani kod. Usporedite sumnjive datoteke s izvornim paketom proizvođača. Najpouzdanija je usporedba s kontrolnim zbrojevima ili sustavom za kontrolu verzija poput Gita:

# Odstupanja od zadnjeg poznatog stanja u Git repozitoriju
git -C /var/www/projekt status --porcelain

Vremenska oznaka može biti krivotvorena. Zato se ne oslanjajte samo na datum izmjene datoteke.

Koja obilježja datoteku čine sumnjivom

Obilježje Zašto upada u oči
PHP datoteka u mapi za upload ili slike Tamo bi trebali biti samo mediji
Dvostruki nastavak poput .jpg.php ili .php.png Prikrivanje kao bezazlena datoteka
Vrlo dugi retci bez prijeloma Tipično za pakirani ili šifrirani kod
Ime datoteke slično jezgrenoj datoteci, ali nije u izvornom paketu Prikrivanje u poznatom okruženju
Vlasnik ili prava odstupaju od susjednih datoteka Datoteka je stvorena drugim putem

Što se više obilježja podudara, veća je vjerojatnost pronalaska. Sumnjive datoteke otvarajte samo kao tekst, nikad putem preglednika, jer bi poziv preko web-stranice izvršio kod.

Provjera procesa, veza i cron zadataka

Aktivni webshell često ostavlja tragove izvan datotečnog sustava. Korisnik web-poslužitelja, primjerice www-data, apache ili nginx, uobičajeno ne pokreće shellove, mrežne alate ni kompajlere.

# Procesi uobičajenih korisnika web-poslužitelja
ps -eo user,pid,ppid,lstart,cmd | grep -E "^(www-data|apache|nginx)"

# Otvorene mrežne veze s pripadajućim procesom
sudo ss -tunap | grep -E "php|www-data|apache|nginx"

# Planirani zadaci korisnika web-poslužitelja
sudo crontab -u www-data -l
ls -la /etc/cron.d /var/spool/cron 2>/dev/null

Upadljive su trajne odlazne veze prema nepoznatim odredištima, procesi s kriptičnim imenima i cron zadaci koji s interneta učitavaju datoteke. Provjerite i logove pristupa za zahtjeve prema datotekama kojih prije nije bilo. Kako to učiniti, opisuje vodič Analiza logova web-poslužitelja nakon napada.

Osigurajte tragove prije uklanjanja

Tko najprije briše, gubi odgovor na najvažnija pitanja: kako je napadač ušao, što je vidio, koji su podaci pogođeni? Ti su Vam odgovori potrebni za moguću prijavu prema GDPR-u, za osiguravatelje i za odluku jesu li ugroženi drugi sustavi.

Razumljiv redoslijed:

  1. Dokumentirajte stanje: popis procesa, mrežne veze, prijavljeni korisnici.
  2. Kopirajte sumnjive datoteke i logove s kontrolnim zbrojem, bez otvaranja ili izvršavanja.
  3. Ako je moguće, napravite sliku sustava ili snapshot virtualnog stroja.
  4. Isključite poslužitelj s mreže ili jako ograničite pristup.

Kod sustava s osjetljivim podacima ili mogućim sudskim sporom osiguravanje bi trebalo biti forenzički uredno. Pozadinu pronađite na stranici IT forenzika nakon napada na web-poslužitelj.

Uredno uklanjanje webshellova

Brisanje jedne datoteke rijetko je kraj. Napadači često postave više pristupa: dodatne datoteke na skrivenim mjestima, zapise u konfiguracijskim datotekama poput .htaccess ili .user.ini, nove administratorske račune u aplikaciji ili cron zadatke. Pouzdano čišćenje slijedi ove korake:

  • Dovedite PHP na ispravljeno stanje (8.5.12, 8.4.27, 8.3.36, 8.2.35 ili potvrđeni backport) i ponovno pokrenite sve PHP procese.
  • Aplikacijski kod postavite iznova iz čistog izvora umjesto popravljanja pojedinih datoteka.
  • Preuzmite samo provjerene sadržaje poput uploada i baze podataka te tamo ciljano tražite ubačeni kod.
  • Promijenite sve pristupne podatke: bazu podataka, SSH, FTP, administratorske račune, API ključeve.
  • Ograničite prava pisanja web-poslužitelja na nužno i onemogućite izvršavanje PHP-a u mapama za upload.

Za WordPress postoje vlastita tipična skrovišta, koja opisuje vodič Pronalaženje stražnjih vrata u WordPressu. Nakon toga web-stranicu treba neko vrijeme pomnije nadzirati kako bi se ponovni pristup rano uočio.

Kako PHP SOS konkretno pomaže?

  • Logove, datoteke i stanje sustava osiguravamo na provjerljiv način prije nego se bilo što promijeni.
  • Tražimo stražnja vrata u datotekama, bazi podataka, cron zadacima i konfiguraciji te razvrstavamo pronađeno.
  • Aplikaciju postavljamo iznova iz čistog izvora, mijenjamo pristupe i ojačavamo poslužitelj.
  • Incident dokumentiramo do zaključenja, kao osnovu za prijave i osiguravatelje.

Tijek čišćenja opisuje usluga Uklanjanje zlonamjernog softvera i webshellova.

Česta pitanja

Što je webshell?

Webshell je ubačena datoteka, najčešće PHP, putem koje napadači mogu izdaleka upravljati poslužiteljem. Često se prikriva kao bezazlena datoteka s neupadljivim imenom i ostaje aktivna i nakon ažuriranja.

Pronalazi li antivirusni skener svaki webshell?

Ne. Skeneri prepoznaju poznate obrasce, a nove ili jako zamaskirane varijante prolaze. Za PHP2Shell uz to nema objavljenih, potvrđenih Indicators of Compromise, pa je analiza ponašanja važnija od popisa potpisa.

Je li dovoljno obrisati pronađenu datoteku?

Najčešće nije. Napadači često postave više pristupa, primjerice dodatne datoteke, cron zadatke ili nove administratorske račune. Bez analize uzroka i promjene svih pristupnih podataka ponovni pristup je vjerojatan.

Moram li nešto prijaviti nakon pronalaska webshella?

Ako mogu biti pogođeni osobni podaci, može postojati obveza prijave prema GDPR-u, u pravilu u roku od 72 sata. Razjasnite to sa svojim službenikom za zaštitu podataka ili odvjetnikom; ovo nije pravni savjet.

Izvori

Hitni kontakt

Svaki sat se računa. Pišite nam odmah.

Ukratko opišite sustav, verziju PHP-a i opažanje. Javit ćemo Vam se, razjasniti situaciju i raditi na daljinu dok incident nije zaključen i dokumentiran.

Hitna pomoć