Cómo eliminar malware de WordPress en 24 horas: Guía práctica paso a paso
Cuando analizo un sitio WordPress infectado, lo primero que hago es evaluar la urgencia: ¿cuánto tiempo lleva el malware activo? ¿cuántos usuarios se han visto afectados? La realidad es que no siempre puedes limpiar un WordPress completamente en 24 horas, pero sí puedes contener la infección, mitigar daños y establecer un plan de remediación. En mi experiencia, el factor crítico es actuar con rapidez pero sin precipitación.
En este artículo te muestro el protocolo que sigo en ManuelFolgar.com para desinfectar WordPress de forma profesional, minimizando el tiempo de inactividad y evitando que el malware resurja.
Paso 1: Detecta el malware antes de las primeras 2 horas
Lo primero es confirmar que tu sitio realmente está comprometido. Muchos propietarios actúan sin certeza, lo que retrasa la respuesta real.
Señales de alerta que he visto cientos de veces
- Redirecciones inesperadas hacia sitios de casinos, farmacia o enlaces de afiliados maliciosos.
- Contenido spam en tus páginas que no escribiste: publicidades, enlaces ocultos, texto en blanco sobre blanco.
- Caída en ranking de Google o desindexación (compruébalo en Search Console).
- Alertas de Google: «Sitio infectado» en los resultados de búsqueda.
- Archivos nuevos en carpetas como /uploads con nombres extraños: shell.php, base64_encoded_file.php.
- Consumo inusual de CPU o memoria en tu hosting.
- Cambios en wp-config.php o .htaccess que no hiciste.
Herramientas de escaneo rápido (primeras 30 minutos)
Usa estas herramientas sin necesidad de confiar únicamente en tu hosting:
- VirusTotal: sube el URL de tu sitio. 90 antivirus diferentes lo analizan en segundos.
- Sucuri SiteCheck: detecta malware conocido, blacklists y problemas de seguridad.
- Google Search Console: mira «Seguridad» → «Problemas de seguridad» para ver qué malware Google ha identificado.
- Wordfence Security (plugin): escaneo completo del sitio desde WordPress. Si el sitio no carga, instálalo en desarrollo.
Si alguna herramienta detecta malware, pasa al Paso 2 inmediatamente. No esperes confirmación de varias fuentes.
Paso 2: Entra en modo aislamiento (hora 2-4)
Ahora el objetivo es que el malware no siga propagándose mientras lo analizas.
Acciones inmediatas
- Desconecta el sitio del público: reemplaza el contenido del index.php temporal con un mensaje «En mantenimiento». Esto detiene la infección de nuevos usuarios.
- Descarga una copia completa del sitio vía SFTP/SSH a tu máquina local. Necesitarás analizarlo sin conectar a internet (al menos en quarantine).
- Haz una copia de la base de datos (phpMyAdmin → Exportar). Será tu punto de recuperación.
- Cambia todas las contraseñas inmediatamente: WordPress (admin), hosting (cPanel/Plesk), FTP/SFTP, base de datos. El malware probablemente tiene credenciales.
- Revoca tokens de API y webhooks de servicios externos conectados a WordPress (Stripe, Mailchimp, etc.). Si el malware tiene acceso, puede filtrar datos.
En este punto, tu sitio está «congelado» pero seguro para análisis.
Paso 3: Escanea y localiza el malware (hora 4-8)
Aquí es donde la mayoría de propietarios falla: intentan usar únicamente plugins o herramientas automatizadas. Eso no es suficiente. Necesitas análisis manual.
Búsqueda sistemática de archivos maliciosos
El malware típicamente se oculta en:
- Plugins y temas desactualizados o «nulled»: versiones pirata que vienen con puertas traseras. Busca en /wp-content/plugins y /wp-content/themes.
- Carpeta /uploads: webshells, archivos ejecutables disfrazados de imágenes, directorios nuevos con nombres genéricos.
- wp-config.php: código inyectado al inicio o final del archivo. Abre con un editor de texto, no mires solo el tamaño.
- .htaccess (raíz y subcarpetas): redirecciones, inyecciones de código.
- index.php y otros archivos core: si están modificados (compara con una instalación limpia).
- wp-content/index.php: a menudo inyectado.
Técnica manual de detección
Abre wp-config.php con un editor decente (VS Code, Sublime). Busca patrones sospechosos:
- Código base64_decode(), eval(), assert(), system(), passthru(), exec().
- Variables que no reconoces como $_POST, $_GET procesadas sin validar.
- Conexiones a dominios externos raros.
- Líneas muy largas o ofuscadas (código comprimido/encriptado).
En carpetas /uploads, busca archivos .php, .phtml, .phar cuando solo debería haber imágenes. Usa terminal (SSH):
find /home/tu_usuario/public_html/wp-content/uploads -type f -name "*.php" -o -name "*.phtml"
Cualquier resultado es sospechoso. Elimínalo (o muévelo a quarantine local primero).
Análisis de base de datos
El malware también vive en la BD. Accede con phpMyAdmin y:
- Busca en wp_posts y wp_postmeta: contenido spam, guiones, caracteres raros.
- Revisa wp_options: valores de opciones que no reconoces (muchos skimmers usan wp_options para esconder código).
- Mira usuarios: ¿hay cuentas admin nuevas que no creaste?
Ejecuta esta consulta (reemplaza tu prefijo si no es «wp_»):
SELECT * FROM wp_users ORDER BY user_registered DESC LIMIT 10;
Identifica usuarios sospechosos por fecha de registro (coinciden con la infección).
Paso 4: Elimina el malware (hora 8-16)
Una vez localizados los archivos infectados, la eliminación es directa pero requiere cuidado.
Eliminación de archivos
- Borra todos los archivos sospechosos detectados en Paso 3. Vía SFTP o SSH: rm /ruta/archivo.php.
- Reemplaza plugins y temas comprometidos: no actualices, elimina completamente y reinstala desde wordpress.org.
- Limpia wp-config.php y .htaccess: si encontraste inyecciones, restaura desde tu copia limpia o genera nuevas claves de seguridad en api.wordpress.org/secret-key.
- Restaura archivos core de WordPress: descarga la versión correcta desde wordpress.org, extrae los archivos de /wp-admin y /wp-includes, y reemplaza los tuyos vía SFTP.
Limpieza de base de datos
- Elimina usuarios admin no autorizados en WordPress admin panel o phpMyAdmin.
- Borra posts spam: en la BD, DELETE FROM wp_posts WHERE post_type = ‘post’ AND post_content LIKE ‘%casino%’; (ajusta según el spam detectado).
- Limpia opciones sospechosas: DELETE FROM wp_options WHERE option_name LIKE ‘%malware%’; o similar.
Actualiza todas las contraseñas nuevamente
Aunque ya lo hiciste, repítelo ahora que has eliminado el acceso del malware. Usa contraseñas de 20+ caracteres, aleatorias, con mayúsculas, minúsculas, números y símbolos. WordPress admin → Usuarios → edita cada perfil.
Paso 5: Verifica que está limpio (hora 16-20)
No des por limpio el sitio hasta que lo confirmes con múltiples herramientas.
Escaneos post-limpieza
- Vuelve a ejecutar Wordfence, Sucuri SiteCheck y VirusTotal. Si reportan limpio, buen signo.
- Revisa Google Search Console → Cobertura: ¿sigue diciendo «Infectado»? Google tarda 1-2 semanas en revisar, pero puedes solicitar revisión manual.
- Verifica manualmente: abre el sitio en navegador incógnito, navega por varias páginas, busca redirecciones o contenido extraño.
Análisis de tráfico web
Revisa los logs de acceso de tu servidor (en el hosting, archivo access.log):
- ¿Hay peticiones a archivos .php en /uploads? (rojo vivo)
- ¿Accesos a wp-admin desde IPs extrañas? (sospechoso si no es tú)
- ¿User-agents raros tipo bots de minería de criptos? (detener inmediatamente)
Si todo se ve limpio, continúa.
Paso 6: Endurece WordPress para evitar reinfecciones (hora 20-24)
Los últimos pasos son críticos: prevención. Sin hardening, el mismo malware volverá en 2 semanas.
Configuración de seguridad imprescindible
- Deshabilita la edición de archivos en WordPress: añade a wp-config.php: define(‘DISALLOW_FILE_EDIT’, true);
- Limita intentos de login: instala Wordfence o similar. Máximo 5 intentos fallidos por IP en 5 minutos.
- Cambia la URL de login de /wp-login.php a algo genérico. Wordfence lo hace automáticamente.
- Protege wp-config.php con .htaccess: <order allow,deny<allow from all
- Activa 2FA (autenticación de dos factores) en wp-login para todos los usuarios admin.
- Actualiza WordPress, plugins y temas cada semana. Vulnerabilidades 0-day aparecen constantemente.
- Usa headers de seguridad HTTP: Content-Security-Policy, HSTS, X-Frame-Options. Añádelos en .htaccess o en el servidor web.
Cambios en base de datos
- Cambia el prefijo de tablas de «wp_» a algo aleatorio como «a7x2y_». Esto requiere plugin como wpdb-prefix-changer.
- Limpia la papelera de WordPress: Artículos → Papelera → Vaciar. El malware a veces se esconde ahí.
Copias de seguridad automáticas
Configura backups diarios. Si el malware vuelve a entrar, recuperas en minutos sin perder 2 días más limpiando.
- Plugin: UpdraftPlus, BackWPup, Jetpack Backup.
- Hosting: muchos incluyen backup automático (cPanel AutoBackup, etc.).
- Externo: almacena copias en Google Drive, Dropbox, AWS S3.
¿Y si no termino en 24 horas?
Realista: un WordPress con malware complejo (Magecart, cryptominer, backdoor profundo) puede requerir 2-3 días. Lo importante es que durante esas 24 primeras horas:
- Hayas aislado el sitio (no infecta más usuarios).
- Hayas localizado el 80% del malware.
- Hayas prevenido el re-acceso del atacante.
Si después de 24 horas aún detectas comportamiento malicioso, es hora de llamar a profesionales. En ManuelFolgar.com hemos limpiado cientos de WordPress en 48-72 horas incluso con malware persistente.
Errores que NO debes cometer
- Activar el sitio sin haber limpiado la BD. El spam reaparece automáticamente.
- Confiar en un solo escaneo automático. Falsos positivos y falsos negativos son comunes.
- No cambiar contraseñas. El atacante sigue con acceso.
- Reutilizar plugins/temas viejos. Si eran vulnerables, volverán a comprometerse.
- Restaurar desde backup infectado. Verifica primero que el backup es limpio.
- No reportar a Google. Mientras no comuniques que está limpio, tu tráfico se desploma.
Próximos pasos después de las 24 horas
Una vez el sitio está operativo y limpio:
- Solicita revisión de seguridad a Google en Search Console (tarda 1-2 semanas típicamente).
- Monitorea Google Analytics y logs de acceso durante el próximo mes. Busca actividad extraña.
- Mantén actualizaciones de seguridad automáticas: wp auto-updates, plugin updates automáticos.
- Considera un WAF (Web Application Firewall) como Cloudflare o Sucuri WAF para bloquear ataques antes de que lleguen a WordPress.
- Revisa auditoría de cambios de archivos semanalmente (Wordfence lo hace). Si hay modificaciones inesperadas, investiga.
¿Necesitas ayuda profesional?
Si después de leer esto te sientes abrumado o tu sitio sigue comprometido, no estás solo. La limpieza de malware requiere experiencia real, acceso a herramientas especializadas y análisis forense profundo que muchos propietarios no pueden hacer en 24 horas.
En ManuelFolgar.com ofrecemos análisis de seguridad y limpieza de malware para WordPress con garantía de 30 días. Nuestro protocolo incluye todo lo que ves aquí, más análisis forense avanzada, hardening completo y monitoreo post-limpieza.
Contacta hoy si tu WordPress está infectado. Respondemos en menos de 2 horas y podemos tener tu sitio limpio y seguro antes de que pierdas más tráfico.