1. Home
  2. Aplicaciones y CMS
  3. Wordpress
  4. Limpiar malware de sitio WordPress: checklist v3.0

Limpiar malware de sitio WordPress: checklist v3.0

🦠 Limpiar malware de un sitio WordPress: checklist paso a paso

Esta guía es para quien administra o desarrolla el sitio y se maneja con el Administrador de archivos, phpMyAdmin y el escritorio de WordPress. Está ordenada como checklist: siga las fases en orden y marque cada punto antes de pasar al siguiente. Calcule entre una y tres horas por sitio.

💡 Si no se siente cómodo con alguno de los pasos, escríbanos antes de empezar. Un paso mal hecho en la base de datos o en wp-config.php puede dejar el sitio fuera de línea.

🛡️ Lo que Imunify360 ya hace por usted (y lo que no)

Todos nuestros servidores están protegidos por Imunify360, que trabaja en segundo plano sobre su cuenta:

  • Revisa en tiempo real cada archivo que se sube o se modifica y, una vez por semana, la cuenta completa, incluidas las bases de datos y las tareas programadas (cron).
  • Cuando encuentra malware lo limpia automáticamente. Si no puede separar el código malicioso, deja el archivo vacío en lugar de borrarlo.
  • Guarda el original de cada archivo limpiado durante 90 días. Si un archivo legítimo resultó afectado, podemos recuperarlo.
  • Detiene en el momento los scripts PHP que se comportan de forma maliciosa (Proactive Defense) y bloquea con su WAF los ataques conocidos contra WordPress y sus plugins.

Aun así, que Imunify360 no reporte nada no prueba que el sitio esté limpio. Hay infecciones que ningún escáner reconoce: código malicioso escrito como PHP «normal» dentro de un plugin legítimo, administradores ocultos, spam guardado en la base de datos o páginas que solo se muestran a Google. Esta checklist cubre justamente eso.

🧭 Fase 0: Antes de empezar

  • ☐ Decida si restaurar o limpiar. Respaldamos su cuenta a diario con JetBackup y conservamos unos 30 días. Si sabe que el sitio estaba sano en una fecha dentro de ese plazo, restaurar archivos y base de datos de ese día suele ser lo más rápido. Después de restaurar, haga igual las Fases 1, 5 y 6: el agujero por el que entraron sigue abierto.
  • ☐ Haga el inventario de instalaciones. Revise todas las instalaciones de WordPress de la cuenta: dominio principal, dominios adicionales, subdominios y carpetas de pruebas o copias viejas (/old, /test, /wp2, /nuevo). El malware salta entre sitios de la misma cuenta: si limpia uno y deja otro, se vuelve a infectar.
  • ☐ Cree una carpeta de cuarentena fuera de public_html, por ejemplo /home/[NOMBRE-DE-CUENTA]/cuarentena. En esta guía los archivos sospechosos se mueven ahí, no se borran: si se equivoca, los puede devolver.
  • ☐ Anote las versiones de WordPress (está en wp-includes/version.php, línea $wp_version) y de cada plugin y tema activo.
  • ☐ No se fíe de las fechas del Administrador de archivos. El malware cambia la fecha de modificación de sus archivos para que parezcan antiguos.
  • ☐ Si el sitio está redirigiendo a sus visitas a páginas maliciosas, pídanos en el ticket que lo bloqueemos temporalmente mientras trabaja.

🚪 Fase 1: Accesos fuera de WordPress

Primero se cierran las puertas que el atacante pudo dejar en la cuenta, para que no vuelva a entrar mientras usted limpia.

  • ☐ Tareas cron del panel («Trabajos de Cron» o «Cron Jobs»). Lo normal es nada o solo la llamada a wp-cron.php. Anote y elimine las que no reconozca, sobre todo las que descargan algo (curl, wget) o ejecutan archivos con nombres raros.
  • ☐ Cuentas FTP: elimine las que usted no creó.
  • ☐ Accesos remotos a MySQL (cPanel: «MySQL remoto»): elimine los hosts que no reconozca.
  • ☐ Claves SSH y tokens de API (en cPanel, «Acceso SSH» y «Administrar tokens de API»): elimine los que no haya creado usted.
  • ☐ Raíz de la cuenta, fuera de public_html: busque archivos .php sueltos que no reconozca y muévalos a la cuarentena. No toque las carpetas del sistema (mail, etc, logs, ssl, tmp, .cpanel, .cagefs y otras que empiezan con punto).
  • ☐ Restos peligrosos dentro de public_html: volcados de base de datos (.sql, .sql.gz), respaldos .zip, y herramientas como adminer.php, phpinfo.php o searchreplacedb2.php. Cualquiera los puede descargar o usar desde internet, y muchas veces son la puerta de entrada. Muévalos fuera de public_html.

⚙️ Fase 2: Núcleo de WordPress

