Saltar al contenido principal
WordPress

WordPress hackeado: cómo limpiar y proteger tu sitio paso a paso

Guía completa para limpiar un WordPress hackeado. Diagnóstico, eliminación de malware, restauración segura y medidas de protección post-incidente.

Equipo Moshipp12 de mayo de 202613 min de lectura
Pantalla de código con alerta de seguridad sobre un fondo oscuro
Foto: Unsplash

Encontrarse con un WordPress hackeado es una de las experiencias más estresantes para cualquier dueño de sitio. Anuncios fraudulentos, redirecciones a casinos, robo de datos de clientes, advertencias rojas de Google, IPs bloqueadas: el daño puede crecer hora a hora si no actúas rápido.

Esta guía te lleva paso a paso por el proceso completo: detectar la infección, contener el daño, limpiar el sitio, restaurar la operación y prevenir que vuelva a pasar.

Señales de que tu WordPress fue hackeado

Algunas son evidentes, otras pasan desapercibidas semanas:

Señales obvias

  • Tu sitio redirige a otro dominio (casino, farmacia, porno).
  • Aparecen banners o popups que tú no instalaste.
  • El contenido de páginas fue modificado (textos extraños en otro idioma, enlaces salientes raros).
  • Google muestra “Este sitio puede dañar tu equipo” en los resultados.
  • Tu hosting te avisó por correo y/o suspendió la cuenta.

Señales sutiles (más graves a largo plazo)

  • Páginas inexistentes en /wp-content/uploads/ con nombres extraños.
  • Usuarios admin nuevos que tú no creaste.
  • Archivos .php en /wp-content/uploads/ (NUNCA deberían existir ahí).
  • Procesos PHP consumiendo CPU del servidor.
  • Aparece tu sitio en blacklists (Spamhaus, McAfee).
  • Tráfico repentino de bots desde IPs raras.

Primer paso: NO cierres tu sitio sin antes proteger evidencia

Si pones el sitio en “mantenimiento”, pierdes acceso a logs del momento del ataque. Antes de cerrarlo: descarga logs, snapshot de la BD, snapshot del filesystem. Estos artefactos son críticos para diagnóstico.

Paso 1: Contener el daño (primeros 15 minutos)

A. Cambia todas las contraseñas críticas

  • Tu correo de admin de WordPress.
  • Cuenta de hosting (cPanel/Plesk/SSH).
  • Cuenta FTP/SFTP.
  • Base de datos MySQL.
  • Cuentas asociadas (Google Workspace, dominio registrar, Cloudflare, etc.).

Usa contraseñas únicas y de 20+ caracteres. Activa 2FA donde sea posible.

B. Pon el sitio en modo mantenimiento

Crea un archivo .maintenance en la raíz con:

<?php $upgrading = time(); ?>

WordPress mostrará “Programado para mantenimiento” en vez de la versión hackeada. Reduce daño a visitantes y SEO.

Alternativa más visible: usa el plugin WP Maintenance Mode.

C. Bloquea el acceso wp-admin

Edita .htaccess en /wp-admin/:

order deny,allow
deny from all
allow from TU.IP.PUBLICA.AQUI

