No siempre es obvio. Los atacantes modernos prefieren pasar desapercibidos el máximo tiempo posible para monetizar el acceso. Estas son las señales más comunes:
- Google Chrome (u otro navegador) muestra aviso rojo del tipo «Este sitio puede dañar tu equipo» o «Sitio engañoso detectado». Google Safe Browsing ha marcado tu dominio.
- Google Search Console envía una alerta de «Contenido dañino detectado» o «Sitio hackeado» en la sección Seguridad & Acciones manuales.
- Tu hosting te ha suspendido la cuenta por envío masivo de spam o detección de malware.
- Aparecen páginas o directorios que no creaste: páginas de casino, farmacia online, ropa de lujo falsa o phishing bancario.
- El tráfico orgánico cae en picado en pocos días sin razón aparente (Google ha dejado de indexar o ha penalizado el dominio).
- Redirecciones extrañas: los visitantes llegan a tu web y son enviados a otro sitio, especialmente desde móvil.
- El panel de WordPress no carga, muestra error 500 o la pantalla blanca de la muerte.
- Aparecen administradores desconocidos en Usuarios > Administradores dentro del panel WP.
- Tu empresa de antivirus o clientes te avisan de que su software detecta archivos maliciosos al visitar tu web.
Si detectas dos o más de estas señales, activa el protocolo de emergencia ahora mismo.
El primer objetivo es cortar el daño mientras limpias. Que ningún visitante descargue malware desde tu web y que el atacante no pueda seguir operando.
Paso 1 — Pon la web en modo mantenimiento
Si puedes acceder al admin de WordPress, instala WP Maintenance Mode o activa el modo mantenimiento nativo. Si el admin no carga, crea un archivo index.php temporal en la raíz del servidor con un mensaje de «Web en mantenimiento».
Paso 2 — Cambia la contraseña de cPanel/hosting YA
Antes de limpiar nada, cambia la contraseña del panel de control de tu hosting desde otro dispositivo. Si el atacante tiene acceso al cPanel, cualquier limpieza que hagas será inútil.
Paso 3 — Revoca sesiones activas de WordPress
Añade esta línea al archivo wp-config.php: define('AUTH_KEY', 'nuevo-valor-aleatorio-aquí');. Esto invalida todas las cookies de sesión activas, incluidas las del atacante.
Paso 4 — Bloquea temporalmente el acceso al wp-admin desde .htaccess
Si conoces tu IP fija, añade en .htaccess:
Order Deny,Allow
Deny from all
Allow from TU.IP.REAL.AQUIEsto impide que el atacante opere desde la interfaz de administración mientras trabajas.
Suena contraintuitivo hacer una copia de una web infectada, pero es imprescindible por tres razones:
- Preservas evidencias por si necesitas reportarlo a las autoridades o a tu seguro.
- Tienes una referencia de qué archivos han sido modificados y cuándo.
- Si la limpieza manual falla, puedes restaurar desde un backup limpio anterior sin perder la evidencia del ataque.
Cómo hacer el backup
- Desde cPanel → Backup Wizard: descarga un backup completo (archivos + base de datos).
- Via FTP/SFTP con FileZilla: descarga toda la carpeta del sitio.
- Con UpdraftPlus desde WordPress si el admin sigue siendo accesible.
Etiqueta la carpeta con la fecha y «INFECTADO» para no confundirla con backups limpios. Guárdala en local, nunca como única copia en el mismo servidor.
Importante: si tienes backups automáticos del hosting, comprueba cuándo fue el último ANTES del hack. Esa será tu línea de restauración limpia.
No limpies a ciegas. Primero escanea para tener un mapa completo del daño.
Wordfence (plugin gratuito)
Si el admin de WordPress funciona, instala Wordfence y ejecuta un escaneo completo. La versión gratuita detecta la mayoría de malware conocido. El informe lista archivos modificados, código sospechoso inyectado y usuarios fantasma. Ventaja: integrado en WP. Desventaja: si WordPress está muy comprometido, puede no cargar.
Sucuri SiteCheck
Análisis externo gratuito en sitecheck.sucuri.net. Escanea el código HTML visible, detecta blacklists, malware en el frontend y redirecciones maliciosas. No requiere acceso al servidor. Úsalo siempre como primer diagnóstico rápido.
Imunify360 (disponible en muchos hostings)
Si tu hosting usa cPanel con Imunify360 (BanaHosting, SiteGround, Hostinger lo incluyen), accede desde cPanel → Imunify360 → Malware Scanner. Escanea a nivel de servidor todos los archivos PHP, detecta shells, backdoors y código ofuscado con mayor profundidad que los plugins de WordPress.
VirusTotal
Pega la URL de tu web en virustotal.com para ver si está flagueada por los 90+ motores antivirus que analiza. También puedes subir archivos PHP sospechosos individualmente.
Exporta los informes de todos los escaneos. Los necesitarás en el paso siguiente.
Con el mapa del escaneo en mano, la limpieza sigue este orden:
1. Archivos del núcleo de WordPress
Descarga una copia limpia de WordPress desde wordpress.org en la misma versión que uses. Reemplaza via FTP los directorios /wp-admin/ y /wp-includes/ completamente. No toques /wp-content/ todavía.
2. Archivos de plugins y temas
Desactiva todos los plugins y elimínalos. Luego reinstálalos desde el repositorio oficial. Nunca uses copias de plugins premium de sitios de descarga gratuita: son la causa número 1 de hackeos (nulled plugins). Los temas: descarga versión limpia del repositorio oficial. Si es un tema personalizado, revisa archivo por archivo buscando eval(base64_decode, system(, exec(, shell_exec( o passthru(.
3. El archivo wp-config.php
Revísalo manualmente. Cualquier código que no sea configuración de base de datos o constantes de WordPress es sospechoso. Compara con la plantilla oficial.
4. El archivo .htaccess
Bórralo y regenera uno limpio desde WordPress → Ajustes → Enlaces permanentes → Guardar cambios.
5. Uploads (/wp-content/uploads/)
Busca archivos PHP dentro de la carpeta de uploads: find /wp-content/uploads -name "*.php". No debe haber ninguno. Elimínalos todos.
6. Base de datos
Exporta la BD desde phpMyAdmin. Busca en la tabla wp_options las opciones siteurl y home (no deben apuntar a otro dominio). Revisa la tabla wp_users en busca de administradores desconocidos. Elimina cualquier usuario que no reconozcas. En wp_posts busca contenido con <script o iframe que no hayas añadido tú.
La limpieza manual es efectiva, pero hay situaciones donde restaurar desde un backup limpio es más rápido y más seguro:
- El hack lleva más de 2 semanas activo y hay muchos archivos comprometidos.
- No tienes experiencia editando código PHP y no quieres arriesgarte a dejar backdoors.
- El ataque ha corrompido la base de datos de forma extensa.
- Tienes un backup limpio reciente (menos de 1-2 semanas) que no incluye el vector de entrada.
Proceso de restauración
- Identifica en los logs del servidor (
access.log,error.log) cuándo ocurrió el primer acceso sospechoso. Esa es tu fecha de corte. - Usa el backup anterior a esa fecha. Si no tienes uno, la limpieza manual es tu única opción.
- Restaura archivos via FTP o desde cPanel → Backup.
- Restaura la base de datos desde phpMyAdmin → Importar.
- Después de restaurar, aplica igualmente los pasos 7 y 8 (cambio de credenciales y petición de revisión a Google). Una restauración no arregla el vector de entrada si no parcheas también la vulnerabilidad.
Ojo: restaurar sin identificar y cerrar la vulnerabilidad inicial significa que te hackearán de nuevo en días o semanas.
Aunque hayas limpiado cada archivo, si el atacante sigue teniendo una contraseña válida, volverá. Este paso no es opcional.
Contraseñas a cambiar obligatoriamente
- cPanel / panel de hosting: contraseña principal y cualquier cuenta de email asociada.
- FTP/SFTP: todos los usuarios FTP. Elimina los que no reconozcas.
- Base de datos MySQL: usuario y contraseña en phpMyAdmin, y actualiza el dato en
wp-config.php. - Cuenta de administrador de WordPress: usa una contraseña de mínimo 16 caracteres con caracteres especiales.
- Email del administrador: si el email asociado al admin de WP está comprometido, el atacante puede pedir reseteo de contraseña.
Claves secretas de WordPress
Ve a api.wordpress.org/secret-key/1.1/salt/ y genera nuevas claves. Reemplaza el bloque de AUTH_KEY, SECURE_AUTH_KEY, etc. en wp-config.php. Esto invalida todas las sesiones activas.
Accesos de terceros
Revisa si habías dado acceso a tu hosting o WP a alguna agencia, freelancer o herramienta. Revoca todo acceso que ya no sea necesario.
Activa autenticación en dos pasos (2FA)
Para el acceso a WordPress usa el plugin WP 2FA. Para el cPanel, actívalo desde la configuración de seguridad del panel. Con 2FA activo, una contraseña robada sola no es suficiente para acceder.
Si Google ha marcado tu web como peligrosa o ha aplicado una acción manual, necesitas solicitar una revisión una vez la web esté limpia. Sin este paso, el aviso de «sitio peligroso» puede persistir semanas aunque hayas eliminado todo el malware.
Pasos en Google Search Console
- Accede a Search Console → Seguridad y Acciones Manuales → Problemas de seguridad.
- Revisa qué tipo de problema detectó Google: contenido hackeado, malware, phishing o spam encubierto.
- Haz clic en «Solicitar revisión» y describe brevemente qué hiciste para limpiar la web: archivos eliminados, backup restaurado, credenciales cambiadas, plugin de seguridad instalado.
- Google suele tardar entre 1 y 3 días laborables en revisar. Si la limpieza está completa, retira la marca de «sitio peligroso» en ese plazo.
Acciones adicionales
- Google Safe Browsing: comprueba el estado en
transparencyreport.google.com/safe-browsing/search. Si sigue marcada, espera 24h más después de la revisión aprobada en Search Console. - Bing Webmaster Tools: tiene su propio sistema de alertas. Si tienes cuenta, comprueba también ahí.
- Revisa el sitemap: si el malware generó páginas spam, asegúrate de que tu sitemap no las incluye antes de mandarlo de nuevo.
La recuperación del tráfico orgánico puede tardar entre 1 y 4 semanas después de que Google levante la alerta, dependiendo del tiempo que la web estuvo comprometida.
Una vez limpia, toca cerrar todas las puertas. Los ataques a WordPress casi siempre entran por uno de estos vectores: plugin desactualizado, contraseña débil, tema nulled o servidor mal configurado. Aquí el stack de seguridad mínimo recomendado:
Wordfence Security (gratuito)
Firewall de aplicación web (WAF) + escáner de malware + protección contra fuerza bruta. La versión gratuita es suficiente para la mayoría de webs pequeñas. Activa el modo «Learning» durante 1 semana para que aprenda el tráfico normal de tu web antes de activar reglas agresivas.
Limit Login Attempts Reloaded
Bloquea IPs que fallen el login más de X veces. Impide los ataques de fuerza bruta más básicos. Configúralo a 3 intentos antes del bloqueo temporal.
UpdraftPlus (backups automáticos)
Programa backups diarios automáticos a Google Drive, Dropbox o S3. Si no tienes backups fuera del servidor, estás a un hackeo de perder todo. La versión gratuita hace backups semanales; la premium permite diarios.
Hide My WP Ghost
Cambia la URL del wp-admin, oculta que es WordPress y elimina los metadatos del tema/plugins del código fuente. Dificulta significativamente el reconocimiento previo al ataque.
Mantén actualizaciones al día
El 90% de hackeos de WordPress explotan vulnerabilidades conocidas con parche disponible. Activa las actualizaciones automáticas de WordPress core y plugins seguros. Revisa nuestro servicio de mantenimiento web si no quieres ocuparte tú de esto.
La limpieza manual funciona si el hack es reciente y tienes cierta base técnica. Pero hay situaciones donde intentarlo solo puede hacer más daño:
- El hack lleva semanas o meses activo y hay decenas de archivos modificados. La limpieza completa requiere experiencia para no dejar backdoors ocultos.
- No tienes acceso al servidor porque el atacante cambió las credenciales del hosting.
- El servidor está siendo usado para enviar spam masivo y el hosting amenaza con suspender la cuenta de forma permanente.
- La web tiene datos de clientes (tienda online, formularios de contacto) y existe riesgo de brecha de datos con obligación de notificación a la AEPD.
- Ya has intentado limpiarla y volvió a infectarse. Eso indica que el vector de entrada sigue abierto.
- No tienes tiempo: cada hora que tu web aparece como «peligrosa» en Google son clientes perdidos.
En WebsBarcelona hacemos limpiezas de malware con resultado garantizado. Identificamos el vector de entrada, eliminamos todo el código malicioso, cambiamos credenciales e instalamos monitorización. Si en 30 días vuelve a infectarse, repetimos la limpieza sin coste.
Contacta ahora para servicio de emergencia: respondemos en menos de 2 horas en horario laboral.
Preguntas frecuentes
Depende de la extensión del hackeo. Una limpieza estándar (archivos infectados, credenciales cambiadas, revisión de base de datos) lleva entre 2 y 6 horas de trabajo técnico. El aviso de Google desaparece en 1-3 días laborables tras la solicitud de revisión en Search Console. Si el hack lleva meses activo o el servidor está muy comprometido, puede requerir 1-2 días de trabajo.
Las agencias especializadas cobran entre 150€ y 500€ por una limpieza puntual, dependiendo de la complejidad. Algunas ofrecen planes de mantenimiento mensual que incluyen monitorización y limpieza ante incidentes. Herramientas como Sucuri Pro (199$/año) o Wordfence Premium (~99$/año) automatizan parte del proceso pero no sustituyen la revisión manual en hackeos complejos.
Si tienes un backup limpio reciente (anterior al hackeo), restaurarlo es más rápido y más seguro que limpiar manualmente. Si no tienes backup limpio, la reinstalación de cero implica perder todo el contenido que no hayas exportado. La limpieza manual bien ejecutada es igualmente efectiva, pero requiere más tiempo y experiencia. En cualquier caso, lo crítico no es el método sino identificar y cerrar el vector de entrada original.
Las cuatro medidas con mayor impacto: 1) Mantén WordPress, plugins y temas siempre actualizados. El 90% de hackeos explotan vulnerabilidades con parche disponible. 2) Usa contraseñas únicas de 16+ caracteres y activa 2FA en el admin. 3) Instala Wordfence o similar con el WAF activo. 4) Nunca uses plugins o temas de sitios de descarga gratuita (nulled): llevan malware incorporado. Con estas cuatro medidas reduces el riesgo en más del 95%.
Si limpias correctamente los archivos del núcleo de WordPress (wp-admin, wp-includes) sin tocar wp-content y la base de datos, no pierdes nada de contenido. El contenido (entradas, páginas, imágenes, configuración del tema) vive en la base de datos y en wp-content/uploads. El riesgo de pérdida existe si decides restaurar desde un backup antiguo: perderías el contenido publicado entre la fecha del backup y hoy. Por eso siempre recomendamos hacer un backup del estado infectado antes de cualquier acción.
En resumen
Un hackeo es una emergencia, no un desastre irreversible. Con el protocolo correcto la mayoría de webs WordPress se recuperan en menos de 24 horas y vuelven a aparecer limpias en Google en 3-5 días. Lo importante es actuar rápido: cada hora con el aviso de «sitio peligroso» activo cuesta tráfico, reputación y clientes.
Si no tienes tiempo o la situación se ha complicado, en WebsBarcelona hacemos limpiezas urgentes con resultado garantizado. Escríbenos ahora y te respondemos en menos de 2 horas.
¿Necesitas una web profesional en Barcelona?
Presupuesto cerrado en 24h sin compromiso. Desde 99€.
Pedir presupuesto →