WordPress Hackerato: Protocollo di Bonifica Completo

Il tuo WordPress è stato hackerato? Redirect a siti spam, popup malevoli, nuovi utenti admin che non hai creato? Segui questo protocollo di bonifica completo per ripulire il sito e prevenire reinfezioni.

Sintomi di un Sito Compromesso

  • Redirect automatici a siti di spam/phishing
  • Popup pubblicitari non autorizzati
  • Nuovi utenti amministratori sconosciuti
  • File .htaccess modificato con codice strano
  • Google Search Console segnala “sito compromesso”
  • Email spam inviate dal server
  • File PHP sconosciuti nella cartella uploads

Step 1: Verifica Checksum dei File Core

Il primo controllo è verificare se i file core di WordPress sono stati modificati:

# Verifica integrità dei file core WordPress
wp core verify-checksums

# Output se compromesso:
# Warning: File doesn't verify against checksum: wp-includes/version.php
# Warning: File doesn't exist: wp-includes/class-wp.php
# Warning: File was added: wp-includes/malware.php

Se vedi “File doesn’t verify” o “File was added”, il core è stato compromesso.


Step 2: Reinstallazione Core Pulita

Scarica e reinstalla tutti i file core WordPress senza toccare wp-content:

# Scarica e sovrascrive SOLO i file core
wp core download --force --skip-content

# Verifica la versione
wp core version

# Rigenera le salt keys (invalida tutte le sessioni attive)
wp config shuffle-salts

Perché --skip-content? Così non tocchiamo plugin, temi e uploads che analizzeremo separatamente.


Step 3: Scansione Malware nei Plugin/Temi

Cerca pattern di codice malevolo comuni:

# Codice offuscato base64
grep -rn "eval(base64_decode" wp-content/
grep -rn "eval(gzinflate" wp-content/
grep -rn "eval(gzuncompress" wp-content/

# Esecuzione dinamica pericolosa
grep -rn "eval(\$_" wp-content/
grep -rn "assert(\$_" wp-content/
grep -rn "preg_replace.*\/e" wp-content/

# Backdoor comuni
grep -rn "file_put_contents.*\$_" wp-content/
grep -rn "\$_POST\[.*\]\s*(" wp-content/
grep -rn "\$_GET\[.*\]\s*(" wp-content/
grep -rn "shell_exec\|passthru\|system\(" wp-content/

File PHP in Uploads (Red Flag!)

Non dovrebbero MAI esserci file PHP nella cartella uploads:

# Trova tutti i file PHP in uploads
find wp-content/uploads -name "*.php" -type f

# Se ne trovi, sono quasi certamente malware
# Elimina dopo aver verificato il contenuto

File Modificati di Recente

# File PHP modificati negli ultimi 7 giorni
find wp-content/ -type f -mtime -7 -name "*.php"

# File PHP modificati nelle ultime 24 ore
find wp-content/ -type f -mtime -1 -name "*.php"

Step 4: Pulizia Database – Utenti Malevoli

Gli hacker spesso creano utenti admin nascosti:

# Lista TUTTI gli amministratori
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered

# Controlla:
# - Utenti che non riconosci
# - Email sospette
# - Data di registrazione strana

# Elimina utenti sospetti (riassegna contenuti all'admin legittimo)
wp user delete SUSPICIOUS_ID --reassign=1

# Cambia password a TUTTI gli admin
wp user update 1 --user_pass="NuovaPasswordMoltoSicura2026!"

Step 5: Pulizia Options e Transients

Malware spesso si nasconde nella tabella wp_options:

# Cerca options con codice sospetto
wp db query "SELECT option_name, LEFT(option_value, 100) FROM wp_options WHERE option_value LIKE '%eval%'"
wp db query "SELECT option_name, LEFT(option_value, 100) FROM wp_options WHERE option_value LIKE '%base64_decode%'"

# Cerca nei widget (spesso target di injection)
wp db query "SELECT option_name, LEFT(option_value, 200) FROM wp_options WHERE option_name LIKE '%widget%'"

# Pulisci transients (spesso usati per persistenza)
wp transient delete --all

Step 6: Pulire .htaccess e wp-config.php

Questi file sono spesso modificati per redirect malevoli:

# Rigenera .htaccess pulito
wp rewrite flush --hard

# Verifica wp-config.php manualmente
head -50 wp-config.php

# Cerca codice PRIMA di <?php (injection comune)
# Cerca require/include sospetti

Template .htaccess Pulito

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Step 7: Hardening Post-Bonifica

# 1. Aggiorna TUTTO
wp core update
wp plugin update --all
wp theme update --all

# 2. Elimina temi/plugin non usati
wp plugin delete hello
wp theme delete twentytwentytwo twentytwentythree

# 3. Rigenera salt keys
wp config shuffle-salts

# 4. Verifica permessi file
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
chmod 600 wp-config.php

# 5. Disabilita editor file da admin
wp config set DISALLOW_FILE_EDIT true --raw

Checklist Bonifica Completa

□ wp core verify-checksums (identifica file compromessi)
□ wp core download --force --skip-content (reinstalla core)
□ grep malware patterns in wp-content/
□ find PHP in uploads/ (elimina tutti)
□ wp user list --role=administrator (elimina sospetti)
□ Controlla wp_options per codice malevolo
□ Rigenera .htaccess pulito
□ Verifica wp-config.php
□ wp config shuffle-salts
□ Cambia TUTTE le password (WP, FTP, DB, hosting)
□ wp plugin update --all && wp core update
□ Richiedi rimozione blacklist Google

Reinfezione continua? Potrebbe esserci una backdoor che non hai trovato, o il server stesso è compromesso. Contattaci per un security audit completo.