Reemplaza con tu IP pública (búscala en https://whatismyip.com). Así solo tú puedes entrar al panel mientras limpias.

D. Si el hosting bloqueó la cuenta

Contacta soporte y pide:

  1. Que te dejen acceso por FTP/SSH (aunque el sitio público esté bloqueado).
  2. Logs de acceso del último mes.
  3. Snapshot completo de la BD y archivos antes de cualquier acción.

Paso 2: Backup forense del sitio infectado

Antes de tocar nada, guarda una copia exacta del estado actual. Es tu evidencia y tu seguro si limpiando rompes algo.

Backup de archivos (vía SSH o FTP)

tar -czf hackeado-$(date +%Y%m%d).tar.gz /var/www/tusitio

Backup de la base de datos

mysqldump -u USUARIO -p NOMBREBD > hackeado-bd-$(date +%Y%m%d).sql

Descárgalos a tu equipo y a un drive externo. No los borres aunque limpies el sitio.

Paso 3: Diagnosticar la infección

Herramienta 1: Wordfence (gratis)

  1. Instala Wordfence desde wp-admin → Plugins.
  2. Ve a Wordfence → ScanStart New Scan.
  3. Espera 5-30 minutos según tamaño del sitio.

Wordfence identifica:

  • Archivos core de WordPress modificados.
  • Archivos sospechosos en /wp-content/uploads/.
  • Backdoors comunes.
  • Plugins/temas con vulnerabilidades conocidas.

Herramienta 2: Sucuri SiteCheck (web)

https://sitecheck.sucuri.net → ingresa tu dominio.

Te dice:

  • Si tu sitio está en blacklists.
  • Si hay malware visible desde fuera.
  • Versión de WordPress detectada (que NO debería ser pública).

Herramienta 3: Búsqueda manual por SSH

# Busca archivos PHP en uploads (no deberían existir)
find /var/www/tusitio/wp-content/uploads -name "*.php"

# Busca backdoors comunes
grep -rl "eval(base64_decode" /var/www/tusitio
grep -rl "system(\$_GET" /var/www/tusitio
grep -rl "preg_replace.*\/e" /var/www/tusitio

# Archivos modificados en los últimos 14 días
find /var/www/tusitio -name "*.php" -mtime -14 -ls

Cualquier match es sospechoso. Si encuentras código ofuscado tipo:

<?php eval(gzinflate(base64_decode('H4sIAAAA...'))); ?>

Es malware casi seguro.

Indicador de malware: archivos PHP que terminan en números o letras random

Como wp-content/uploads/2024/03/abc123.php o wp-content/yhk6gd9.php. WordPress legítimo nunca tiene archivos PHP en estas ubicaciones.

Paso 4: Limpiar la infección

Opción A: Restaurar desde backup limpio (lo más rápido)

Si tienes un backup de antes de la infección:

  1. Verifica la fecha del backup limpio.
  2. Restaura archivos y BD desde ese backup.
  3. Aplica actualizaciones de WordPress, plugins y temas.
  4. Cambia contraseñas (otra vez).
  5. Salta al Paso 6.

Pero ojo: si la infección lleva más tiempo que tu backup más viejo, esta opción no sirve.

Opción B: Limpieza manual archivo por archivo

Sin backup limpio, toca limpieza profunda:

B.1. Reemplaza WordPress core

  1. Descarga la versión actual de WordPress desde https://wordpress.org/download/.
  2. Por FTP, elimina las carpetas /wp-admin/ y /wp-includes/ del servidor.
  3. Sube las nuevas desde el ZIP que descargaste.
  4. NO toques /wp-content/ aún (ahí están tus uploads y plugins).

B.2. Reemplaza plugins y temas

  1. Lista los plugins instalados (/wp-content/plugins/).
  2. Elimina cada plugin del servidor.
  3. Reinstala desde WordPress.org o del autor oficial. Nunca uses fuentes piratas (nulled themes/plugins) — son fuente común de hackeos.
  4. Mismo proceso para temas.

B.3. Limpia /wp-content/uploads/

# Encuentra todos los archivos PHP en uploads y revísalos uno por uno
find /var/www/tusitio/wp-content/uploads -name "*.php"

# Si confirmas que son malware, bórralos
find /var/www/tusitio/wp-content/uploads -name "*.php" -delete

B.4. Limpia la base de datos

Conéctate a phpMyAdmin o MySQL CLI.

Busca usuarios admin sospechosos:

SELECT ID, user_login, user_email, user_registered
FROM wp_users
WHERE ID IN (SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_capabilities' AND meta_value LIKE '%administrator%');

Elimina cualquier admin que no reconozcas.

Busca opciones modificadas:

SELECT * FROM wp_options
WHERE option_value LIKE '%<script%'
   OR option_value LIKE '%eval(%'
   OR option_value LIKE '%base64_decode%';

Limpia posts y páginas con JS inyectado:

SELECT ID, post_title FROM wp_posts
WHERE post_content LIKE '%<script src=http%'
   OR post_content LIKE '%eval(base64%';

Edita esos posts y elimina el código inyectado.

B.5. Revisa archivos .htaccess

Los atacantes suelen añadir reglas al .htaccess raíz para redireccionar tráfico:

# REDIRECCIÓN MALICIOSA TÍPICA
RewriteCond %{HTTP_USER_AGENT} (google|bing|yahoo) [NC]
RewriteRule .* http://sitio-malicioso.com [R=302,L]

Restaura .htaccess a sus valores estándar de WordPress (ver guía de error 500).

B.6. Revisa wp-config.php

Verifica que no haya código extra antes de <?php o después del cierre. Cualquier código fuera del bloque legítimo es malicioso.

Cambia los AUTH_KEYs:

curl https://api.wordpress.org/secret-key/1.1/salt/

Pega los nuevos valores en wp-config.php. Esto invalida sesiones de cookies robadas.

Paso 5: Verificación post-limpieza

Escaneo final

  1. Wordfence: ejecuta Scan completo otra vez. No deberían quedar amenazas.
  2. Sucuri SiteCheck: tu sitio debería salir “Clean”.
  3. VirusTotal: ingresa tu dominio en https://www.virustotal.com → debería pasar todos los motores.

Pide revisión a Google

Si Google marcó tu sitio como “no seguro”:

  1. Entra a https://search.google.com/search-console.
  2. Problemas de seguridad → “Solicitar revisión”.
  3. Describe qué hiciste (limpieza, actualización, hardening).
  4. Google revisa en 24-72 horas.

Pide salida de blacklists

Si tu IP/dominio entró en blacklists:

Cada uno tiene formularios de delisting.

Paso 6: Hardening (que no vuelva a pasar)

Tu sitio limpio dura limpio si endureces la configuración:

Seguridad básica obligatoria

  • Actualiza todo: WordPress, plugins, temas, PHP del servidor. Mensualmente.
  • Activa 2FA en wp-admin (Wordfence Premium o Two Factor Authentication).
  • Limita intentos de login: Wordfence Limit Login Attempts.
  • Cambia la URL de login: WPS Hide Login → /mi-acceso-secreto en vez de /wp-admin.
  • Backups automáticos diarios (UpdraftPlus o el del hosting).
  • SSL activo (ver guía SSL Let’s Encrypt).

Seguridad avanzada

  • Firewall a nivel servidor (ModSecurity, Cloudflare WAF).
  • Bloquea XML-RPC si no usas Jetpack/apps móviles (en .htaccess):
    <Files xmlrpc.php>
      Order allow,deny
      Deny from all
    </Files>
  • Restringir wp-config.php:
    <Files wp-config.php>
      Order allow,deny
      Deny from all
    </Files>
  • Deshabilitar edición de archivos desde admin: en wp-config.php:
    define('DISALLOW_FILE_EDIT', true);
  • Cambia el prefijo de tablas: WordPress por defecto usa wp_. Cámbialo a algo random (ej: xy7_). Muchos exploits asumen wp_.

Plugin de seguridad recomendado

  • Wordfence (gratis + Premium $99/año): el más completo. Firewall, escaneo, 2FA.
  • Sucuri Security (gratis + Pro $199/año): excelente firewall externo.
  • iThemes Security (gratis + Pro $80/año): hardening masivo en pocos clicks.

Combina uno solo (no varios juntos: pelean entre sí).

Por qué fuiste hackeado

Las 5 causas más comunes:

  1. Plugin/tema desactualizado con vulnerabilidad conocida.
  2. Contraseña débil de admin crackeada por brute force.
  3. Plugin/tema nulled (pirata) con backdoor incrustado.
  4. PHP/WordPress core viejo sin parchear.
  5. Hosting compartido vulnerado por otro sitio del mismo servidor (cross-contamination).

El #5 es especialmente común en hostings baratos. Si tu vecino del hosting compartido es vulnerado, los atacantes saltan a tu cuenta. La solución: hosting con isolation real (Cloud WordPress, VPS).

Preguntas frecuentes

¿Cuánto cuesta que una empresa especializada limpie mi WordPress?

Entre $200 y $1500 USD según complejidad. Empresas como Sucuri cobran $199/año por limpieza + monitoreo. Si haces autoservicio con esta guía, el costo es solo tu tiempo (4-12 horas según experiencia).

¿Mis clientes perdieron datos?

Depende del tipo de hack. Si los atacantes accedieron a la base de datos, sí, posiblemente robaron emails, hashes de contraseñas o (si era e-commerce) datos de pago. Aviso obligatorio: notifica a tus usuarios. En Colombia rige la Ley 1581 sobre habeas data.

¿Cuánto tarda Google en quitar la advertencia de mi sitio?

24-72 horas después de solicitar revisión en Search Console, si la limpieza es efectiva. Si Google detecta que aún hay malware, la advertencia se mantiene y debes volver a limpiar.

¿Puedo limpiar yo o necesito experto?

Si tienes conocimiento básico de FTP/SSH y SQL, sí puedes con esta guía. Si tu sitio mueve >$1000/mes o tiene info sensible de clientes, vale la pena pagar a un experto para asegurar la limpieza al 100%.

¿Sigue siendo necesario WordPress si fui hackeado?

Sí, WordPress no es inseguro per se. El 95% de los hackeos vienen de plugins/temas viejos, contraseñas débiles o hosting compartido inseguro. Mantenido bien, WordPress es seguro. La alternativa (hacer todo desde cero en otro CMS) no soluciona la causa real.

¿Cuánto debo esperar para reabrir el sitio al público?

Después de: (1) escaneo final limpio en Wordfence y Sucuri, (2) cambio de TODAS las contraseñas, (3) hardening básico activo. Si dudas, espera 24 horas adicionales para verificar que nada vuelve. Es preferible un día más cerrado que reabrir con la infección viva.

¿Qué pasa si me vuelven a hackear?

Significa que el vector de entrada original sigue abierto. Causas frecuentes: plugin nulled sigue instalado, backdoor que no detectaste, credenciales que no cambiaste, o vulnerabilidad del hosting. Considera migrar a hosting administrado (Cloud WordPress) con isolation real y monitoreo activo.

Conclusión

Recuperar un WordPress hackeado no es divertido, pero es completamente posible siguiendo el orden correcto: contener → backup forense → diagnosticar → limpiar → verificar → endurecer. El tiempo total: 4 a 12 horas para un sitio normal.

Lo más importante es prevenir que vuelva: hosting decente con isolation, actualizaciones automáticas, 2FA en admin, backups diarios y un firewall serio. Sale más barato que limpiar dos veces.

En Moshipp, nuestros planes Cloud WordPress incluyen Wordfence, monitoreo de malware, backups diarios y soporte técnico en español. Si tu sitio actual fue hackeado y prefieres migrar a un entorno blindado, hacemos la migración gratis.

Sigue aprendiendo

Migración sin complicaciones

¿Migrar desde otro proveedor de hosting?

¿Estás cansado de la falta de rapidez y seguridad en tu sitio web? ¡Migra a Moshipp y obtén un servicio de hosting de calidad superior!

Más de 10,000 sitios web migrados con éxito