Otvaraš sajt, ali umjesto svoje stranice vidiš oglas za viagru, kazino redirect, ili crnu stranicu s "Hacked by ..." porukom. Ili Google ti je javio da je sajt označen kao malware i miče te iz pretrage. Ili klijenti ti šalju screenshote phishing emaila koji izgledaju kao da dolaze s tvoje domene. Panic mode. Ovaj post je 24-satni playbook — što napraviti prvih 30 minuta, prvih sat vremena, prvih 12 sati, i kako spriječiti da se ponovi.
Prvih 30 minuta: damage control
Cilj: zaustavi širenje, sačuvaj dokaze, obavijesti prave ljude.
1. Procijeni što je hakirano
- Cijeli sajt — homepage je defaced ili redirect
- Specifične stranice — admin više ima skrivene linkove na nepotrebne sajtove
- Database — content je promijenjen, novi admin user-i postoje
- Email server — phishing šalje se iz tvojih account-a
- File system — sumnjivi PHP fileovi (backdoor scripts) ubačeni
- cPanel — netko ima admin pristup
2. Stavi sajt u maintenance mode
Spriječi posjetitelje da vide kompromitirani sadržaj ili da budu izloženi malware-u:
- WordPress: aktiviraj maintenance mode plugin, ili stvori prazan file
.maintenanceu root-u s WP timer kodom - Cloudflare: aktiviraj "Under Attack Mode" u Security tabu
- cPanel: možeš preusmjeriti sve requeste na "Maintenance" stranicu kroz .htaccess
3. Snimi dokaze (forensics)
Ovo je kritično jer ti može trebati za insurance, prijavu, ili kasnije identifikaciju vector-a:
- Screenshot defaced stranice
- Backup error_log i access_log iz cPanel-a → Metrics → Raw Access
- Backup current state baze (mysqldump)
- Backup current state fileova (tar arhiva public_html foldera)
- Listanje datuma izmjene fileova (preko SSH find komande s -mtime parametrom — vidiš što je editirano zadnjih 30 dana)
4. Promijeni SVE lozinke odmah
Po prioritetu:
- cPanel password
- FTP/SFTP password
- SSH ključ (ako koristiš SSH, regeneriraj)
- MySQL root + sve DB users
- WordPress admin password
- Sve email account passwords
- API ključevi (Stripe, Mailchimp, Google itd.)
Bitno: koristi 20+ znakova random lozinke. Ne "MojaJaka123!" — to puca u 5 minuta.
Prvih sat vremena: identifikacija ulaza
Cilj: razumjeti KAKO su ušli, ne samo POPRAVITI što su napravili.
5. Provjeri datum izmjene fileova
Preko SSH koristi find komandu s -mtime parametrom:
- Fileovi izmijenjeni zadnjih 7 dana (osim cache-a)
- PHP fileovi izmijenjeni zadnjih 7 dana — ovo je obično attack vector
- Fileovi sa sumnjivim imenima (shell, .bak.php, wp-config-backup itd.)
Vidjet ćeš listu — često je u njoj jedan file koji je ulazna točka i 10-20 ostalih koji su payload.
6. Pretraži poznate backdoor signature-e
Najčešći patterni koje treba potražiti u PHP fileovima sa grep komandom (rekurzivno kroz public_html):
- Base64-kodirane PHP eval expressions (combinacija evaluacijske funkcije i base64 dekoder-a)
- PHP funkcije koje izvršavaju POST parametre direktno
- Gzinflate + base64 kombinacije (compressed obfuscated kod)
- preg_replace sa /e modifier-om (legacy code execution vector)
- Funkcije za izvršavanje system komandi (passthru, system, shell-exec varijante)
Bilo koja od tih funkcija u tvom PHP kodu koji NIJE dio standardnog WP/plugin core-a = backdoor.
7. Provjeri access_log
Tipičan attack vector ima 3 phase u logu:
- Scan — puno requesta na
wp-login.php,xmlrpc.php, ili poznate vulnerable plugin URL-ove - Exploitation — POST request s veliki body-em (payload)
- Backdoor establishment — request na novocreated PHP file
U cPanel → Metrics → Raw Access → download log → grep za IP adrese koje su radile sumnjive POST requeste.
8. Najčešći attack vector-i u 2026
- Outdated plugin (npr. stari WP File Manager, Elementor Pro, Slider Revolution) — 60% svih attack-a
- Outdated WordPress core
- Brute force na wp-login.php bez 2FA
- Compromised admin credentials (phishing, password reuse)
- Vulnerable theme (često nulled/pirated themes)
- SQL injection u custom kodu
- File upload bez validacije (form upload field koji prima .php)
Prvih 12 sati: čišćenje
Cilj: ukloniti svu malicioznost, vratiti čisto stanje.
9. Strategija: clean restore + manual cleanup
Nemoj pokušavati "manual clean" hakeran sajt linijski po linijski. Pristup koji radi:
- Identificiraj zadnji čisti backup (prije infekcije) — JetBackup ima history
- Restoriraj na staging environment (ne direktno preko production)
- Update sve — WordPress core, sve pluginove, sve teme, PHP verzija
- Skeniraj restorirani sajt sa Wordfence, Sucuri Sitecheck, ili Imunify360
- Ako je čist → switch DNS na staging, ugasi production
- Ako nije čist → backup je starije od infekcije. Idi dublje u backup.
10. Brisanje koruptiranih fileova
Ako ne možeš full restore (npr. previše novog content-a nakon infekcije):
- Briši SVE PHP fileove u
wp-content/uploads/(uploads folder NIKAD ne smije imati PHP) - Briši sve PHP fileove koji nisu dio standardne WP/plugin/theme strukture
- Re-install WordPress core sa fresh ZIP-a
- Re-install sve pluginove (briši cijele plugin foldere, reinstaliraj)
- Re-install temu, ali sačuvaj
wp-content/themes/your-child-theme/ako si ga koristio
11. Database cleanup
- Login u phpMyAdmin
- Pregledaj
wp_userstablicu — provjeri postoje li novi admin korisnici - Pregledaj
wp_optionstablicu za sumnjive transient unose - Provjeri
wp_poststablicu za injected content (skrivene linkove) - Search za base64 stringove u
wp_options,wp_posts
12. Reset svega što je credential-based
- Sve API keys (Stripe, Mailchimp, social media)
- Sve OAuth tokens (revoke + re-issue)
- Sve session tokens (preko WP-CLI:
wp user session destroy --all) - Sve "Remember me" cookies (force re-login svih korisnika)
Nakon 24 sata: stabilizacija
13. Hardening
- Aktiviraj 2FA na wp-admin (WP 2FA plugin)
- Aktiviraj 2FA na cPanel
- Aktiviraj Imunify360 ili Wordfence
- Postavi Cloudflare ili Sucuri WAF
- Disable file editing u
wp-config.php:define('DISALLOW_FILE_EDIT', true); - Disable XMLRPC ako ne koristiš
- Limit login attempts (Limit Login Attempts Reloaded plugin)
- Blokiraj direktni pristup wp-admin sa svih IP-eva osim tvojih
14. Obavijesti
- Google Search Console → ako je sajt blacklist-an, podnesi review request
- Klijente ako su podaci možda kompromitirani (GDPR — 72h obavezno)
- AZOP ako su personal data breach (GDPR Članak 33)
- Bank / payment provider ako su credit card data u igri
15. Monitoring
- Tjedna scan sa Wordfence / Sucuri
- Dnevno Google Search Console - "Security Issues"
- Dnevno cPanel - novi login locations
- Tjedna provjera File Manager - sumnjivi novi fileovi
- Mjesečna review wp_users - novi admin korisnici
Što NE napraviti
- NE briši sve odmah — gubiš dokaze i možda važan content
- NE plaćaj ransom ako je ransomware — nećeš dobiti pristup nazad, samo financiraš slijedeći attack
- NE ostavi production aktivan dok forensics traje — sajt nastavlja širiti malware
- NE restoraj backup preko production-a direktno — staging prvo
- NE re-use stare lozinke — sve nove, sve random
- NE ignoriraj root cause — ako ne razumiješ kako su ušli, ući će opet
WMD pristup hacked sajtu
Na WMD upravljanim paketima:
- Imunify360 detection u realnom vremenu — vidimo malware obično prije nego klijent javi
- Automatska kvarantena sumnjivih fileova
- JetBackup s 30 dana retencije — restore na pred-infekcijsko stanje u 5 minuta
- Forensics asistencija — pomoć u identifikaciji attack vector-a
- Hardening konzultacija nakon incidenta — što napraviti da se ne ponovi
- 24/7/365 hrvatski support — kad je 03:00 i sajt je defaced, dobivaš nekog u 15 minuta
- WAF + brute force protection standardno
- Mod_security + ClamAV server-side
Realna procjena: koliko dugo traje recovery
- Mali sajt, čist backup postoji, samo defacement: 2-4 sata
- Srednji sajt, backup je infiltriran ali starije čisto stanje postoji: 4-12 sati
- Webshop s 5000 proizvoda, kompromitirane transakcije: 12-48 sati
- Enterprise sajt, custom code, multi-server: nekoliko dana, vjerojatno externa forensics firma
Sajt ti je hakiran a ne znaš odakle početi? Pošalji nam pristupne podatke. Tipično: dijagnoza i čišćenje u 4-12 sati, hardening dodatnih 1-2 sata. Standardno bez naplate ako preuzimaš godišnju pretplatu. Ako si na drugom hostingu — uključujemo migraciju i forensics u istom paketu.