El núcleo (core) no se revisa archivo por archivo: se reemplaza entero por una copia oficial.

  • ☐ Descargue la misma versión que anotó desde wordpress.org/download/releases. Usar otra versión ahora puede romper plugins; la actualización se hace en la Fase 5.
  • ☐ Suba el zip fuera de public_html y descomprímalo ahí.
  • ☐ Mueva wp-admin y wp-includes de su sitio a la cuarentena y ponga en su lugar las carpetas de la copia oficial.
  • ☐ Reemplace los archivos sueltos de la raíz del sitio (index.php, wp-login.php, wp-settings.php, wp-load.php, xmlrpc.php y el resto de wp-*.php) por los de la copia oficial. No reemplace wp-config.php.
  • ☐ Cualquier otro .php en la raíz del sitio que no venga en el zip oficial y que usted no reconozca: a la cuarentena.
  • ☐ Revise wp-config.php línea por línea comparándolo con wp-config-sample.php. Solo deberían cambiar los datos de la base de datos, las claves (salts), el $table_prefix y las constantes que usted agregó. Señales de alarma: include o require de archivos desconocidos, eval, base64_decode, gzinflate, textos largos sin sentido, o código pegado al principio o al final del archivo.
  • ☐ Reemplace el .htaccess de la raíz por el .htaccess por defecto de WordPress. Si usa LiteSpeed Cache, después vuelva a guardar la configuración del plugin para que escriba de nuevo su bloque.
  • ☐ Revise si hay .user.ini o php.ini en el sitio con la directiva auto_prepend_file: hace que un archivo se ejecute antes que WordPress en cada visita. Si no la puso usted, es del atacante.

📦 Fase 3: wp-content (la parte más importante)

Aquí se esconde casi todo el malware que sobrevive a una limpieza.

  • ☐ Raíz de wp-content: lo normal es un index.php casi vacío y las carpetas. Los únicos otros .php legítimos son los «drop-ins» que crean plugins de caché (advanced-cache.php, object-cache.php, a veces db.php). Si no usa el plugin que los crea, a la cuarentena.
  • ☐ wp-content/mu-plugins: los «plugins obligatorios» se cargan siempre y no aparecen en la lista normal de plugins. Es uno de los escondites favoritos. Si no sabe qué hace un archivo de esta carpeta, a la cuarentena.
  • ☐ Plugins: elimine todos los inactivos. Cada plugin activo, reinstálelo: borre su carpeta y suba una copia limpia de la misma versión, descargada de wordpress.org o del sitio del desarrollador. Mirar el código no basta, porque el malware se agrega a archivos legítimos y puede parecer PHP normal. Las carpetas con nombres que no reconoce, a la cuarentena.
  • ☐ Temas: deje solo el tema activo (y su tema padre, si usa uno hijo) y reinstálelos desde la fuente oficial. En el tema hijo, revise a mano functions.php y cada archivo .php.
  • ☐ Uploads: en wp-content/uploads no debería haber archivos .php. Fíjese también en archivos con extensión de imagen o sin extensión que, al abrirlos, empiezan con <?php, y en archivos .htaccess que usted no creó.
  • ☐ Carpetas con nombre de números o letras al azar (por ejemplo 495633 o a8f3e1) dentro de wp-admin, wp-includes, wp-content, .well-known o cgi-bin: casi siempre guardan malware.
  • ☐ Archivos .htaccess repartidos en muchas carpetas que permiten ejecutar solo ciertos archivos PHP. La lista de nombres que permiten suele ser el mapa de los archivos del atacante: búsquelos.
  • ☐ Vacíe las carpetas de caché (wp-content/cache y wp-content/litespeed).
  • ☐ Plugins piratas («nulled») o comprados en sitios que revenden plugins premium como «GPL»: elimínelos y reemplácelos por la versión oficial con licencia. Traen malware de fábrica y no reciben actualizaciones.

