Cómo eliminar malware de un sitio WordPress en cPanel
¿Tu sitio WordPress en cPanel ha sido hackeado? Es una sensación horrible, pero no entres en pánico. Miles de sitios sufren ataques de malware cada día. Lo bueno es que, con un poco de paciencia y las herramientas adecuadas, puedes limpiarlo tú mismo. Este artículo te guiará paso a paso, como si fueras un SysAdmin experimentado, para eliminar el malware, restaurar la seguridad de tu web y evitar que vuelva a ocurrir.
Vamos a usar únicamente las herramientas que vienen con tu panel de control (cPanel) y plugins de seguridad gratuitos. No necesitas ser un experto en Linux, solo seguir las instrucciones al pie de la letra. Empecemos.
Paso 1: Diagnóstico Rápido (¿Estás realmente infectado?)
Antes de lanzarte a borrar archivos al azar, confirma que el problema es malware. Los síntomas más comunes son:
- Redirecciones extrañas: Al entrar a tu web, te lleva a sitios de farmacias, casinos o páginas de spam.
- Anuncios emergentes (pop-ups): Aparecen ventanas que no has programado.
- Ralentización extrema: Tu web carga muy lento o da error 500.
- Contenido inyectado: Ves texto o enlaces sospechosos en tus páginas (por ejemplo, "viagra", "cáñamo", enlaces a sitios rusos).
- Alertas de Google: Google Search Console te notifica que tu sitio está marcado como "peligroso" o "comprometido".
- Archivos nuevos o modificados: Ves archivos con nombres raros como
system.php,wp-cache.phpo archivos con extensiones.zipo.exeen tu carpeta de WordPress.
[WARNING] No entres a tu web desde tu navegador habitual si ves redirecciones. El malware podría estar rastreando tus cookies. Usa una ventana de incógnito o un navegador diferente (como Firefox si usas Chrome).
Herramientas de diagnóstico online (gratuitas)
Usa estas herramientas para tener una segunda opinión:
- Sucuri SiteCheck: Solo pon tu dominio. Te dirá si hay malware, redirecciones o listas negras.
- Quttera: Escanea en busca de archivos maliciosos y enlaces sospechosos.
- VirusTotal: Sube la URL de tu web y la analiza con más de 60 antivirus.
Si alguna de estas herramientas detecta algo, es hora de actuar.
Paso 2: Aislar el Sitio y Hacer una Copia de Seguridad (IMPORTANTE)
Antes de tocar nada, debes aislar el sitio para que el malware no se propague a otros sitios en tu mismo hosting y para que Google no siga penalizándote.
2.1. Poner el sitio en modo mantenimiento
Esto evita que los visitantes vean el caos y que el malware siga actuando.
-
Entra a tu cPanel.
-
Busca la sección "Archivos" y haz clic en "Administrador de archivos".
-
Navega hasta la carpeta raíz de tu WordPress (normalmente
public_htmlo el nombre de tu dominio). -
Busca el archivo
.htaccess. Si no lo ves, activa la opción "Mostrar archivos ocultos" (punto de ajustes). -
Descarga una copia de este archivo a tu computadora (por si acaso).
-
Edita el archivo
.htaccess(clic derecho -> Editar). -
Borra todo el contenido del archivo y pégalo este código para mostrar una página de mantenimiento básica:
RewriteEngine On RewriteBase / RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000 RewriteCond %{REQUEST_URI} !^/maintenance\.html$ RewriteRule ^(.*)$ /maintenance.html [R=503,L]Importante: Reemplaza
123\.456\.789\.000con tu dirección IP real (puedes buscarla en Google "cuál es mi IP"). Esto te permitirá acceder a tu web para trabajar mientras los demás ven la página de mantenimiento. -
Crea un archivo vacío llamado
maintenance.htmlen la misma carpeta raíz. Puedes ponerle un texto simple como "Estamos en mantenimiento, volvemos pronto".
2.2. Hacer una copia de seguridad COMPLETA (archivos + base de datos)
Este es tu salvavidas. Si algo sale mal, restauras la copia. No la guardes en el mismo servidor, descárgala a tu PC o a un servicio en la nube.
- En tu cPanel, busca la sección "Archivos" -> "Copias de seguridad".
- Descarga una copia de seguridad completa del sitio (normalmente es un botón que dice "Descargar una copia de seguridad completa del sitio" o "Backup"). Esto te dará un archivo
.tar.gzcon TODOS los archivos. - Descarga una copia de seguridad de la base de datos. Busca la sección "Bases de datos" -> "phpMyAdmin":
- Selecciona tu base de datos de WordPress (la que usas en tu
wp-config.php). - Haz clic en la pestaña "Exportar".
- Elige el método "Rápido" y formato "SQL".
- Haz clic en "Continuar" y descarga el archivo
.sqla tu PC.
- Selecciona tu base de datos de WordPress (la que usas en tu
[TIP] Si tu hosting tiene JetBackup (lo verás en cPanel), úsalo. Es más rápido y fiable. Crea un backup y luego descárgalo.
Paso 3: Escaneo y Limpieza con Plugin de Seguridad (Fácil)
La forma más segura para un usuario no experto es usar un plugin de seguridad. El mejor y gratuito es Wordfence Security.
3.1. Instalar Wordfence
- Desde el Escritorio de WordPress (si aún puedes acceder), ve a Plugins -> Añadir nuevo.
- Busca "Wordfence Security" e instálalo y actívalo.
- Si no puedes acceder al escritorio (error 500 o redirección), tendrás que hacerlo manualmente:
- Descarga el plugin desde wordfence.com.
- En cPanel -> Administrador de archivos, sube el archivo
.zipa la carpetawp-content/plugins. - Descomprímelo allí.
- Actívalo desde el escritorio (si puedes) o desde cPanel -> phpMyAdmin (no recomendado para novatos). Mejor intenta acceder al escritorio después de subir los archivos.
3.2. Escaneo Completo
- En el menú de WordPress, ve a Wordfence -> Scan.
- Haz clic en "Start New Scan".
- Wordfence escaneará todos los archivos de tu WordPress, la base de datos y las opciones. Esto puede tardar varios minutos.
- Cuando termine, verás una lista de resultados. Los más comunes son:
- Archivos modificados: Archivos legítimos de WordPress que han sido alterados con código malicioso.
- Archivos sospechosos: Archivos que no pertenecen a WordPress (normalmente en
wp-content/uploads/owp-content/themes/). - Malware en la base de datos: Código inyectado en las entradas o páginas.
3.3. Limpieza con Wordfence
- Para archivos modificados: Wordfence te ofrece la opción de "Reparar archivo". Esto descargará la versión original del repositorio de WordPress y reemplazará el archivo dañado. Usa esta opción siempre que sea posible.
- Para archivos sospechosos: Si el archivo no es de WordPress (por ejemplo, un
.phpenuploads), lo más seguro es eliminarlo. Wordfence te permite hacer clic en "Eliminar" o "Mover a cuarentena". Mueve a cuarentena primero para poder recuperarlo si es un falso positivo. - Para malware en la base de datos: Wordfence te mostrará las entradas infectadas. Puedes "Reparar" la entrada, lo que eliminará el código malicioso.
[WARNING] No elimines archivos del núcleo de WordPress (carpetas
wp-admin,wp-includes) a menos que Wordfence te lo indique explícitamente. Si borras algo importante, tu web dejará de funcionar.
Paso 4: Limpieza Manual (Para Casos Persistente o si Wordfence no lo encuentra)
A veces, el malware es muy astuto y se esconde en lugares inesperados. Si después del escaneo de Wordfence tu web sigue infectada, toca hacer una limpieza manual.
4.1. Revisar el archivo wp-config.php
- En cPanel -> Administrador de archivos, abre el archivo
wp-config.php(en la raíz). - Busca cualquier línea que no sea la configuración estándar de WordPress. Especialmente, busca:
eval(base64_decode(...))ogzinflate(base64_decode(...))— Esto es código ejecutado maliciosamente.- Cualquier línea que comience con
define('WP_...que no sea la de las claves de seguridad. - Código PHP que no esté dentro de las etiquetas
<?php ... ?>correctas.
- Si encuentras algo extraño, copia el archivo a tu PC y luego elimina las líneas maliciosas. Guarda el archivo.
4.2. Revisar el archivo .htaccess (otra vez)
El .htaccess es un objetivo común. Vuelve a abrirlo (después de la copia que hicimos) y busca:
- Redirecciones: Líneas como
RewriteRule ^(.*)$ http://sitio-malicioso.com/$1 [R=301,L]. - Código de eval: Lo mismo que en
wp-config.php. - Reglas de bloqueo extrañas: Líneas que redirigen a tu web a otra parte.
Limpieza: Si ves algo sospechoso, elimínalo. Si no estás seguro, reemplaza todo el contenido por el .htaccess por defecto de WordPress:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
4.3. Revisar la carpeta wp-content/uploads/
Los hackers suelen subir archivos maliciosos aquí.
- En cPanel -> Administrador de archivos, navega a
public_html/wp-content/uploads/. - Busca archivos
.phpen esta carpeta. NO debería haber ninguno. Si los hay, son sospechosos. Elimínalos. - Busca archivos con nombres extraños como
system.php,wp-cache.php,shell.php,admin-ajax.php(en esta carpeta no debería estar). - Revisa las subcarpetas de años y meses (por ejemplo,
2023/01/). Busca lo mismo.
4.4. Revisar los temas y plugins
Los temas y plugins desactualizados son la puerta de entrada favorita del malware.
- En cPanel -> Administrador de archivos, ve a
wp-content/themes/. - Revisa cada tema. Busca archivos
.phpque no reconozcas, especialmentefunctions.php(a menudo se inyecta código aquí). - Haz lo mismo en
wp-content/plugins/. Si ves un plugin que no instalaste, elimina toda su carpeta. - Actualiza todos los temas y plugins desde el escritorio de WordPress. Si no puedes, descarga las últimas versiones desde wordpress.org y súbelas manualmente (reemplazando las carpetas).
Paso 5: Limpieza de la Base de Datos (MySQL)
El malware también puede esconderse en la base de datos, inyectando código en las entradas, páginas, opciones o usuarios.
5.1. Usar phpMyAdmin
- En cPanel, busca "Bases de datos" -> "phpMyAdmin".
- Selecciona tu base de datos de WordPress.
- Haz clic en la pestaña "Buscar".
- Busca términos comunes como:
<script>(para inyecciones de JavaScript).eval((código PHP ejecutado).base64_decode(.iframe(para iframes maliciosos).- El nombre de tu propio dominio (para ver si hay enlaces extraños).
- Revisa las tablas
wp_posts,wp_options,wp_usersywp_comments.- En
wp_posts: Busca entradas o páginas con contenido extraño (anuncios, enlaces). Puedes editar o eliminar esas entradas. - En
wp_options: Busca opciones comositeurl,home,template,stylesheet. Asegúrate de que apuntan a tu dominio correcto. También busca opciones con nombres sospechosos comomalware_option. - En
wp_users: Busca usuarios con roles de Administrador que no reconozcas. Si hay, elimínalos (pero no te borres a ti mismo). - En
wp_comments: Busca comentarios con enlaces maliciosos. Puedes eliminarlos en masa.
- En
5.2. Usar un plugin para limpiar la base de datos
Si no te sientes cómodo con phpMyAdmin, instala el plugin "Better Search Replace" (gratuito).
- Ve a Plugins -> Añadir nuevo y busca "Better Search Replace".
- Actívalo.
- Ve a Herramientas -> Better Search Replace.
- Busca el código malicioso (por ejemplo,
<script>alert('malware')</script>) y reemplázalo por nada (déjalo vacío). - Selecciona todas las tablas y ejecuta el reemplazo.
[WARNING] Siempre haz una copia de seguridad de la base de datos antes de hacer reemplazos masivos. Un error puede romper tu web.
Paso 6: Endurecer la Seguridad (SysAdmin Mode)
Una vez limpio, es hora de poner barreras para que no vuelva a pasar. Esto es trabajo de SysAdmin.
6.1. Actualizar TODO
- WordPress: A la última versión.
- Todos los temas y plugins: A la última versión.
- PHP: En cPanel -> Seleccionar versión de PHP, elige la versión más reciente estable (PHP 8.0 o superior). Las versiones antiguas tienen vulnerabilidades.
6.2. Cambiar contraseñas
- Contraseña de cPanel/FTP: Fuerte, larga, con símbolos.
- Contraseña de la base de datos: En cPanel -> Bases de datos MySQL, cambia la contraseña del usuario de la BD.
- Contraseña de administrador de WordPress: Cámbiala desde el escritorio (Usuarios -> Tu perfil).
6.3. Instalar un Firewall (WAF)
Wordfence ya incluye un firewall, pero puedes reforzarlo:
- Wordfence -> Firewall: Actívalo en modo "Extended Protection" (necesitas tu API key gratuita de Wordfence).
- Cloudflare (gratuito): Es un CDN que también actúa como firewall. Oculta tu IP real y bloquea tráfico malicioso. Configúralo desde cPanel (suele tener un integrador).
6.4. Deshabilitar la edición de archivos desde el escritorio
Esto evita que un hacker pueda modificar archivos si accede a tu panel de administración.
Añade esta línea a tu archivo wp-config.php (justo antes de la línea /* That's all, stop editing! */):
define('DISALLOW_FILE_EDIT', true);
6.5. Escaneo periódico
Configura Wordfence para que escanee automáticamente tu web cada día. Ve a
