Cómo escanear malware en WordPress con WP-CLI
¡Hola! Si has llegado hasta aquí, es porque probablemente sospechas que tu sitio WordPress puede estar infectado o, simplemente, quieres blindarlo antes de que ocurra una desgracia.
En el mundo del hosting, la seguridad es una de las mayores preocupaciones, y con razón. Un malware puede arruinar tu posicionamiento SEO, robar datos de tus usuarios o dejar tu web completamente inaccesible.
La buena noticia es que no necesitas ser un hacker para mantener tu sitio limpio. Existe una herramienta potentísima y gratuita que viene incluida en casi todos los servidores: WP-CLI (WordPress Command Line Interface).
Hoy vas a aprender, paso a paso y sin tecnicismos complejos, cómo usar comandos WP-CLI para escanear malware, identificar archivos sospechosos y, lo más importante, cómo eliminar la amenaza de raíz.
Vamos a ello.
¿Qué es WP-CLI y por qué es tu mejor aliado?
Antes de ensuciarnos las manos con código, es fundamental entender qué es esto. WP-CLI es una interfaz de línea de comandos que te permite gestionar tu WordPress sin necesidad de entrar en el panel de administración (wp-admin).
Piénsalo como un "control remoto" con superpoderes. En lugar de hacer clic en botones, escribes comandos en una terminal (SSH).
¿Por qué es tan útil para la seguridad?
- Velocidad: Escanea cientos de archivos en segundos, mucho más rápido que cualquier plugin.
- Acceso total: Puede ver archivos que a veces los plugins de seguridad pasan por alto porque están "ocultos" o son demasiado profundos.
- Menos recursos: No satura tu servidor como lo haría un escáner basado en PHP.
- Automatización: Puedes programar escaneos diarios sin intervención manual.
Requisitos indispensables:
- Tener acceso SSH a tu servidor. Si usas un panel como Syspanel (recuerda, el puerto de acceso es el 2106), normalmente tienes una opción de "Terminal" o "SSH" en el menú. Si no la ves, contacta con tu proveedor de hosting.
- Saber la ruta de tu instalación de WordPress (normalmente es
public_html,wwwo una subcarpeta).
[WARNING]
¡CUIDADO! Trabajar con SSH es muy poderoso, pero también peligroso si no sabes lo que haces. Un comando mal escrito puede romper tu sitio. Te recomiendo encarecidamente que hagas una copia de seguridad completa (archivos y base de datos) ANTES de empezar.
Primeros pasos: Conectarse y verificar WP-CLI
Una vez que estés dentro de la terminal de tu servidor (a través de SSH), lo primero es navegar hasta la carpeta raíz de tu WordPress.
1. Navegar a la raíz de WordPress
Escribe el siguiente comando y presiona Enter. Esto te llevará a la carpeta principal de tu dominio.
cd public_html
Si tu WordPress está en una subcarpeta (ej: public_html/miweb), escribe cd public_html/miweb.
2. Verificar que WP-CLI funciona
Para asegurarte de que todo está listo, escribe:
wp --info
Si ves un montón de información sobre la versión de PHP y WP-CLI, ¡perfecto! Si te dice "command not found", intenta con la ruta completa: wp-cli.phar --info o consulta a tu hosting cómo activarlo.
3. Comprobación inicial del estado de salud
Antes de escanear, es bueno verificar que tu WordPress no esté en modo mantenimiento o con problemas de base de datos. Ejecuta:
wp core is-installed
Si responde "Success: WordPress is installed", estamos listos para la acción.
Cómo escanear malware en WordPress con comandos WP-CLI
Ahora viene lo bueno. WP-CLI no tiene un escáner de malware "mágico" integrado que detecte virus como un antivirus de Windows. En su lugar, usaremos comandos para buscar firmas (patrones de código malicioso), archivos modificados y código sospechoso.
Aquí te muestro los comandos más efectivos.
1. Buscar archivos modificados recientemente (El rastro del hacker)
Los hackers suelen dejar "puertas traseras" (backdoors) en archivos que han sido modificados en fechas recientes. Si no has tocado tu web en días y ves archivos modificados hoy, es una señal de alarma.
Ejecuta este comando para listar los archivos modificados en las últimas 24 horas:
find . -type f -mtime -1 -not -path "./wp-content/cache/*" -not -path "./wp-content/uploads/*"
Desglose:
find .: Busca desde el directorio actual.-type f: Solo archivos (no carpetas).-mtime -1: Modificados en las últimas 24 horas.-not -path: Excluye la caché y las imágenes subidas (para evitar ruido).
¿Qué deberías ver? Idealmente, nada o solo los archivos que tú has subido. Si ves archivos .php desconocidos, ¡es hora de investigar!
2. El escaneo de firmas clásico (buscando código malicioso)
Este es el más importante. Vamos a buscar patrones de código que se repiten en la mayoría de malwares. Ejecuta este comando (es largo, pero cópialo tal cual):
grep -R -l "eval(base64_decode\|gzinflate(\|str_rot13(\|shell_exec(\|passthru(\|system(\|exec(" --include="*.php" . | grep -v "wp-admin\|wp-includes"
¿Qué hace? Busca en todos los archivos .php funciones peligrosas que los hackers usan para ejecutar código arbitrario.
eval(base64_decode: Descifra y ejecuta código oculto.shell_exec,system,exec: Ejecutan comandos del sistema operativo (muy peligroso).
[INFO]
Si el comando no devuelve nada, ¡genial! No hay código malicioso "típico". Si devuelve rutas de archivos (ej:/wp-content/plugins/plugin-malware/index.php), tienes un problema. Anota esas rutas.
3. Escaneo de plugins y temas (el punto débil común)
La mayoría de los ataques entran por plugins o temas desactualizados o con vulnerabilidades. WP-CLI tiene comandos nativos para verificar su estado.
wp plugin list
wp theme list
¿Qué buscar?
- Versiones de plugins que no son las últimas (compara con el repositorio de WordPress).
- Plugins que aparecen como "Inactive" pero que no recuerdas haber instalado.
- Si ves algo sospechoso, ejecuta este comando para verificar integridad:
wp plugin verify-checksums
Este comando compara tus archivos de plugins con los oficiales del repositorio de WordPress. Si algún archivo ha sido modificado, te lo dirá. Es la mejor herramienta para detectar inyecciones de código en plugins legítimos.
Eliminar malware WordPress: La limpieza manual
Has encontrado archivos sospechosos. Ahora toca actuar con cabeza y precisión. NO borres todo a lo loco, podrías romper tu web.
Paso 1: Identificar y aislar
Supongamos que el escaneo encontró un archivo en /wp-content/plugins/un-plugin-extraño/funciones.php.
Antes de borrarlo, vamos a ver el contenido para confirmar que es malicioso:
cat wp-content/plugins/un-plugin-extraño/funciones.php
Si ves líneas como eval(base64_decode("...")) o código ofuscado que no tiene nada que ver con la funcionalidad del plugin, es malware.
Paso 2: Renombrar (Desactivar) en lugar de borrar
En lugar de borrarlo (por si acaso es un falso positivo), lo "neutralizamos" cambiándole la extensión. Los archivos .php no se ejecutan si no tienen esa extensión.
mv wp-content/plugins/un-plugin-extraño/funciones.php funciones.php.malware
Al hacer esto, WordPress ya no podrá ejecutar ese archivo. Si tu web deja de mostrar errores, has encontrado al culpable.
Paso 3: Eliminación definitiva
Si estás 100% seguro de que es malware, bórralo:
rm wp-content/plugins/un-plugin-extraño/funciones.php
Y lo más importante: Si el malware estaba dentro de un plugin, desactiva y elimina el plugin completo desde WP-CLI:
wp plugin deactivate un-plugin-extraño --allow-root
wp plugin delete un-plugin-extraño --allow-root
[WARNING]
NUNCA edites un archivo de plugin o tema con el Bloc de Notas o un editor básico desde el panel de Syspanel. Si necesitas editarlo, usa un editor de código como VS Code o Nano en la terminal, pero asegúrate de no romper los saltos de línea.
Limpieza profunda: Revisar la base de datos
A veces, el malware no vive en archivos, sino en la base de datos. Se esconde en las tablas wp_options o en el contenido de tus posts (inyectando enlaces a farmacias online o casinos).
Buscar enlaces sospechosos en la base de datos
Ejecuta este comando para buscar enlaces externos inyectados (cambia "tusitio.com" por tu dominio real):
wp search-replace 'http://malicious-site.com' 'http://tusitio.com' --dry-run --all-tables
Explicación:
--dry-run: Esto es un simulacro. NO cambia nada, solo te muestra cuántas coincidencias hay. Es crucial para no romper nada.--all-tables: Busca en todas las tablas de tu base de datos, no solo en las principales.
Si ves resultados que apuntan a dominios raros, anótalos. Luego, repite el comando sin --dry-run para reemplazarlos por una URL vacía o la tuya propia.
wp search-replace 'http://malicious-site.com' '' --all-tables
Esto eliminará esas URL maliciosas de tus posts y opciones.
Fortalece tu seguridad WordPress (Prevención)
Ya has limpiado el malware. Ahora, vamos a asegurarnos de que no vuelva a pasar. La seguridad es un proceso, no un destino.
1. Actualiza todo (Core, Plugins y Temas)
Este es el consejo de oro. La mayoría de los ataques son por vulnerabilidades conocidas.
wp core update
wp plugin update --all
wp theme update --all
2. Cambia tus claves de acceso
El hacker pudo haber robado tus credenciales. Cambia la contraseña de tu base de datos y las claves de seguridad (Salt Keys) de WordPress.
wp config shuffle-salts
Este comando regenera tus claves de autenticación. Esto cerrará la sesión de todos los usuarios (incluido el hacker) en tu sitio.
3. Revisa los usuarios administradores
Asegúrate de que no hayan creado un usuario administrador falso.
wp user list --role=administrator
Si ves un usuario que no reconoces, bórralo:
wp user delete <user_id> --yes
4. Programa escaneos automáticos
Puedes usar cron para que se ejecute un escaneo cada noche. Habla con tu proveedor de hosting (si usas Syspanel, en la sección de Cron Jobs) para configurar una tarea que ejecute el comando grep que te enseñé al principio.
Preguntas Frecuentes (FAQ)
¿WP-CLI elimina el malware automáticamente?
No. WP-CLI es una herramienta. Eres tú quien decide qué borrar. Es como un detective que te da las pistas; tú eres el juez que dicta sentencia.
¿Puedo usar WP-CLI si mi hosting no tiene acceso SSH?
No. Necesitas acceso SSH. Si tu plan de hosting no lo incluye, considera migrar a uno que sí lo ofrezca (como los servidores dedicados o VPS gestionados en Syspanel).
¿Es normal que wp plugin verify-checksums dé error en plugins premium?
Sí, es normal. Este comando solo funciona con plugins gratuitos del repositorio oficial. Los plugins premium (de pago) no tienen checksums oficiales, así que dará un error. No significa que estén infectados.
¿Qué hago si el malware está en el wp-config.php?
Es raro, pero pasa. Si ves código extraño en ese archivo, lo mejor es reemplazarlo con una copia limpia. Puedes generarlo de nuevo con:
wp config create --dbname=TU_DB --dbuser=TU_USUARIO --dbpass=TU_PASS --dbhost=localhost
(Eso sí, ten a mano los datos de tu base de datos).
¿Esto garantiza que mi web nunca será hackeada?
Nada lo garantiza al 100%. Pero siguiendo estos pasos, reduces el riesgo en un 95%. La combinación de mantener todo actualizado, escaneos regulares y contraseñas fuertes es infalible contra el 99% de los ataques automatizados.
Conclusión
Escanear malware en WordPress con WP-CLI es, sin duda, la forma más rápida y profesional de mantener tu sitio limpio. Aunque al principio pueda parecer abrumador, dominar estos comandos te dará un control total sobre tu seguridad, sin depender de plugins pesados que ralentizan tu web.
Recuerda la rutina de oro:
- Escanea con
grepyfindcada semana. - Actualiza todo cada mes.
- Verifica los usuarios y los plugins inactivos.
- Si usas Syspanel, recuerda que tienes acceso a la terminal en el puerto 2106 para ejecutar todo esto.
La seguridad no es un lujo, es una necesidad. Y ahora tienes las herramientas (y el conocimiento) para proteger tu proyecto.
Si este artículo te ha sido útil, compártelo con otros administradores de WordPress que necesiten ayuda. ¡Nos vemos en el próximo tutorial!