🗄️ Fase 4: Base de datos (phpMyAdmin)

  • ☐ Exporte la base de datos desde phpMyAdmin («Exportar») antes de editar nada, y guarde el archivo fuera de public_html. Si su sitio recibe pedidos, el respaldo de anoche no tiene los de hoy.
  • ☐ Revise el prefijo de las tablas en $table_prefix de wp-config.php. Muchas veces no es wp_; en los pasos siguientes use el suyo.
  • ☐ Administradores: el malware puede ocultar usuarios en el escritorio de WordPress, así que revíselos en phpMyAdmin. En la tabla usermeta, use «Buscar» con meta_key igual a [prefijo]capabilities y meta_value LIKE %administrator%, y compare los user_id con la tabla users. Señales de un admin falso: usuario, nombre y nombre visible idénticos y al azar, sin entradas publicadas, o correos como adminbackup@wordpress.org. Verifique antes de borrar: hay instaladores que crean administradores legítimos con correos extraños.
  • ☐ En la tabla options, revise que siteurl y home sean su dominio, y que users_can_register esté en 0 (salvo que usted permita registros) y default_role en subscriber.
  • ☐ Con «Buscar» sobre toda la base, busque <script, eval(, base64_decode, position: fixed; top: - y left:-9999px. Esto encuentra scripts inyectados y enlaces de spam escondidos fuera de la pantalla. Ojo: los códigos de Google Analytics, píxeles y chats también son scripts legítimos.
  • ☐ Si usa Elementor, el spam puede estar en el diseño de la página y no solo en el texto. Abra la página en Elementor y elimine el widget HTML escondido, o vuelva a una revisión anterior a la infección.
  • ☐ Revise los plugins que guardan código en la base de datos, como Code Snippets, WPCode o Insert Headers and Footers: elimine los fragmentos que no haya creado usted.
  • ☐ No edite a mano en phpMyAdmin opciones serializadas como active_plugins: un carácter mal contado deja el sitio caído. Para activar o desactivar plugins use el escritorio de WordPress.

🔑 Fase 5: Claves, sesiones y actualizaciones

Este paso va después de limpiar. Si cambia las claves con el malware todavía dentro, el atacante puede robar las nuevas.

  • ☐ Si cree que le robaron las claves (por ejemplo, porque nadie más las tenía), revise con un antivirus el computador desde el que administra el sitio antes de crear las nuevas.
  • ☐ Cambie la clave del panel, de las cuentas FTP, de todos los administradores de WordPress y del usuario de la base de datos (y actualícela en wp-config.php). Si alguna cuenta de correo usa la misma clave, cámbiela también.
  • ☐ Regenere las claves de seguridad (salts) de wp-config.php con las que entrega api.wordpress.org/secret-key/1.1/salt. Así se cierran todas las sesiones abiertas; cambiar la clave no las cierra.
  • ☐ En «Usuarios» de WordPress, revise en cada administrador las contraseñas de aplicación y elimine las que no reconozca.
  • ☐ Ahora sí, actualice WordPress, plugins y temas a sus últimas versiones.

🔒 Fase 6: Cerrar la puerta

  • ☐ Active la verificación en dos pasos para todos los administradores (vea 2FA en WordPress).
  • ☐ Impida editar plugins y temas desde el escritorio agregando esta línea en wp-config.php, antes de la línea /* That's all, stop editing! */:
define( 'DISALLOW_FILE_EDIT', true );
  • ☐ Impida que se ejecute PHP en la carpeta de subidas: cree el archivo wp-content/uploads/.htaccess con este contenido (permisos 644):
<FilesMatch "\.(?i:php|php3|php4|php5|php7|php8|phtml|phps|pht|shtml|cgi|pl|py)$">
    Require all denied
</FilesMatch>
Options -Indexes
  • ☐ No guarde respaldos, volcados .sql ni copias del sitio dentro de public_html.
  • ☐ Use solo plugins y temas de wordpress.org o comprados al desarrollador, y elimine los que no use.
  • ☐ No hace falta instalar un plugin de firewall: el WAF de Imunify360 ya protege el sitio. Si quiere un plugin de seguridad para alertas o verificación en dos pasos, elija uno reconocido.

✅ Fase 7: Verificar

  • ☐ Purgue la caché (LiteSpeed Cache → «Purgar todo»). Si usa Elementor, regenere sus archivos CSS desde Elementor → Herramientas.
  • ☐ Abra el sitio en una ventana de incógnito y desde el celular con datos móviles. Revise páginas internas, formularios y el carrito si tiene tienda.
  • ☐ Busque en Google site:su-dominio.com. Si aparecen páginas que usted no creó (casinos, farmacia, textos en japonés o chino), el sitio estaba mostrando spam solo a Google. En Google Search Console, revise «Problemas de seguridad», pida la revisión cuando esté limpio y solicite la retirada de las URL de spam.
  • ☐ Vuelva a revisar las Fases 3 y 4 a los dos o tres días: ¿archivos nuevos, administradores nuevos, tareas cron nuevas? Si algo reaparece, todavía queda una puerta abierta.
  • ☐ Cuando esté seguro de que todo funciona, borre la carpeta de cuarentena y el WordPress descomprimido fuera de public_html.

🙋 ¿Necesita ayuda?

Escríbanos en https://premiumhosting.cl/soporte/tickets/new/ con el dominio afectado. Podemos ayudarle a:

  • Revisar qué detectó y limpió Imunify360 en su cuenta, y recuperar un archivo legítimo que haya sido limpiado.
  • Buscar en los registros del servidor por dónde entró el atacante.
  • Bloquear el sitio temporalmente mientras lo limpia.
  • Restaurar un respaldo de JetBackup.

Si el malware reaparece después de seguir esta guía, no la repita desde cero: escríbanos con lo que encontró y lo revisamos juntos.

Updated on 9 de noviembre de 2026

Was this article helpful?

Related Articles

Leave a Comment