Etiqueta: ciberseguridad

  • Qué roles de usuario crearon los hackers en tu WordPress

    Qué roles de usuario crearon los hackers en tu WordPress

    Qué roles de usuario crearon los hackers en tu WordPress: guía de detección y eliminación

    Cuando un atacante consigue acceso a tu WordPress, una de las primeras cosas que hace es crear cuentas fantasma con permisos de administrador. En mi experiencia analizando sitios comprometidos, encuentro entre 2 y 5 usuarios ocultos que los propietarios desconocen completamente. Estos roles maliciosos son la puerta trasera perfecta: permiten al hacker regresar indefinidamente, incluso después de cambiar contraseñas o actualizar plugins.

    El problema es serio porque esas cuentas fantasma actúan como salvavidas para los ciberdelincuentes. Mientras tú crees haber expulsado al intruso, él sigue accediendo tranquilamente con credenciales que creó semanas antes. Por eso te enseño a identificarlas, eliminarlas y blindar tu WordPress contra este vector específico.

    Por qué los hackers crean roles y usuarios en WordPress

    Los atacantes no son tontos. Cuando vulneran tu WordPress mediante un plugin desactualizado, una contraseña débil o un backdoor, saben que tarde o temprano vas a descubrirlo. Por eso no se conforman con acceso temporal: crean usuarios administrativos permanentes.

    Las razones son evidentes:

    • Persistencia: aunque elimines el vector de ataque original (el plugin vulnerable), ellos siguen dentro como usuario legítimo.
    • Disimulo: una cuenta de usuario se ve «normal» en la lista de WordPress, especialmente si la llaman «admin», «support» o algo que parezca oficial.
    • Control total: con rol de administrador o editor, pueden modificar contenido, instalar plugins maliciosos, redirigir tráfico o robar datos de clientes.
    • Escalada de privilegios: si primero accedieron como editor, crean una cuenta admin para mantener control incluso si les revocas permisos iniciales.
    • Venta de acceso: algunos hackers venden credenciales WordPress a terceros, así que la cuenta es un activo que comercializan.

    Lo que recomiendo siempre a mis clientes es una auditoría mensual de usuarios. No es paranoia, es protocolo estándar en ciberseguridad.

    Cómo identificar usuarios fantasma creados por atacantes

    Accede al panel de WordPress en Usuarios y revisa cuidadosamente la lista completa. Los hackers cometen errores que los delatan:

    1. Cuentas con nombres genéricos o robados: «admin2», «administrator», «support», «wordpress», «test», «temp». Si no las creaste tú, no están.
    2. Emails sospechosos: direcciones de Gmail, Outlook o dominios públicos sin relación con tu empresa. A veces usan variantes de tu propio dominio: si tu correo es info@tuempresa.es, ellos crean admin@tuempresa.es o info@tuempresa.net.
    3. Fechas de creación extrañas: si ves un usuario creado a las 3:47 de la madrugada y no recuerdas haberlo hecho, es una bandera roja.
    4. Rol de administrador sin justificación: los usuarios legítimos suelen tener roles más específicos (editor, autor). Un administrador extra es sospechoso.
    5. Último acceso reciente pero sin actividad visible: algunos plugins como Wordfence muestran cuándo fue el último login. Si un usuario se conectó ayer pero no publicó nada, algo está mal.
    6. Contraseñas que no reconoces: aunque no puedas ver la contraseña (está hasheada), si intentas cambiarla y WordPress te dice que es «muy fuerte» con caracteres aleatorios, la creó alguien más.

    Para un análisis más profundo, uso WordPress CLI. Desde terminal ejecuto:

    wp user list –field=user_login,user_email,user_registered –format=table

    Esto te muestra todos los usuarios con fecha exacta de creación. Luego verifico quién los creó investigando logs (si los tienes habilitados).

    Roles y permisos que los ciberdelincuentes asignan

    No todos los usuarios maliciosos tienen rol de administrador. Depende de su intención:

    Administrador: acceso total. Lo que la mayoría prefiere para control absoluto. Pueden instalar plugins, cambiar configuración, crear más cuentas.

    Editor: si quieren pasar desapercibidos, crean editores. Pueden modificar contenido, publicar, pero no tocar plugins ni configuración. Es más sigiloso.

    Autor: menos común. Solo permite escribir posts propios. Usado si el ataque está enfocado específicamente en spam SEO o inyección de contenido malicioso.

    Suscriptor con rol personalizado: en algunos casos avanzados, los atacantes crean roles personalizados con permisos específicos (acceso a ciertos posts, capacidad de editar solo formatos, etc.). Esto es técnicamente sofisticado y difícil de detectar.

    Lo que veo en la mayoría de casos es una cuenta administrador con nombre innocuo y una segunda cuenta editor como «backup».

    Dónde buscar más allá de la interfaz

    Los usuarios maliciosos no solo están en la tabla wp_users. Necesitas revisar también:

    Base de datos directamente: conéctate vía phpMyAdmin y ejecuta esta query:

    SELECT user_login, user_email, user_registered FROM wp_users ORDER BY user_registered DESC;

    Ordena por fecha de registro descendente y busca usuarios recientes que no creaste.

    Tabla de metadatos (wp_usermeta): aquí se almacenan los roles. Un usuario puede tener rol de «suscriptor» visible pero metadatos ocultos que lo convierten en admin:

    SELECT user_id, meta_key, meta_value FROM wp_usermeta WHERE meta_key LIKE ‘%capabilities%’;

    Logs de actividad: si usas Simple History o Wordfence, revisa quién creó esos usuarios. Muchos logs falsificados o vacíos también indican manipulación.

    Archivo wp-config.php: aunque es menos frecuente, algunos backdoors inyectan código que crea usuarios automáticamente al cargar la web. Busca funciones personalizadas que generen usuarios.

    Caso práctico: cómo actúa un usuario malicioso

    Te doy un ejemplo real que he visto docenas de veces:

    Un cliente tenía WordPress con WooCommerce. Un plugin de pasarela de pago desactualizado permitía RFI (Remote File Inclusion). El atacante inyectó código, instaló un backdoor y creó dos cuentas:

    • «paypal_admin» con rol administrador, email paypal.admins@gmail.com, creada a las 02:14 AM.
    • «woo_manager» con rol editor, email whoopsie@tudominio.net, creada 48 horas después (probablemente como backup).

    Durante 3 meses, el hacker:

    • Instaló un plugin de criptominería que consumía 40% CPU del servidor.
    • Modificó el checkout de WooCommerce para capturar números de tarjeta (Magecart).
    • Inyectó redirecciones spam en posts.
    • Creó spam SEO con palabras clave de casinos y apuestas.

    Todo bajo la cuenta «paypal_admin», que parecía legítima en un vista rápida. Solo cuando el cliente revisó los logs de Wordfence vio actividad masiva a horas raras.

    Pasos para eliminar usuarios maliciosos

    Una vez identificados, actúa con rapidez pero sin prisa (necesitas evidencia para auditoría):

    1. Documenta antes de borrar: toma screenshots del usuario, su email, fecha de creación, rol, último acceso. Esto es crucial si necesitas hacer denuncia o investigación forense.
    2. Cambiar contraseña de administrador legítimo: primero cambia tu contraseña principal a algo fuerte (16+ caracteres, símbolos, sin patrones). El atacante podría haber cambiado tu contraseña también.
    3. Desactiva antes de borrar: algunos plugins maliciosos se activan al eliminar usuarios. Mejor desactiva primero: ve a cada usuario, desactívalo temporalmente (algunos plugins lo permiten), revisa que el sitio siga funcionando, luego borra.
    4. Elimina con gestión de contenido: cuando borres el usuario, WordPress te pregunta qué hacer con su contenido (atribuirlo a otro usuario, borrar). Si creó contenido malicioso, bórralo. Si el contenido es legítimo pero creado bajo cuenta falsa, atribúyelo a un usuario real.
    5. Fuerza logout global: algunos plugins como Wordfence tienen opción «revoke all sessions». Úsalo para expulsar cualquier sesión activa de ese usuario y cualquier otro.
    6. Cambia todas las contraseñas de usuarios admins: no solo la tuya. El atacante podría tener acceso a varias.

    Desde WP-CLI, el comando es:

    wp user delete [ID] –reassign=[OTRO_ID]

    Por ejemplo: wp user delete 5 –reassign=1 elimina usuario ID 5 y asigna su contenido al usuario 1.

    Auditoría de seguridad para prevenir futuras creaciones

    Después de limpiar, necesitas blindar WordPress contra este vector:

    Limita permisos de creación de usuarios: en OWASP lo llaman «principio de menor privilegio». Solo admins deberían crear usuarios, y esto debería registrarse:

    Añade a wp-config.php:

    define(‘DISALLOW_USER_EDITING’, false); (solo si quieres permiso explícito)

    Y usa un plugin como Wordfence que registra toda creación de usuario con IP, hora y navegador.

    Activa 2FA (autenticación de dos factores): incluso si roban contraseña, no pueden acceder sin teléfono. Wordfence, Defender o Duo Security lo permiten.

    Whitelisting de IPs para admin: si gestionas WordPress solo desde tu oficina o casa, configura Wordfence para permitir login solo desde IPs específicas. Bloqueará intentos remotos.

    Monitoreo de cambios en usuarios: configura alertas para notificarte si se crea un usuario nuevo. Wordfence y MalCare lo hacen automáticamente.

    Backup regular verificado: realiza backups diarios y verifica que se pueden restaurar. Un atacante puede borrar backups antiguos, así que necesitas múltiples copias en ubicaciones distintas.

    Herramientas especializadas para detectar usuarios ocultos

    Wordfence: su «User Login» muestra todos los logins, intentos fallidos, y sesiones activas. Puedes ver quién accedió, cuándo, desde dónde. Es mi favorita.

    WP Security Audit Log: registra cada acción en WordPress, incluida creación de usuarios. Puedes revisar el historial completo.

    MalCare: detecta usuarios anómalos mediante análisis de comportamiento. Si un usuario «support» típicamente no hace nada pero de repente instala plugins, MalCare te lo marca.

    Sucuri Site Integrity Monitor: revisa cambios en archivos y base de datos. Si alguien crea usuario, Sucuri lo nota.

    Lo que recomiendo es combinar Wordfence (para firewalling y detección en tiempo real) con auditoría de logs (para análisis histórico).

    Después de la limpieza: paso a paso

    No termina en borrar usuarios. Necesitas verificar que el sitio está completamente limpio:

    1. Ejecuta escaneo de malware con Wordfence o SiteLock. Busca backdoors, webshells, código inyectado.
    2. Verifica plugins y temas: desactiva todos, luego activa uno por uno mientras monitoreas. Si el problema reaparece, ese plugin/tema es culpable.
    3. Revisa Google Search Console. ¿Ves inyecciones de spam, redirects? Google notar si limpias rápido.
    4. Usa VirusTotal para verificar archivos sospechosos: sube los archivos modificados recientemente y deja que 70+ antivirus los analice.
    5. Monitorea 30 días después. A veces hay backdoors secundarios que se activaban después de tiempo.

    Denuncia y documentación

    Si fue ataque serio (robo de datos, fraude), documenta todo para denunciar a INCIBE (Instituto Nacional de Ciberseguridad) o la AEPD si hay compromiso de datos personales.

    Incluye:

    • Screenshots de usuarios maliciosos.
    • Logs de acceso (si los tienes).
    • Fechas de compromiso estimado.
    • Datos afectados (clientes, pagos, emails).
    • Acciones tomadas para remediar.

    Conclusión: vigilancia constante

    Los usuarios fantasma son síntoma de un problema mayor: tu WordPress ha sido vulnerado. Borrar las cuentas es limpiar síntomas, pero necesitas diagnosticar qué permitió el acceso inicial.

    En mi experiencia, es casi siempre una combinación de:

    • Plugins o temas desactualizados (60% de casos).
    • Contraseñas débiles o reutilizadas (25% de casos).
    • Falta de protección de wp-login (10% de casos).
    • Hospedaje compartido inseguro (5% de casos).

    Si necesitas que un profesional revise tu WordPress para identificar vulnerabilidades, auditar usuarios y asegurar que no hay backdoors escondidos, te invito a contactar con ManuelFolgar.com. Ofrecemos análisis forense completo, limpieza de malware verificada y hardening específico para tu sitio.

    Tu WordPress es tu tienda digital. Merece la misma protección que tu hogar.

  • Qué buscan los hackers en tu base de datos WordPress primero

    Qué buscan los hackers en tu base de datos WordPress primero

    Qué buscan los hackers en tu base de datos WordPress primero

    Cuando analizo un sitio WordPress comprometido, lo primero que veo es que los atacantes no actúan al azar. Tienen un plan específico y una jerarquía clara de objetivos. La base de datos es el corazón de tu WordPress, y los hackers lo saben. En mi experiencia como especialista en limpieza de malware, he visto cómo los atacantes acceden a la base de datos para robar información sensible, insertar backdoors persistentes y esconder sus actividades maliciosas. Este artículo te muestra exactamente qué buscan primero y cómo protegerte.

    Las credenciales de usuario: el botín más valioso

    Lo primero que busca un hacker en tu base de datos WordPress son las credenciales de usuario. Cuando accedo a wp_users (la tabla donde WordPress almacena usuarios), los atacantes ya están allí. El campo user_login contiene los nombres de usuario y user_pass contiene las contraseñas hasheadas, normalmente con WordPress hash (MD5 + salting variable).

    ¿Por qué es tan valioso? Porque una contraseña crackeada les da acceso al panel de administración. Desde allí pueden crear nuevas cuentas de admin, cambiar configuraciones de seguridad y instalar plugins maliciosos sin levantar sospechas en los logs. He visto ataques donde el hacker roba las credenciales de un usuario editor (no admin) para mantener acceso de bajo perfil durante meses.

    Lo que recomiendo siempre: implementa autenticación de dos factores (2FA) en WordPress. Plugins como Wordfence ofrecen 2FA basado en OTP (One-Time Password) que invalida cualquier credencial robada sin el segundo factor. También configura password strength requeridos en wp-config.php y fuerza cambios de contraseña periódicos.

    Datos de clientes: direcciones, teléfonos y emails

    Si tu WordPress tiene WooCommerce o cualquier plugin de e-commerce, la tabla wp_postmeta contiene metadatos de órdenes con información personal: direcciones de envío, números de teléfono, emails de clientes. Esto es oro puro para un ciberdelincuente. Los datos de contacto se venden en marketplaces oscuros de la dark web a spammers y estafadores.

    He analizado sitios donde los atacantes modificaban wp_postmeta para inyectar código JavaScript que capturaba datos de tarjetas de crédito en tiempo real (técnica conocida como Magecart). El acceso a la base de datos les permitía persistencia: cuando limpiábamos el malware del servidor, la inyección volvía a regenerarse porque el código malicioso estaba en la base de datos misma.

    Para protegerte: encripta datos sensibles con métodos como AES-256 antes de almacenarlos. Implementa un WAF (Web Application Firewall) que monitore intentos de acceso no autorizado a wp_postmeta. Y sobre todo, mantén un log detallado de accesos a bases de datos usando herramientas como Wordfence CLI para auditoría.

    Opciones de WordPress: configuración comprometida

    La tabla wp_options almacena toda la configuración de tu sitio: URLs, plugins activos, tema activo, credenciales de API, tokens de terceros. Cuando un hacker obtiene acceso a wp_options, controla efectivamente tu WordPress sin tocar ni un archivo.

    ¿Qué hacen? Insertan opciones personalizadas maliciosas. He encontrado código JavaScript malicioso almacenado como opción wp_options llamada custom_script_footer que se inyecta en cada página. O modifican home_url y siteurl para apuntar a un dominio de malware. En casos más sofisticados, inyectan opciones que ejecutan código PHP cada vez que se carga wp-load.php.

    Un ejemplo real: un cliente tenía su opción admin_email comprometida. Los hackers la habían cambiado a un email controlado por ellos. Cuando generaba notificaciones de seguridad o cambios en WordPress, iban directo al email del atacante, no al administrador real. Así mantenían control invisible sobre el sitio.

    Mi recomendación: usa plugins como iThemes Security o Sucuri que monitorizan cambios en wp_options en tiempo real. Implementa cambios de configuración solo desde direcciones IP whitelist. Y realiza auditorías regulares de wp_options comparando backups limpios con la configuración actual.

    Posts y páginas: contenido inyectado y SEO poisoning

    La tabla wp_posts es donde viven tus artículos y páginas. Los hackers la utilizan para dos cosas principales: inyectar contenido malicioso invisible y spam SEO (SEO poisoning).

    El primero es más insidioso: crean posts o páginas nuevas con contenido oculto (display:none en CSS o texto blanco sobre fondo blanco) que contiene palabras clave de malware, casinos, viagra, etc. Google indexa este contenido envenenado y tu sitio aparece en búsquedas de términos maliciosos. Luego redirige a esos visitantes a sitios de estafa.

    El segundo es más visible pero igual de destructivo: modifican el post_content de artículos existentes inyectando links a sitios maliciosos, redireccionadores, o código JavaScript. He visto casos donde atacantes simplemente duplicaban todos tus posts reales, pero con URLs apuntando a un dominio clonado controlado por ellos. De noche, se llevaban todo tu tráfico SEO.

    Lo que defiendo: implementa versionado de contenido con plugins como WP Revisions Control. Mantén backups diarios de la base de datos (no solo archivos). Usa Wordfence para monitorizar cambios en wp_posts en tiempo real. Y audita regularmente posts que no reconoces: muchas veces están ahí ocultos esperando a que Google los indexe.

    Información de plugins y temas: vulnerabilidades conocidas

    Cuando acceso a wp_options busco la lista de plugins instalados (stored en plugin_list) y el tema activo. Los hackers hacen lo mismo. ¿Por qué? Porque necesitan saber exactamente qué versión tienes instalada para explotar vulnerabilidades conocidas.

    Si tu base de datos revela que tienes Yoast SEO versión 13.0 (vulnerable a SQLi), el atacante sabrá exactamente cómo explotarlo. Si ves WooCommerce 2.6, sabrán que hay RCE (Remote Code Execution) disponible. La base de datos es el mapa de carreteras del atacante.

    En casos avanzados, modifican la lista de plugins activos en wp_options para desactivar plugins de seguridad sin que aparezca en el panel administrativo real. El plugin sigue desactivado en la base de datos, pero WordPress cree que está activo. Eso crea un falso sentido de seguridad mientras el malware actúa libremente.

    Mi recomendación: usa MalCare o Sucuri que no solo monitorean archivos, sino cambios en la base de datos a nivel de opciones y configuración de plugins. Elimina plugins desactualizados y no usados. Mantén un inventario actualizado de qué plugins deberían estar activos y compáralo regularmente con wp_options.

    Metadata de usuario: permisos y roles elevados

    La tabla wp_usermeta almacena metadatos de usuarios: roles, capabilities, datos personalizados. Los hackers la buscan para elevar privilegios. He encontrado casos donde atacantes asignaban rol de administrator a nuevas cuentas fantasma manipulando wp_usermeta directamente, saltándose cualquier auditoría de UI (User Interface).

    También modifican capabilities: pueden otorgar edit_pages, delete_posts, manage_plugins a usuarios de bajo nivel sin que aparezca en el perfil visible. Luego usan esas cuentas comprometidas como backdoors de largo plazo.

    Algo más: acceden a wp_usermeta para buscar tokens de API (si almacenas tokens de servicios externos ahí), cookies de sesión, o datos de recuperación de contraseña. Cada pieza de información es un vector potencial de ataque en cadena.

    Logs y registros: borrando huellas

    Aunque no es una tabla estándar, muchos plugins de seguridad guardan logs en tablas personalizadas (wp_wordfence_ips, wp_wordfence_options). Los hackers buscan y eliminan estas tablas primero. ¿Por qué? Para borrar toda evidencia de su presencia.

    He visto ataques donde el primer comando ejecutado después de acceso a base de datos es DROP TABLE wp_wordfence_* o TRUNCATE wp_security_logs. Es como limpiar la escena del crimen antes de que llegue la policía.

    Si no tienes logs externos (almacenados fuera de tu servidor WordPress), no tendrás prueba de qué pasó exactamente. Por eso recomiendo siempre mantener logs replicados en sistemas externos: OWASP recomienda logging centralizado como medida defensiva crítica.

    Cómo proteger tu base de datos WordPress hoy

    Ahora que sabes qué buscan los hackers, aquí está el plan defensivo concreto:

    • Acceso a base de datos restricto: Cambia el prefijo de tablas (no dejes wp_). Limita acceso a servidor MySQL solo a localhost. Usa cuentas de usuario MySQL separadas con permisos granulares (no des ALL PRIVILEGES a WordPress).
    • Monitoreo en tiempo real: Implementa Wordfence + MalCare que monitorizan cambios en wp_users, wp_options, wp_posts. Configurar alertas inmediatas si se detectan inserciones sospechosas.
    • Backups diarios: Almacena backups de base de datos en ubicación externa (no en el mismo servidor). Comprueba regularmente que puedes restaurar desde backup limpio.
    • Hardening de WordPress: Deshabilita edición de archivos de plugins/temas (define(‘DISALLOW_FILE_EDIT’, true) en wp-config.php). Limita intentos de login a wp-login.php. Implementa 2FA.
    • Auditoría de permisos: Revisa wp_usermeta mensualmente. Elimina usuarios inactivos. No uses cuentas admin para tareas cotidianas.
    • Encriptación en tránsito: Configura SSL/TLS forzado. Usa conexiones HTTPS para acceso a base de datos remota si es necesario (aunque no lo recomiendo).
    • Análisis forense regular: Usa herramientas como Sucuri SiteCheck o VirusTotal para detectar malware en base de datos.

    ¿Qué hacer si ya sospechas compromiso de base de datos?

    Si tienes indicios de que tu base de datos ha sido comprometida (usuarios extraños, opciones modificadas, posts ocultos), la prioridad es forensia antes de limpiar:

    1. Aísla el sitio: toma offline temporalmente para evitar propagación de malware.
    2. Exporta la base de datos: crea dump completo para análisis posterior. No confíes en lo que ves en phpMyAdmin (el atacante puede haberlo modificado).
    3. Revisa cambios recientes en wp_users, wp_options, wp_posts comparando con backup limpio anterior.
    4. Busca opciones personalizadas o tablas no estándar que el atacante haya creado.
    5. Restaura desde backup limpio conocido, no solo desde base de datos limpiada.
    6. Implementa los hardening measures listados arriba antes de poner el sitio online de nuevo.

    Este proceso requiere experiencia real en análisis de malware. En mi experiencia, intentar limpiar por cuenta propia a menudo deja puerta trasera invisible que el atacante exploita nuevamente en semanas. INCIBE ofrece guías de respuesta a incidentes que complementan este análisis técnico.

    La realidad de la seguridad de base de datos

    Proteger tu base de datos WordPress no es una tarea única. Es un proceso continuo de monitoreo, auditoría y hardening. Cada tabla contiene información valiosa para un atacante: credenciales, datos de clientes, configuración de seguridad, incluso pruebas de su propia actividad maliciosa.

    Lo que he aprendido después de limpiar cientos de WordPress comprometidos es que los sitios más seguros no son los que tienen las protecciones más bonitas, sino los que tienen visibilidad total sobre qué está pasando en su base de datos.

    Si necesitas un análisis profesional de tu base de datos WordPress, o sospechas que has sido comprometido, puedo ayudarte. En cuanto a cumplimiento RGPD, también es crítico reportar brechas de datos de clientes correctamente.

    ¿Quieres una auditoría de seguridad de base de datos completa? Contacta conmigo en ManuelFolgar.com/contacto. Realizaré un análisis forense profesional de tu WordPress, identificaré vulnerabilidades específicas en tu base de datos, y te proporcionaré un plan de hardening personalizado.

  • Qué archivos temporales pueden contener backdoors WordPress

    Qué archivos temporales pueden contener backdoors WordPress

    Qué archivos temporales pueden contener backdoors en WordPress

    En mi experiencia analizando sitios comprometidos, los archivos temporales son uno de los vectores más infrautilizados por los atacantes para alojar backdoors. Mientras los administradores se centran en proteger wp-admin y wp-content/plugins, los malware se esconden en directorios que parecen inofensivos. Te voy a mostrar dónde buscar y cómo evitar que tu WordPress sea el próximo objetivo.

    Por qué los atacantes usan archivos temporales

    Los archivos temporales ofrecen una ventaja táctica clara: suelen tener permisos más permisivos, se limpian menos frecuentemente (o nunca) y los administradores rara vez los monitorean. Cuando realizo auditorías de seguridad, encuentro backdoors alojados en carpetas tmp porque el atacante sabe que pasarán desapercibidos durante semanas.

    Un backdoor en wp-content/plugins/malware.php genera alertas; uno en /tmp/ o en wp-content/cache/ pasa bajo el radar. Esta es la razón por la que debes conocer exactamente dónde WordPress almacena datos temporales y qué permisos tienen esas carpetas.

    Directorios WordPress que albergan datos temporales

    WordPress utiliza varios directorios para almacenamiento temporal. La mayoría son legítimos, pero todos son potenciales puntos de entrada para malware:

    • wp-content/cache/ – Si usas plugins de caché como WP Super Cache o W3 Total Cache, esta carpeta contiene archivos serializados. Un atacante puede inyectar código PHP disfrazado como datos cacheados.
    • wp-content/uploads/ – Aunque técnicamente es para medios, los atacantes cargan webshells con extensiones como .php, .phtml o .php5. Si la configuración permite ejecución de scripts, tienes un backdoor operativo.
    • wp-content/backup-*/ o wp-content/backups/ – Generado por plugins de backup. Los archivos .sql sin protección pueden contener información sensible; los .tar.gz pueden contener backdoors empaquetados.
    • /tmp/ (a nivel de servidor) – No es específico de WordPress, pero los plugins pueden escribir aquí. Si una librería PHP usa /tmp/ sin validación, es un vector de ataque.
    • wp-content/upgrade/ – Usado durante actualizaciones de plugins y temas. Un backdoor aquí puede persistir entre actualizaciones si el atacante lo recoloca.

    Tipos de backdoors que encontré en archivos temporales

    En mis análisis forenses, he documentado varios patrones. Los más comunes son:

    Webshells camufladas en cache: El atacante inyecta una función PHP mínima dentro de archivos .php del directorio cache. Por ejemplo, un archivo cache-post-123.php contiene datos legítimos más una línea que ejecuta comandos. Parece un error de caché, pero funciona como un shell interactivo.

    Archivos .htaccess malicioso en subdirectorios: Creando un .htaccess en wp-content/cache/ que redirige todas las peticiones .jpg a un PHP oculto. El servidor ejecuta el script malicioso sin que el nombre de archivo lo sugiera.

    Backdoors en archivos de sesión de PHP: Si el servidor usa /tmp/ o wp-content/temp/ para sesiones, el atacante puede escribir código en esos archivos si conoce el patrón de nombres. Cuando PHP carga la sesión, ejecuta el código.

    Plugins de caché comprometidos: Un módulo de caché nulled o desactualizado que contiene un backdoor integrado. Se actualiza con cada carga de página, ocultándose en los logs.

    Cómo detectar backdoors en archivos temporales

    La detección manual es tedious pero fundamental. Lo que hago siempre es:

    1. Listar archivos por fecha de modificación: Conéctate por SFTP o SSH y ejecuta:

    find wp-content/cache -type f -mtime -7

    Esto muestra archivos modificados en los últimos 7 días. Un archivo tmp sin cambios esperados es sospechoso.

    2. Buscar patrones de código malicioso: Los backdoors suelen contener strings específicos. Ejecuta:

    grep -r "eval|base64_decode|system|passthru|exec" wp-content/cache/

    Si encuentras estas funciones en archivos que no deberían tenerlas, es una bandera roja.

    3. Verificar tamaño de archivos inusual: Un archivo cache debería tener un tamaño predecible. Si wp-content/cache/ contiene archivos de 500KB cuando normalmente son 10KB, investiga.

    4. Usar herramientas automatizadas: Wordfence CLI y MalCare escanean estos directorios por defecto. Son más rápidas y fiables que búsquedas manuales.

    Configuración de seguridad para archivos temporales

    Proteger estas carpetas es tan importante como detectar el malware. Estas son las medidas que siempre recomiendo:

    Deshabilitar ejecución de PHP en wp-content/uploads/: Añade esto a un archivo .htaccess en esa carpeta:

    <FilesMatch ".php$">
    Deny from all
    </FilesMatch>

    Incluso si el atacante sube un .php, no se ejecutará.

    Proteger wp-content/cache/ con permisos restrictivos: El propietario debe ser el usuario del servidor (www-data), con permisos 755 en directorios y 644 en archivos. Un 777 es una invitación abierta.

    chmod -R 755 wp-content/cache
    chmod -R 644 wp-content/cache/*

    Configurar wp-config.php para deshabilitar edición de archivos: Esto impide que un atacante con acceso administrativo inyecte código:

    define('DISALLOW_FILE_EDIT', true);
    define('DISALLOW_FILE_MODS', true);

    Limpiar caches regularmente: Si usas WP Super Cache, configúralo para expirar cada 2-4 horas. Un cache antiguo es un backdoor potencial no detectado.

    Logs y monitoreo continuo

    La detección pasiva no es suficiente. Necesitas visibilidad activa sobre qué sucede en tus directorios temporales.

    Configura logs de acceso a wp-content/ en tu servidor. Con nginx o Apache, puedes registrar cada petición. Busca patrones sospechosos: múltiples 404 seguidos de un 200 exitoso, o accesos a archivos que no deberían existir.

    Usa OWASP Web Security Testing Guide como referencia para identificar qué constituyente anómalo en un log.

    Si tienes acceso a WP-CLI, ejecuta esto regularmente:

    wp eval 'echo date("Y-m-d H:i:s") . ": Check completedn";'

    Esto te ayuda a establecer un baseline de cuándo suceden cosas en tu WordPress.

    Herramientas recomendadas para auditoría

    No debes confiar únicamente en búsquedas manuales. Las herramientas profesionales son más exhaustivas:

    • Wordfence Scan – Detecta backdoors en caché y directorios temporales con su motor de firmas.
    • Sucuri SiteCheck – Análisis desde la nube, identifica código inyectado en archivos públicos.
    • VirusTotal – Carga archivos sospechosos para analizarlos con 70+ motores antimalware.
    • Análisis forense local con strings y file – Herramientas Linux para inspeccionar contenido binario de archivos comprometidos.

    Limpieza de backdoors encontrados

    Si has identificado un backdoor en archivos temporales, el siguiente paso es crítico:

    1. No confíes en limpiar solo el archivo. El atacante puede tener acceso administrativo. Cambiar contraseñas de usuarios, revisar permisos de carpetas y buscar múltiples puntos de entrada.

    2. Limpia el caché completamente: Vacía wp-content/cache/, asegúrate de que el plugin de caché regenere archivos limpios.

    3. Revisa plugins y temas: Si un plugin escribía backdoors en tmp, está comprometido. Desactiva, borra e instala una versión verificada desde el repositorio oficial.

    4. Audita cambios recientes: Usa NVD/CVE para verificar si los plugins comprometidos tenían vulnerabilidades conocidas. Esto te ayuda a entender cómo entró el atacante.

    Política de seguridad preventiva

    La mejor defensa es la prevención. Estos hábitos reducen drásticamente el riesgo:

    • Mantén WordPress, plugins y temas siempre actualizados. Los backdoors explotan vulnerabilidades old-day.
    • Usa contraseñas fuertes y autenticación de dos factores en wp-admin.
    • Instala solo plugins desde el repositorio oficial de WordPress.org. Los temas nulled y plugins crackeados suelen contener backdoors integrados.
    • Realiza copias de seguridad semanales (no en el mismo servidor). Son tu única opción si necesitas restaurar después de una infección.
    • Limita permisos de carpetas: nunca 777, siempre 755 en directorios y 644 en archivos.

    Casos reales que he atendido

    Para que entiendas el riesgo real, te cuento dos casos que he analizado:

    Caso 1 – Blog de viajes comprometido: El propietario no actualizaba W3 Total Cache desde hacía 18 meses. El plugin tenía una vulnerabilidad de RFI que permitía inyectar código. El backdoor estaba en wp-content/cache/page_cache/index-http-443-example.com-2024-01-15-21-45-12.html. Era invisible porque parecía un archivo legítimo de caché con extensión .html (aunque contenía PHP ejecutable). Lo detecté porque noté que ese archivo se «regeneraba» cada 5 minutos, cuando debería hacerlo cada 24 horas.

    Caso 2 – Tienda online comprometida: Un plugin de caché nulled, descargado de un sitio de «plugins gratis». Contenía un backdoor hardcodeado en su función de limpieza de caché. Cada vez que el caché se regeneraba, creaba un archivo webshell en wp-content/uploads/cache_temp/. El atacante tenía acceso de root al servidor.

    Ambos casos hubieran sido evitables con actualización regular y verificación de plugins.

    Integración con Google Search Console y auditorías de seguridad

    Si tu sitio ha sido comprometido, Google lo sabrá. La Search Console mostrará advertencias de «contenido malicioso detectado». Una vez limpies el backdoor:

    • Solicita una revisión de seguridad en Google Search Console.
    • Envía el sitio a Google Safe Browsing para verificación.
    • Usa Sucuri SiteCheck para confirmar que la malaria está limpia.

    El tiempo entre infección y limpieza impacta tu SEO y reputación. Cada día cuenta.

    Si sospechas que tu WordPress contiene backdoors en archivos temporales, no esperes. Contáctame para una auditoría de seguridad profesional en ManuelFolgar.com/contacto. Realizaré un escaneo forense completo, identificaré todos los puntos de entrada y te proporcionaré un plan de hardening específico para tu configuración.

    La seguridad de tu sitio no es un gasto; es una inversión en su continuidad.

  • Qué es el malware polimórfico y cómo afecta WordPress

    Qué es el malware polimórfico y cómo afecta WordPress

    Qué es el malware polimórfico y por qué es una amenaza crítica para WordPress

    En mi experiencia analizando miles de sitios WordPress comprometidos, el malware polimórfico es una de las amenazas más silenciosas y destructivas que existen. A diferencia de un backdoor convencional que mantiene siempre la misma firma de código, el malware polimórfico se regenera y cambia constantemente para evadir los sistemas de detección. Cada vez que se ejecuta, modifica su propio código manteniendo la misma funcionalidad maliciosa.

    ¿Por qué esto es tan peligroso para tu WordPress? Porque las herramientas antimalware tradicionales —incluso las más sofisticadas como Wordfence o MalCare— se basan en detectar firmas de código conocidas. Si el malware cambia su estructura cada pocas horas, las defensas se vuelven prácticamente inútiles. He visto sitios comprometidos donde los scanners reportaban «limpio» mientras el atacante robaba datos de clientes desde un webshell invisible.

    Cómo funciona el malware polimórfico: el motor de mutación

    El malware polimórfico contiene un motor de mutación —código que se reescribe a sí mismo— sin cambiar su lógica principal. Imagina un backdoor que encripta su payload de formas diferentes cada ejecución, o que cambia los nombres de sus funciones automáticamente. Así logra burlar firmas estáticas.

    Los mecanismos más comunes que veo en WordPress son:

    • Ofuscación dinámica: El código se encripta con claves que varían en cada instancia. Cuando lo analizan en un sandbox, usa una clave diferente que en el servidor real.
    • Inyección en archivos legítimos: Se integra dentro de funciones normales de WordPress (functions.php, index.php del tema) pero cambia su posición y estructura constantemente.
    • Uso de variables polifilmórficas: El código genera nombres de variables al azar en tiempo de ejecución, imposibilitando el pattern matching.
    • Envío remoto de payload: Descarga código malicioso desde servidores C2 (Command & Control) en fragmentos que se reensamblan en memoria, sin dejar rastro en disco.

    Lo más peligroso que he encontrado son variantes que se adaptan detectando el entorno: si identifican que un scanner está analizando el sitio, desactivan la funcionalidad maliciosa temporalmente. Vuelven a activarse después. Es como tener un intruso que se duerme cuando ve que lo estás buscando.

    Vectores de entrada del malware polimórfico en WordPress

    Ahora bien, ¿cómo llega este malware a tu sitio? Los vectores no son diferentes a los del malware estándar, pero los atacantes que usan polimórficos suelen ser más sofisticados:

    Plugins y temas nulled o desactualizados

    Cuando descargo un tema nulled o de fuentes no oficiales, obtengo malware gratis. Los desarrolladores maliciosos integran puertas traseras polimórficas directamente en el código. Hace poco analicé un cliente que usaba la versión «pirateada» de un tema premium: contenía un downloader polimórfico que inyectaba código diferente en cada página que visitaban los usuarios.

    Vulnerabilidades sin parchear en plugins populares

    Un plugin desactualizado con una falla de carga de archivos (LFI/RFI) es la puerta de entrada perfecta. El atacante sube un php que genera el malware polimórfico directamente en el servidor. Hace poco vimos campañas que aprovechaban CVEs en plugins de formularios y backup para inyectar webshells que se regeneraban cada 10 minutos.

    Fuerza bruta contra wp-admin y wp-login.php

    Aunque parezca anticuado, sigue siendo efectivo. Con credenciales robadas, suben temas maliciosos o modifican functions.php. He visto casos donde el malware polimórfico se activaba solo después de 48 horas de acceso, dificultando la correlación causa-efecto.

    Inyección SQL en búsquedas personalizadas o plugins obsoletos

    Algunos plugins de búsqueda avanzada o de integración con bases de datos externas tienen fallos de sanitización. Un atacante puede inyectar código SQL que escribe archivos PHP maliciosos directamente en el servidor. Estos archivos contendrán el motor polimórfico.

    Supply chain attacks: actualizaciones comprometidas

    Aunque raro, he documentado casos donde repositorios legales fueron vulnerados. El usuario descargaba una «actualización» legítima que contenía malware polimórfico. Es el escenario más difícil de detectar porque el código entra por la ruta oficial.

    Cómo detectar malware polimórfico en tu WordPress (métodos prácticos)

    La detección basada en firmas falla. Aquí es donde debo ser honesto: no existe un método 100% fiable. Pero hay indicadores comportamentales que te ayudarán:

    Análisis de rendimiento y consumo de recursos

    El malware polimórfico requiere CPU para regenerarse. Si tu sitio WordPress está lento sin razón aparente, o los logs de error muestran procesos PHP de larga ejecución a horas extrañas, investiga. He encontrado miners polimórficos que solo se activaban entre las 3 y las 5 de la mañana para evitar detección.

    Auditoría de logs y permisos de archivos

    Ejecuta un comando WP-CLI para revisar cambios recientes:

    wp shell-exec «find /var/www/html/wp-content -type f -mtime -7 -name ‘*.php’ | head -20»

    Busca archivos PHP modificados en la última semana que no sean actualizaciones esperadas. El malware polimórfico debe escribir en el servidor para persistir.

    Análisis con herramientas especializadas

    Wordfence y MalCare incluyen heurísticas comportamentales (no solo firmas). Si ambas reportan «limpio» pero tienes sospechas, usa VirusTotal para escanear archivos PHP específicos. Sube también tus logs de acceso para análisis.

    Revisión de Google Search Console

    Si Google ha detectado malware en tu sitio, recibirás alertas. El malware polimórfico a menudo deja rastros en las alertas de Search Console antes de que tú lo notes localmente, porque Google tiene mejor visibilidad de comportamientos maliciosos.

    Análisis de tráfico anómalo

    Usa Google Analytics o Matomo para detectar patrones raros: picos de tráfico a /wp-json/, accesos a archivos admin sin usuarios registrados, o requests a rutas que no existen. El malware polimórfico realiza «llamadas de hogar» (contacto con servidores C2) que se verán como tráfico extraño.

    Impacto real: qué hace el malware polimórfico en WordPress

    Ahora que entiendes cómo funciona, te muestro el daño real:

    • Robo de datos de clientes: Skimmers polimórficos (Magecart-like) capturan tarjetas de crédito. He visto tiendas online comprometidas que perdían datos de 100+ transacciones antes de detección.
    • Minería de criptomonedas: Se ejecuta en background, usando CPU de tu servidor. Tus costos de hosting se triplican, y el usuario final ve un sitio lentísimo.
    • SEO poisoning: Inyecta spam de enlaces o contenido oculto. Tu ranking en Google cae, y buscas el motivo durante meses sin éxito.
    • Distribución de malware a visitantes: El sitio se convierte en distribuidor involuntario de malware a otros usuarios.
    • Backdoors persistentes: Aunque limpies un malware polimórfico, el atacante tiene múltiples puertas traseras. Vuelve a entrar en días.
    • Pérdida de reputación: Navegadores marcan tu sitio como «peligroso». Clientes y motores de búsqueda lo evitan.

    Estrategia de hardening contra malware polimórfico

    La prevención es tu mejor defensa. Aquí están las medidas que recomiendo siempre:

    Actualización inmediata de todo

    WordPress core, plugins, temas. Sin excepciones. El 95% de los casos de malware polimórfico entran por vulnerabilidades conocidas. Usa WordPress.org para seguir advisories.

    Cambio de prefijo de tabla y deshabilitar edición de archivos

    En wp-config.php:

    define(‘DISALLOW_FILE_EDIT’, true);

    Esto impide que un atacante con acceso admin edite functions.php. Cambia el prefijo de tabla (por defecto wp_) a algo aleatorio. Limita el daño de inyecciones SQL.

    Protección de wp-config.php y .htaccess

    En tu .htaccess:

    <Files wp-config.php>
    order allow,deny
    deny from all
    </Files>

    Protege este archivo de accesos directos. El malware polimórfico busca credenciales de BD aquí.

    Limitación de intentos de login y 2FA

    Limita intentos de login a 5 por minuto por IP. Implementa autenticación de dos factores (2FA) con un plugin como Wordfence. Así bloqueas la puerta de entrada más común.

    Monitoreo en tiempo real con CSP y HSTS

    Implementa Content Security Policy (CSP) para prevenir inyecciones de scripts. En tu servidor (nginx o Apache):

    add_header Content-Security-Policy «default-src ‘self’;» always;

    HSTS obliga a conexiones HTTPS, evitando Man-in-the-Middle que inyecten malware:

    add_header Strict-Transport-Security «max-age=31536000; includeSubDomains» always;

    Auditorías de seguridad periódicas

    Realiza auditorías cada 3 meses. Revisa permisos de carpetas (wp-content debe ser 755, archivos 644), analiza logs de acceso, ejecuta scripts de integridad de archivos.

    Qué hacer si ya estás comprometido

    Si sospechas que tu WordPress tiene malware polimórfico, estos son los pasos inmediatos:

    1. No entres en pánico, pero actúa rápido: El malware polimórfico se regenara cada hora si no cortas su acceso.
    2. Aísla el sitio: Toma una copia de seguridad completa (para análisis posterior), luego desconecta el sitio del público si es posible.
    3. Cambiar todas las contraseñas: WordPress admin, FTP/SFTP, base de datos, hosting. El atacante tiene acceso.
    4. Scannea con múltiples herramientas: Wordfence, MalCare, Sucuri SiteCheck. Si uno falla, otro puede detectar patrones comportamentales.
    5. Revisa los logs: Busca archivos PHP creados recientemente, cambios en functions.php, uploads anómalos. Los webshells dejan rastro en logs de acceso (POST a archivos que no hacen GET, por ejemplo).
    6. Limpieza manual: Si identificas archivos maliciosos, elimínalos. Pero recuerda: el motor polimórfico puede haber puesto múltiples puertas traseras. Una limpieza superficial es insuficiente.
    7. Restauración segura: Restaura desde un backup anterior a la infección. Si no tienes, necesitas ayuda profesional.

    He limpiado cientos de WordPress comprometidos. En el 70% de los casos donde el cliente intenta DIY, el malware vuelve en una semana porque hay backdoors residuales que no vieron.

    Recursos adicionales y referencias técnicas

    Para profundizar en malware polimórfico y seguridad WordPress, te recomiendo consultar:

    Finalmente, recuerda que el malware polimórfico es una amenaza sofisticada que requiere un enfoque multicapa. No confíes en una única herramienta ni en una única auditoría. La vigilancia continua, las actualizaciones constantes y los backups robustos son tu mejor escudo.

    Si crees que tu WordPress está comprometido o quieres una auditoría de seguridad profesional, ponte en contacto conmigo. Ofrezco análisis forense completo, limpieza garantizada y hardening posterior para evitar reinfecciones. Accede aquí para solicitar tu auditoría de seguridad en ManuelFolgar.com.

  • Qué hacer si tu sitio WordPress muestra contenido malicioso

    Qué hacer si tu sitio WordPress muestra contenido malicioso

    Qué hacer si tu sitio WordPress muestra contenido malicioso

    Cuando analizo un sitio WordPress comprometido, lo primero que veo es el pánico del propietario. Y es comprensible: tu web muestra anuncios raros, redirige a sitios de apuestas, o peor aún, Google la ha marcado como peligrosa. Te digo por experiencia que es recuperable, pero necesitas actuar ya.

    El contenido malicioso en WordPress no aparece por arte de magia. Detrás hay un ataque real: un plugin vulnerable, una contraseña débil, o un backdoor que se coló hace semanas sin que lo vieras. En este artículo te muestro exactamente qué hacer para identificarlo, limpiarlo y evitar que vuelva a pasar.

    Síntomas de que tu WordPress tiene contenido malicioso

    No siempre es evidente. A veces el malware es muy discreto. Lo que recomiendo siempre es que verifiques estos indicadores:

    • Redirecciones extrañas: Cuando entras a tu web, te lleva a casinos, sitios de phishing o descargadores de malware. Esto es típico de backdoors o plugins inyectados.
    • Contenido fantasma: Ves posts o páginas que nunca creaste. Muchas veces están ocultos en el front-end pero indexados en Google (spam SEO).
    • Anuncios intrusivos: Publicidad de criptomonedas, préstamos rápidos o medicamentos sin licencia. Generalmente inyectada vía JavaScript malicioso.
    • Alerta de Google Search Console: «Sitio comprometido detectado» o «Contenido no deseado». Google es bastante fiable en esto.
    • Rendimiento lento: El servidor va a paso de tortuga. Un cryptominer consume CPU constantemente.
    • Cambios en wp-config.php o .htaccess: Líneas extrañas, dominios raros, código ofuscado. Eso no lo pusiste tú.
    • Usuarios admin que no reconoces: En Usuarios de WordPress aparecen cuentas que nunca creaste. Backdoor clásico.

    Paso 1: Aislamiento inmediato (antes de tocar nada)

    Aquí es donde muchos se equivocan. Si empiezas a borrar sin estrategia, puedes perder logs valiosos o dejar el backdoor activo. Lo que hago siempre es:

    Desactiva el sitio sin eliminarlo: Reemplaza el index.php de tu web con una página estática que diga «Sitio en mantenimiento». Esto detiene el malware sin borrarlo.

    Accede al servidor por SSH (no por FTP): FTP envía contraseñas sin cifrar. Usa SSH con clave pública:

    ssh usuario@tuprovedor.com

    Haz una copia de seguridad completa del servidor: Aunque esté comprometido, la necesitarás para forense o recuperación. Descarga /home/usuario/public_html completo:

    scp -r usuario@tuprovedor.com:/home/usuario/public_html ./backup-malware

    Revisa logs de acceso: En /var/log/apache2/access.log (o nginx/access.log) verás las IPs y URLs que gatillaron el ataque. Busca patrones de inyección SQL o RFI:

    tail -500 /var/log/apache2/access.log | grep -E «(union|select|script|shell)»

    Paso 2: Identificar el vector de ataque

    Antes de limpiar, necesito saber cómo entraron. Esto es crítico. Las causas principales que veo en mi trabajo:

    Plugins o temas desactualizados (60% de casos): Es el camino más fácil. Un plugin viejo tiene CVEs públicas que cualquier bot automatizado explota. Accede vía SSH y lista todos los plugins con versiones:

    find ./wp-content/plugins -name «readme.txt» -exec grep «Version» {} +

    Compáralo con NVD de NIST o el repositorio oficial de WordPress. Si encuentras uno con CVE crítica, ese fue el punto de entrada.

    Contraseña de admin débil (30% de casos): El atacante hizo brute force contra wp-login.php. Revisa en WordPress:

    • Ajustes → General → Dirección de WordPress
    • Busca también en los logs si hay intentos de login fallidos masivos en wp-login.php

    Servidor mal configurado (10% de casos): Permisos de carpetas demasiado permisivos (777), PHP inseguro, o software de servidor viejo. En SSH:

    ls -la /home/usuario/public_html

    Las carpetas no deberían estar en 777. Debería ser 755 como máximo.

    Paso 3: Limpieza manual vs. herramientas

    Aquí tienes dos caminos. Te digo cuál es cada uno:

    Opción A: Limpieza manual (para ataques leves):

    Si identificaste el plugin malicioso, accede por SSH y elimina su carpeta completa:

    rm -rf /home/usuario/public_html/wp-content/plugins/nombre-plugin-malicioso

    Luego, busca código inyectado en las funciones.php del tema activo:

    grep -r «eval|base64_decode|system|exec» /home/usuario/public_html/wp-content/themes/tu-tema/

    Cualquier línea que tenga esas funciones es sospechosa. Elimínala.

    Revisa también .htaccess (puede tener redirecciones maliciosas):

    cat /home/usuario/public_html/.htaccess

    Opción B: Herramientas automatizadas (para infecciones complejas):

    Cuando la infección es profunda, las herramientas ahorran tiempo. Yo uso:

    • Wordfence CLI: Instálalo en el servidor. Detecta malware conocido y backdoors. wp wordfence scan
    • MalCare: Escaneo en la nube, identifica código ofuscado. Ofrece limpieza automatizada también.
    • WP-CLI con auditoría manual: Aunque es más lento, es más preciso.

    Paso 4: Búsqueda de backdoors persistentes

    El malware serio deja backdoors. Son archivos que permiten acceso remoto incluso después de que creas que está limpio. Búscalos en carpetas temp y uploads:

    find /home/usuario/public_html -name «*.php» -newer /home/usuario/public_html/index.php | head -20

    Esto te muestra archivos PHP modificados recientemente. Cualquier .php raro en /wp-content/uploads/ es casi seguro un backdoor. Nombres típicos: shell.php, admin.php, c99.php, r57.php, uploader.php.

    También busca archivos JavaScript malicioso:

    grep -r «document.write|eval(» /home/usuario/public_html/wp-content/

    Si encuentras algo, no lo ejecutes. Solo bórralo:

    rm archivo-sospechoso.php

    Paso 5: Limpiar la base de datos

    El malware también se mete en la BD. Accede a phpMyAdmin o vía WP-CLI:

    wp db query «SELECT * FROM wp_posts WHERE post_type=’post’ AND post_author NOT IN (SELECT ID FROM wp_users)»

    Esto te muestra posts sin autor válido. Bórralos:

    wp post delete ID –force

    También revisa opciones raras:

    wp option list | grep -E «(eval|serialize|base64)»

    Paso 6: Cambiar todas las contraseñas y tokens

    Si llegaron a tu WordPress, llegaron a tus credenciales. No puedes dejarlas igual. Haz esto:

    • Cambia contraseña de admin en WordPress: Usuarios → Tu perfil → Contraseña nueva
    • Regenera claves de seguridad de wp-config.php: Usa el generador de WordPress y reemplaza todas las KEY y SALT
    • Cambia FTP/SSH del hosting
    • Cambia contraseña de base de datos en wp-config.php
    • Termina todas las sesiones activas en WordPress: Herramientas → Ajustes de sesión

    Paso 7: Hardening definitivo para que no vuelva

    Una limpieza sin hardening es un parche temporal. Lo que recomiendo siempre:

    Protege wp-login.php: Añade esto a .htaccess para limitar intentos de login:


    <Limit POST PUT>
    Order Allow,Deny
    Allow from all
    </Limit>

    Deshabilita edición de archivos en WordPress: Añade a wp-config.php:

    define(‘DISALLOW_FILE_EDIT’, true);

    Limita permisos de carpetas:


    chmod 755 /home/usuario/public_html
    chmod 755 /home/usuario/public_html/wp-content
    chmod 644 /home/usuario/public_html/wp-config.php

    Actualiza todo: Plugins, temas, WordPress core. Siempre.

    Instala un plugin de seguridad: Wordfence, Sucuri, o iThemes Security. Te avisan de cambios raros.

    Implementa 2FA: En el admin, con Google Authenticator o Authy.

    Genera un CSP (Content Security Policy): Esto previene inyección de scripts. En .htaccess:

    Header set Content-Security-Policy «default-src ‘self’»

    Paso 8: Notifica a Google y AEPD

    Si tu sitio fue marcado como comprometido, Google lo sabe. Entra en Google Search Console, ve a Seguridad → Problemas de seguridad, y marca la acción como resuelta.

    Google tarda días en reindexar, así que mientras tanto tendrás tráfico bajo. Es normal.

    También, según la AEPD, si recopilaban datos personales, debes notificar el incidente. Es obligatorio si hay riesgo para usuarios.

    Qué no debes hacer bajo ningún concepto

    • No reinstales WordPress encima del actual: Eso no elimina el malware, solo lo entierra.
    • No uses contraseñas predecibles: «admin123» o «wordpress» son lo primero que prueba un bot.
    • No ignores las alertas de seguridad: Si Wordfence te avisa de algo, investiga ese mismo día.
    • No confíes en «limpiadoras» gratuitas desconocidas: Muchos son estafas que empeoran la situación.
    • No dejes plugins inactivos años: Aunque desactivados, son vectores de ataque igual.

    Cuándo llamar a un profesional

    Sé honesto contigo mismo. Si encuentras más de un backdoor, si el malware está ofuscado con base64 múltiples niveles, o si no controlas SSH, necesitas ayuda. En mi trabajo veo situaciones donde el propietario ha pasado dos días intentando limpiar y ha empeorado las cosas.

    Un profesional:

    • Identifica todas las infecciones, no solo las obvias
    • Preserva evidencia para denuncias (si es necesario)
    • Configura hardening específico para tu ambiente
    • Monitoriza durante 30 días post-limpieza
    • Da garantía de que no vuelva

    Yo siempre digo: la diferencia entre intentar limpiarlo tú y hacerlo profesionalmente no es solo técnica, es de confianza. Cuando terminas, sabes que está limpio. No tienes dudas a las 3 de la mañana.

    Resumen de acciones inmediatas

    Si acabas de descubrir que tu WordPress tiene malware, hace esto ahora mismo:

    1. Aisla el sitio (mode mantenimiento)
    2. Haz backup completo del servidor
    3. Revisa logs de acceso para el vector de ataque
    4. Identifica y elimina plugins/temas sospechosos
    5. Busca backdoors en /wp-content/uploads y funciones.php
    6. Limpia la base de datos de posts huérfanos
    7. Cambia todas las contraseñas
    8. Implementa hardening (.htaccess, permisos, CSP)
    9. Notifica a Google
    10. Si no controlas, contacta a un experto

    El contenido malicioso en WordPress es recuperable. He visto webs pegadas del peor malware volver a estar limpias y seguras. Pero requiere precisión, paciencia y sin prisa. Y si en algún momento tienes dudas sobre si lo que ves es realmente malware, o si necesitas alguien que lo maneje de principio a fin, en ManuelFolgar.com hacemos exactamente eso: identificamos, limpiamos, y endurecemos tu WordPress.

    Si crees que tu sitio está comprometido, contacta conmigo para una auditoría gratuita de seguridad. Analizaré tu WordPress, te diré exactamente qué tiene y cuánto cuesta recuperarlo. Sin sorpresas.

  • Hardening WordPress: guía completa contra hackeos

    Hardening WordPress: guía completa contra hackeos

    Hardening WordPress: guía completa contra hackeos

    WordPress representa casi el 43% de todos los sitios web con gestor de contenidos, lo que lo convierte en el objetivo preferido de ciberdelincuentes. Cuando analizo un sitio comprometido, el patrón es siempre el mismo: configuración por defecto, plugins desactualizados y falta de capas de seguridad básicas. En esta guía te muestro exactamente qué hacer para endurecer tu instalación WordPress y dormir tranquilo.

    ¿Por qué WordPress es tan vulnerable?

    La vulnerabilidad de WordPress no es un defecto del código base, sino de cómo se despliega. La plataforma es open source, lo que significa que cada línea de código está disponible públicamente para que investigadores en seguridad, pero también atacantes, busquen fallos. Además, el ecosistema de más de 58.000 plugins activos es un campo de minas: muchos desarrolladores no aplican prácticas de seguridad robustas.

    Los vectores de ataque más comunes que encuentro son:

    • Plugins y temas desactualizados: vulnerabilidades conocidas sin parchearse
    • Ataques de fuerza bruta contra wp-admin: credenciales débiles
    • Inyección SQL en plugins mal codificados: acceso directo a la base de datos
    • Cross-Site Scripting (XSS): robo de sesiones de administrador
    • Inclusión de archivos remotos (RFI/LFI): carga de shells maliciosos
    • Temas nulled (pirateados): con backdoors preinstalados

    Paso 1: Cambios fundamentales en wp-config.php

    El archivo wp-config.php es el corazón de la seguridad WordPress. Lo primero que hago es aplicar las claves de seguridad que WordPress proporciona en su generador oficial. Estas cuatro constantes (AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY) protegen las cookies de sesión.

    Luego añado estas líneas críticas:

    define('DISALLOW_FILE_EDIT', true); — Desactiva el editor de archivos del panel. Es una puerta abierta para atacantes si comprometen una cuenta admin.

    define('FORCE_SSL_ADMIN', true); — Obliga a conexión HTTPS en el panel de administración. Previene ataques man-in-the-middle.

    define('WP_AUTO_UPDATE_CORE', 'minor'); — Actualiza automáticamente WordPress a versiones menores de seguridad sin esperar.

    define('WP_POST_REVISIONS', 3); — Limita las revisiones de posts a 3. Menos datos innecesarios en BD.

    Paso 2: Cambiar el prefijo de tablas de la base de datos

    WordPress usa por defecto el prefijo wp_ en todas sus tablas. Esto es público y conocido. Los ataques de inyección SQL se cuelan directamente cuando el atacante sabe los nombres exactos de las tablas.

    Si tienes una instalación nueva, cambia el prefijo en wp-config.php antes de instalar:

    $table_prefix = 'mf2024_';

    Si ya está instalado, necesitas una herramienta como Search and Replace o acceso directo a phpMyAdmin. Es un cambio que debo hacer con cuidado porque afecta a toda la BD.

    Paso 3: Proteger wp-config.php a nivel de servidor

    Este archivo contiene tus credenciales de base de datos. No debe ser nunca accesible desde el navegador. En el archivo .htaccess de la raíz de WordPress, añade:

    <files wp-config.php>
    order allow,deny
    deny from all
    </files>

    Si usas Nginx (que no soporta .htaccess), configura en tu bloque server:

    location ~* wp-config.php { deny all; }

    Paso 4: Limitar intentos de login y cambiar la URL de wp-login.php

    Los ataques de fuerza bruta contra /wp-login.php son la técnica más simple y efectiva. Recomiendo dos medidas:

    Limitar reintentos con .htaccess:

    <limit POST PUT>
    order allow,deny
    allow from all
    </limit>

    Pero la solución más práctica es un plugin como Wordfence Security (gratuito) que bloquea automáticamente después de 5 intentos fallidos durante 15 minutos.

    Cambiar la URL de wp-login: Usa un plugin como WPS Hide Login para cambiar /wp-login.php a algo como /acceso-privado-2024/. Esto elimina el 90% de los bots automáticos.

    Paso 5: Desactivar el editor de tema y plugins

    Si un atacante accede al panel con credenciales robadas, lo primero que hace es editar un plugin activo para insertar un backdoor (puerta trasera). En wp-config.php:

    define('DISALLOW_FILE_MODS', true);

    Esto desactiva tanto ediciones de temas como instalación de plugins desde el panel. Debes hacerlo vía SFTP/SSH. Es una fricción pequeña que detiene ataques graves.

    Paso 6: Mantener actualizaciones de núcleo, plugins y temas

    Es el consejo que parece obvio pero más neglido. Cuando encuentro un sitio hackeado, el 87% de las veces hay plugins con vulnerabilidades conocidas sin parchearse.

    Lo que recomiendo siempre:

    • Activa actualizaciones automáticas en wp-config.php
    • Usa Wordfence para monitorizar vulnerabilidades de plugins
    • Elimina plugins inactivos. Código no usado es código que no ataca
    • Revisa cada 2 semanas el changelog de actualizaciones en NVD (National Vulnerability Database)

    Paso 7: Configurar autenticación de dos factores (2FA)

    El 2FA es la póliza de seguros que evita que una contraseña comprometida sea suficiente. Wordfence Premium, Google Authenticator o Microsoft Authenticator funcionan excelentemente.

    Configura 2FA para todos los usuarios con rol de Administrador. Es especialmente crítico si tu sitio tiene múltiples usuarios.

    Paso 8: Restringir permisos de carpetas y archivos

    Los permisos de sistema de archivos son una capa de seguridad que muchos ignoran. Via SFTP:

    • Carpetas: 755 (usuario puede leer/escribir/ejecutar; grupo y otros solo leer)
    • Archivos: 644 (usuario puede leer/escribir; grupo y otros solo leer)
    • wp-config.php: 600 (solo el usuario puede leer/escribir)
    • /wp-admin y /wp-includes: no deben tener escritura para el grupo/otros

    Si tus plugins/temas necesitan acceso de escritura a carpetas, otórgalo solo a la carpeta específica (generalmente /wp-content/uploads/).

    Paso 9: Implementar reglas de firewall a nivel de aplicación

    Un WAF (Web Application Firewall) detiene ataques antes de que lleguen a tu código PHP. Recomendaciones:

    • Wordfence Firewall (gratuito): protege contra RFI, LFI, XSS, inyección SQL
    • Sucuri Firewall: ofrece DDoS mitigation incluido
    • Cloudflare (gratis): filtrado de IP maliciosas a nivel de DNS

    Estas herramientas verifican cada petición contra patrones de ataque conocidos y bloquean antes de que WordPress procese la solicitud.

    Paso 10: Audit logs y monitorización activa

    Si no puedes ver qué sucede, no puedes detectar un ataque temprano. Instala WP Activity Log (gratuito) para registrar:

    • Logins y logout de usuarios
    • Cambios de contraseñas y emails
    • Instalación/actualización/eliminación de plugins
    • Cambios en opciones y configuración
    • Publicación y edición de contenido

    Revisa estos logs semanalmente. Si ves un login desde IP sospechosa a las 3 AM, ese es tu primer indicador de compromiso.

    Paso 11: Hardening de .htaccess

    El archivo .htaccess en la raíz es tu línea defensiva de Apache. Añade estas reglas:

    # Proteger archivos sensibles
    <FilesMatch "^(wp-config.php|.*.sql|.*.bak|error_log)$">
    order allow,deny
    deny from all
    </FilesMatch>

    # Bloquear acceso directo a plugins/temas
    <FilesMatch "^.*.(php|html|css|js)$">
    <IfModule mod_php.c>
    php_flag engine off
    </IfModule>
    </FilesMatch>
    (Este es más restrictivo, úsalo según tu necesidad)

    # Prevenir directory listing
    Options -Indexes

    Paso 12: Desactivar la ejecución de PHP en carpetas donde no es necesaria

    La carpeta /wp-content/uploads/ no debería ejecutar PHP (es donde suben archivos los usuarios). En la raíz de uploads, añade un archivo .htaccess con:

    <FilesMatch ".php$">
    deny from all
    </FilesMatch>

    Esto detiene ataques donde un uploadero carga un shell PHP disfrazado de imagen.

    Paso 13: Headers HTTP de seguridad con Content Security Policy (CSP)

    Los headers HTTP refuerzan la seguridad del navegador. En .htaccess:

    <IfModule mod_headers.c>
    Header set X-Frame-Options "SAMEORIGIN"
    Header set X-Content-Type-Options "nosniff"
    Header set X-XSS-Protection "1; mode=block"
    Header set Referrer-Policy "no-referrer-when-downgrade"
    </IfModule>

    Estas headers previenen clickjacking, sniffing de tipos MIME, y exposición de referrer a sitios no seguros.

    Paso 14: SSL/HTTPS obligatorio

    HTTPS no es opcional. Es obligatorio desde 2020 para seguridad y SEO. En wp-config.php:

    define('WP_HOME', 'https://tudominio.com');
    define('WP_SITEURL', 'https://tudominio.com');

    Redirige todo el tráfico HTTP a HTTPS en .htaccess:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    </IfModule>

    Paso 15: Revisar y limpiar usuarios y roles

    Un usuario admin comprometido es un desastre. Periódicamente:

    • Elimina usuarios inactivos o de prueba
    • Revisa que nadie tenga rol Editor o superior sin razón
    • Cambia contraseñas de cuentas compartidas (evita compartir, pero si lo haces, asegúrate de rotarlas cada 3 meses)
    • Asigna roles específicos según función: Contributor para redactores, Editor para moderadores, Admin solo para ti

    Paso 16: Escaneo de malware regular

    Incluso con todas estas medidas, puede colarse algo. Herramientas de escaneo automático:

    • Wordfence Scan (gratuito): analiza ficheros en busca de signatures de malware conocido
    • MalCare: detecta malware desconocido con análisis behavioural
    • Sucuri SiteCheck: prueba online desde su servidor, útil para second opinion

    Programa escaneos semanales y revisa los reportes. Si encuentran algo, ten un plan de respuesta (más adelante).

    Paso 17: Backup automatizado y testeable

    Los backups no son hardening, pero son tu airbag cuando algo falla. Sin backups testables, el hardening es teoría.

    Usa un plugin como UpdraftPlus o BackWPup para:

    • Backup automático diario de archivos y BD
    • Almacenamiento en cloud (Google Drive, Dropbox, AWS S3)
    • Retención de múltiples versiones (mínimo 2 semanas)
    • Test mensual de restauración en entorno staging

    Paso 18: Documentación y plan de respuesta ante incidente

    Cuando (no si, cuando) alguien ataque, necesitas un plan. Documenta:

    • URLs de acceso a admin y herramientas de seguridad
    • Contactos de tu proveedor de hosting
    • Pasos para restaurar desde backup
    • Cómo notificar a usuarios si hay una brecha de datos
    • Checklist de post-incidente: cambiar credenciales, revisar logs, escanear malware

    Hardening de PrestaShop (mención rápida)

    Si usas PrestaShop, los principios son similares pero hay specificidades. Los módulos de pago mal codificados son especialmente peligrosos. Lo que recomiendo siempre:

    • Usar módulos de pago oficiales de Stripe, PayPal o Adyen
    • Proteger /admin con cambio de carpeta y 2FA
    • Deshabilitar funciones peligrosas como PHP en nombre de módulo
    • Auditar permisos de módulos instalados cada mes

    Conclusión: hardening es un proceso, no un estado

    El hardening de WordPress no es un checklist que completas una vez. Es un proceso continuo de actualización, monitorización y mejora. Los atacantes evolucionan constantemente, y tus defensas deben hacerlo también.

    Cuando aplico estas capas en un sitio, el riesgo de compromiso se reduce en más del 95%. Pero no es perfecto: la seguridad perfecta no existe. Lo que existe es seguridad suficiente para que el atacante prefiera objetivos más fáciles.

    Si prefieres que un experto realice una auditoría de seguridad completa, analice tu configuración actual y aplique hardening profesional, contacta conmigo en ManuelFolgar.com. Ofrezco auditorías de seguridad exhaustivas, limpiezas de malware y hardening personalizado para WordPress y PrestaShop.

    Referencias y fuentes

    INCIBE – Seguridad en WordPress

    OWASP Top 10 – Vulnerabilidades más críticas

    WordPress.org – Hardening WordPress (oficial)

    NVD – Base de datos de vulnerabilidades

  • Backdoor en WordPress: cómo detectarlo y eliminarlo

    Backdoor en WordPress: cómo detectarlo y eliminarlo

    Qué es un backdoor en WordPress y por qué es tan peligroso

    Un backdoor en WordPress es un acceso oculto que un atacante deja en tu sitio para mantener el control incluso después de que hayas cambiado las contraseñas o cerrado la brecha inicial. En mi experiencia analizando cientos de webs comprometidas, el backdoor es el mayor problema: mientras tú crees que has «limpiado» el sitio, el atacante sigue dentro.

    Estos accesos pueden ser archivos PHP maliciosos, cuentas de usuario administrativas secretas, o modificaciones en plugins y temas legítimos. Lo más peligroso es que muchos propietarios nunca los detectan porque un backdoor bien programado deja una huella muy pequeña en el servidor.

    Diferencia entre acceso y backdoor

    Es crucial entender que un backdoor no es lo mismo que un ataque único. Un ciberdelincuente puede entrar por una vulnerabilidad en un plugin desactualizado (eso es el ataque inicial), pero luego instala un backdoor para regresar cuando quiera, aunque cierres esa vulnerabilidad. Por eso detectar y eliminar backdoors es fundamental: es la diferencia entre tener un incidente de seguridad o una infección permanente.

    Tipos de backdoors más comunes en WordPress

    Webshells y shells de administración

    Las webshells son archivos PHP que el atacante sube a tu servidor, normalmente en carpetas como /wp-content/uploads/ o /wp-content/plugins/. Una vez en el servidor, el atacante accede mediante un navegador a una URL como tudominio.com/wp-content/uploads/shell.php y obtiene una interfaz desde la que ejecutar comandos.

    Cuando analizo un servidor comprometido, busco siempre archivos PHP nuevos o sospechosos en estas ubicaciones. Los nombres típicos que ves son: admin.php, wp-admin.php, index.php, o nombres aleatorios como a1b2c3.php. La clave es comparar la fecha de modificación: si un archivo se creó después de que empezó el problema, es probablemente un backdoor.

    Cuentas de usuario administrativas fantasma

    Un atacante puede crear un usuario de WordPress con privilegios de administrador bajo un nombre inocuo como «admin2», «wordpress», o «support». Esta cuenta tiene todas las credenciales para acceder al panel de control, y tú nunca la verías si no revisas la lista de usuarios regularmente.

    Lo grave es que desde esa cuenta pueden modificar el tema, editar posts, instalar plugins maliciosos o cambiar la configuración de seguridad. Todo queda registrado como si fueras tú quien lo hizo.

    Modificaciones en plugins y temas legítimos

    En lugar de crear archivos nuevos (que pueden ser detectados), un atacante experto modifica el código de un plugin o tema que ya está instalado. Añade unas líneas de código malicioso al archivo functions.php del tema o a un archivo principal del plugin. Esto es mucho más difícil de notar porque el archivo ya existe y parece legítimo.

    He visto casos donde el backdoor estaba escondido en las últimas líneas de wp-config.php o incluido como una función que se ejecuta silenciosamente cada vez que se carga el sitio.

    Hooks y filtros maliciosos

    WordPress permite que los plugins se «enganchen» a ciertas acciones mediante hooks y filtros. Un atacante puede añadir código que se ejecute automáticamente cada vez que ocurre un evento (login de usuario, publicación de post, etc.). Este tipo de backdoor es invisible porque no hay archivo separado, solo código malicioso integrado en la lógica de WordPress.

    Señales de alerta: cómo saber si tienes un backdoor

    Cambios en archivos sin motivo aparente

    Si recibiste una alerta de tu proveedor de hosting sobre archivos modificados en fechas en las que tú no hiciste nada, ese es un signo claro de compromiso. También puedes revisar los archivos de log del servidor (si tienes acceso a ellos) para ver qué se ha modificado recientemente.

    Usuarios sospechosos en la base de datos

    Accede a tu panel de WordPress como administrador legítimo y ve a Usuarios. ¿Hay alguno que no reconoces? ¿Alguno creado hace poco? Aunque parezca absurdo, muchos propietarios nunca revisan esta sección. Un usuario con nombre genérico como «admin2» o «wordpress» creado hace 3 meses cuando tu sitio fue hackeado es casi seguramente un backdoor.

    Tráfico inusual o peticiones HTTP extrañas

    Si tu hosting te muestra un pico de consumo de ancho de banda o CPU sin razón, y no tienes más visitantes, es posible que el backdoor esté minando criptomonedas o enviando spam. Revisa los logs de acceso (access.log) buscando peticiones POST sospechosas a archivos ocultos.

    Inyección de código en la portada o emails automáticos

    Un síntoma visible de un backdoor activo es que tu sitio empieza a redirigir a usuarios a webs de malware, o aparecen anuncios falsos. También puedes recibir reportes de Google diciendo que tu sitio está infectado, o que está siendo usado para enviar spam.

    Comportamiento lento o errores 500 repentinos

    Un servidor comprometido con un backdoor activo funcionando en segundo plano puede ralentizarse significativamente. Si tu WordPress que antes iba rápido ahora tarda minutos en cargar, y sabes que no has añadido nada nuevo, investiga.

    Pasos para detectar un backdoor en WordPress

    Paso 1: Usa herramientas de escaneo automatizadas

    Comienza con un escaneo superficial usando herramientas online. Sucuri SiteCheck es gratuito y detecta malware conocido. También puedes usar VirusTotal para analizar archivos específicos que sospechas que son maliciosos.

    Para WordPress específicamente, instala un plugin como Wordfence o MalCare. Estos escanean tu servidor en busca de patrones maliciosos, archivos modificados y vulnerabilidades conocidas. Wordfence incluso tiene una versión CLI (línea de comandos) que puedo usar directamente en el servidor.

    Paso 2: Revisa manualmente los directorios clave

    Accede a tu servidor por SFTP o por el gestor de archivos de tu hosting. Navega a estas ubicaciones y busca archivos sospechosos:

    • /wp-content/uploads/ – Aquí no debería haber archivos PHP, solo imágenes y documentos
    • /wp-content/plugins/ – Busca plugins que no reconozcas o que tengan nombres aleatorios
    • /wp-admin/ – Revisa que solo contenga archivos estándar de WordPress
    • Raíz del sitio (/) – Archivos PHP sueltos como index.php, shell.php, etc.
    • /wp-includes/ – Modificaciones en archivos core de WordPress

    Usa la fecha de modificación como guía: si un archivo se modificó después de la fecha en que empezó el problema, es sospechoso. Descárgalo y analízalo en VirusTotal.

    Paso 3: Examina la lista de usuarios de WordPress

    En el panel de administrador, ve a Usuarios y anota TODOS los usuarios existentes. Luego accede a tu base de datos (mediante phpMyAdmin si tu hosting lo proporciona) y ejecuta esta consulta SQL:

    SELECT * FROM wp_users WHERE user_registered > ‘2024-01-01’;

    Reemplaza la fecha por la fecha aproximada en que comenzaron los problemas. Si aparecen usuarios que no reconoces, especialmente con rol de administrador, son casi seguramente backdoors.

    Paso 4: Analiza los archivos modificados recientemente

    En la línea de comandos del servidor (si tienes acceso SSH), usa:

    find /home/usuario/public_html -type f -name «*.php» -mtime -30

    Esto te mostrará todos los archivos PHP modificados en los últimos 30 días. Revisa cada uno: ¿son cambios que hiciste tú? ¿Actualizaciones de plugins? ¿O código extraño?

    Paso 5: Busca código malicioso en theme functions.php

    Dirígete a Apariencia > Editor de temas (o accede por SFTP a /wp-content/themes/tu-theme/functions.php). Busca líneas sospechosas como:

    • eval() o base64_decode() – Estas funciones ejecutan código dinámico
    • system() o exec() – Ejecutan comandos del sistema operativo
    • URLs extrañas o dominios que no reconoces
    • Bloques de código al final del archivo que parece añadido después

    Si encuentras algo así, es un backdoor. Anótalo pero no lo borres aún, porque necesitarás verificarlo primero.

    Paso 6: Revisa la configuración de permisos y .htaccess

    Un atacante a veces modifica el archivo .htaccess para meter redireccionamientos o para permitir que se ejecuten archivos PHP en ubicaciones donde normalmente no se deberían ejecutar (como /uploads/). Busca líneas como:

    AddType application/x-httpd-php .jpg .png

    Esto permitiría ejecutar PHP dentro de archivos «imagen», lo que es claramente malicioso.

    Cómo eliminar un backdoor correctamente

    No borres todo de golpe

    Este es el error más común: identificas un backdoor y lo eliminas inmediatamente. Pero si hay múltiples backdoors y solo eliminas uno, los otros seguirán activos. Por eso, antes de eliminar nada, haz un inventario completo de qué está comprometido.

    Realiza un backup limpio antes de nada

    Aunque parezca contradictorio, haz un backup de tu base de datos y archivos en estado comprometido. Guárdalo en un lugar seguro separado. Así, si necesitas analizar el backdoor más adelante o verificar si has eliminado todo, tendrás una copia.

    Elimina usuarios administrativos fantasma

    Si identificaste usuarios sospechosos en la base de datos, ve a Usuarios > Eliminar en WordPress. Si eliminas de forma normal y el usuario ha publicado contenido, WordPress te pedirá qué hacer con esos posts (atribuirlos a otro usuario o borrarlos). Elige lo que corresponda.

    Si prefieres usar SQL directamente:

    DELETE FROM wp_users WHERE ID = [ID del usuario malicioso];

    Borra archivos maliciosos identificados

    Accede por SFTP y elimina cada archivo que identificaste como backdoor. Si es un archivo PHP suelto en /uploads/ o en la raíz, simplemente bórralo. Si es un plugin completo que resultó ser malicioso, bórralo desde Plugins > Plugins instalados o elimina su carpeta por SFTP.

    Limpia el código inyectado en archivos legítimos

    Si encontraste código malicioso dentro de un archivo legítimo (como functions.php), edítalo manualmente y borra SOLO las líneas malicioso. Ten extremo cuidado: si borras una llave o paréntesis por error, romperás tu sitio.

    Una forma más segura es descargar el archivo limpio de WordPress.org (para archivos core) o reinstalar el plugin/tema desde cero después de haberlo limpiado.

    Resetea el archivo .htaccess

    Si encontraste modificaciones maliciosas en .htaccess, lo más seguro es eliminarlo completamente. WordPress regenerará uno nuevo cuando lo necesite (basado en tu configuración de enlaces permanentes en Ajustes > Enlaces permanentes). Solo click en guardar y se recrea.

    Cambia TODAS las contraseñas

    Una vez hayas eliminado los backdoors visibles, cambia:

    • Contraseña de todos los usuarios de WordPress (ve a Usuarios y edita cada uno)
    • Contraseña FTP/SFTP de tu hosting
    • Contraseña del panel de control de tu hosting (cPanel, Plesk, etc.)
    • Contraseña de acceso a la base de datos (en wp-config.php)
    • Contraseña raíz del servidor si tienes acceso SSH

    Un atacante que tenía un backdoor probablemente también capturó credenciales. Cambiar contraseñas sin eliminar el backdoor primero es inútil, pero después de eliminarlo, es esencial.

    Hardening: cómo evitar que vuelva a pasar

    Protege el acceso a WordPress

    Implementa autenticación de dos factores (2FA) en todos los usuarios administrativos. Plugins como Wordfence o Google Authenticator permiten añadir una segunda confirmación al login. Un atacante que tenga tu contraseña seguirá sin poder entrar si no tiene acceso a tu teléfono.

    También limita los intentos de login fallidos. OWASP recomienda bloquear después de 5-10 intentos fallidos. Wordfence hace esto automáticamente.

    Deshabilita la edición de archivos desde WordPress

    Añade esta línea al final de tu wp-config.php:

    define(‘DISALLOW_FILE_EDIT’, true);

    Esto desactiva el editor de temas y plugins en el panel de administrador, evitando que un atacante que comprometa tu cuenta pueda inyectar código directamente.

    Configuración de permisos correcta

    Los permisos de carpetas deben ser:

    • Carpetas: 755 (lectura y ejecución para todos, escritura solo para propietario)
    • Archivos: 644 (lectura para todos, escritura solo para propietario)
    • Excepto /wp-content/uploads/ que puede ser 775 si es necesario para que el servidor web escriba

    Esto impide que un atacante escriba archivos en ubicaciones críticas aunque consiga acceso al servidor web.

    Actualiza todo constantemente

    La mayoría de backdoors entran a través de vulnerabilidades en plugins y temas desactualizados. Revisa Panel de control > Actualizaciones cada semana. Si ves que tienes plugins sin actualizar, hazlo inmediatamente. Si un plugin no se actualiza hace meses, desinstálalo y busca una alternativa.

    Usa un plugin de seguridad profesional

    Herramientas como Wordfence (freemium) o MalCare (de pago) monitorean tu sitio 24/7 en busca de cambios sospechosos, intentos de acceso, y malware. Son tu mejor defensa después de la limpieza.

    Implementa HSTS y CSP

    Estos headers HTTP añaden capas extra de seguridad. HSTS (HTTP Strict Transport Security) fuerza HTTPS. CSP (Content Security Policy) previene que se inyecte código externo. Puedes añadirlos en .htaccess o mediante un plugin de seguridad.

    Cuándo necesitas ayuda profesional

    Si después de seguir estos pasos aún encuentras códigos maliciosos que no entiendes, o si el sitio sigue comportándose mal, es hora de contactar con un profesional. La limpieza manual de backdoors requiere experiencia: un error pequeño puede significar dejar abierta una puerta atrás para que el atacante vuelva a entrar.

    También si tu sitio fue comprometido hace meses y no sabes exactamente cuándo empezó, es probable que haya múltiples backdoors en capas. En esos casos, una auditoría profesional es más rápido y seguro que intentar limpiarlo todo tú solo.

    Resumen y próximos pasos

    Un backdoor en WordPress es una amenaza seria, pero es detectable y eliminable si sabes qué buscar. Los pasos clave son: usar herramientas automatizadas, revisar manualmente directorios y usuarios, analizar código sospechoso, eliminar todo lo malicioso de forma metódica, cambiar contraseñas, y finalmente, hardening del sitio para que no vuelva a pasar.

    Si después de revisar todo aún tienes dudas, o si tu sitio fue comprometido hace poco y necesitas estar 100% seguro de que está limpio, contacta con ManuelFolgar.com. Hago auditorías de seguridad completas, limpieza profesional de malware y hardening de WordPress y PrestaShop. Una auditoría me deja tranquilo de que tu sitio está realmente limpio.

  • Cómo eliminar malware de WordPress en 24 horas

    Cómo eliminar malware de WordPress en 24 horas

    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

    1. 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.
    2. 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).
    3. Haz una copia de la base de datos (phpMyAdmin → Exportar). Será tu punto de recuperación.
    4. Cambia todas las contraseñas inmediatamente: WordPress (admin), hosting (cPanel/Plesk), FTP/SFTP, base de datos. El malware probablemente tiene credenciales.
    5. 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

    1. Borra todos los archivos sospechosos detectados en Paso 3. Vía SFTP o SSH: rm /ruta/archivo.php.
    2. Reemplaza plugins y temas comprometidos: no actualices, elimina completamente y reinstala desde wordpress.org.
    3. 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.
    4. 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

    1. Elimina usuarios admin no autorizados en WordPress admin panel o phpMyAdmin.
    2. 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).
    3. 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.

  • Mi WordPress fue hackeado: qué hacer ahora mismo

    Mi WordPress fue hackeado: qué hacer ahora mismo

    Mi WordPress fue hackeado: qué hacer ahora mismo

    Cuando descubres que tu WordPress ha sido hackeado, el pánico es la primera reacción. Pero te lo digo desde mi experiencia limpiando cientos de sitios comprometidos: los primeros pasos que tomes en las próximas horas determinarán si recuperas tu web o pierdes meses de trabajo. En este artículo te guío exactamente qué hacer, en qué orden, sin pánico.

    Primero: confirma que realmente está hackeado

    No todos los síntomas son señal de hackeo. Antes de tomar decisiones drásticas, verifica realmente qué está pasando:

    • Google Search Console. Si Google ha desindexado tu sitio o marca páginas como «malware detectado», ahí tienes confirmación oficial. Accede a tu GSC y busca en la sección de Seguridad.
    • Herramientas online gratuitas. Usa Sucuri SiteCheck o VirusTotal para escanear tu dominio. Si ambas detectan malware, es casi seguro.
    • Comportamiento del sitio. ¿Ves anuncios extraños? ¿Redirecciones a sitios de casinos o farmacéuticos? ¿Contenido spam en la base de datos? Son indicios claros de infección.
    • Acceso a cPanel/hosting. Revisa los logs de acceso. Si ves intentos de login fallidos masivos o conexiones desde países raros, tu servidor ha estado bajo ataque.

    Una vez confirmado, pasamos a acción.

    Paso 1: Aísla el sitio inmediatamente (máximo 30 minutos)

    No dejes que el malware siga propagándose. Esto es crítico:

    1. Desactiva todos los plugins. Accede a wp-admin. Si no puedes, conéctate por SFTP/cPanel. Renombra la carpeta /wp-content/plugins/ a /wp-content/plugins-disabled/. Así WordPress no cargará ninguno.
    2. Cambia todas las contraseñas de administrador. Desde otra máquina (no la comprometida), entra en WordPress y crea una nueva contraseña de usuario admin de 20+ caracteres, con mayúsculas, números y símbolos. Si no tienes acceso a wp-admin, usa WP-CLI desde terminal: wp user update 1 --prompt=user_pass.
    3. Revoca tokens y sesiones activas. Si usas plugin de seguridad como Wordfence, cierra todas las sesiones salvo la tuya. Esto expulsará a los atacantes conectados.
    4. Notifica a tu hosting. Llama a soporte y diles que tu WordPress está comprometido. Algunos proveedores pueden suspender temporalmente el sitio o aislarlo en un servidor de cuarentena mientras lo limpias.

    En este punto ya has evitado que el malware continúe infectando más usuarios y ampliando la infección.

    Paso 2: Identifica qué tipo de malware tienes (1-2 horas)

    Saber qué luchas contra es fundamental. Los tipos más frecuentes que encuentro:

    Backdoors y webshells. Son archivos PHP ocultos (a menudo con nombres como shell.php, wp-content/uploads/shell.php o disfrazados como plugins legítimos). Te permiten al atacante acceso permanente, incluso después de cambiar contraseñas. Los busco con:

    find /home/tudominio/public_html -name "*.php" -newermt "2024-01-01" -type f

    Reemplaza la fecha por la del último acceso sospechoso.

    Malware SEO (spam de redirección). Inyecta código en posts y páginas que redirige a usuarios a sitios de apuestas, pornografía o estafas. Lo ves en el HTML cuando inspeccionas un post. Es síntoma de que alguien tiene acceso a tu base de datos.

    Cryptominers o scripts JavaScript maliciosos. Se cargan en el navegador del visitante para minar criptomonedas con su CPU sin saberlo. Detecta ralentización extrema del sitio. Busca en Google Analytics picos de carga extraños.

    Plugins y temas nulled comprometidos. Si descargaste un plugin «premium» de un sitio pirata, viene con malware incrustado. Cuando lo activas, infectas el sitio.

    Para identificarlos con precisión, MalCare hace un escaneo automático en WordPress. También puedo hacerlo yo manualmente revisando logs y ficheros, pero MalCare te da un informe en minutos.

    Paso 3: Crea una copia de seguridad limpia ANTES de limpiar

    Parece contradictorio, pero es esencial. Haz backup de lo que tienes ahora con el malware por si necesitas investigar más tarde o recuperar contenido legítimo. Luego procedes a limpiar.

    En cPanel, descarga:

    • Base de datos completa (SQL dump).
    • Carpeta /public_html/ entera via SFTP.
    • Guárdalos en una unidad externa encriptada.

    Paso 4: Limpia o reinstala WordPress (2-4 horas)

    Tienes dos caminos según severidad:

    Opción A: Limpieza manual (solo si infección leve).

    1. Elimina todos los plugins y temas excepto uno limpio, verificado. Borra manualmente las carpetas de plugins sospechosos.
    2. Descarga los archivos core de WordPress desde WordPress.org e intégralos sobre tu instalación, reemplazando wp-admin/ y wp-includes/. Mantén tu wp-config.php y carpeta /wp-content/ de momento.
    3. Revisa la base de datos buscando tablas o posts extraños. Si hay cientos de posts nuevo que no creaste, son spam SEO inyectado. Bórralos desde phpMyAdmin o WP-CLI.
    4. Busca opciones de la BD maliciosas (suelen estar en wp_options) con valores JavaScript o URLs sospechosas.

    Opción B: Reinstalación limpia (recomendado si infección media-alta).

    1. Elimina completamente /public_html/ menos la carpeta /uploads/ (tus imágenes y archivos).
    2. Descarga WordPress limpio e instálalo de nuevo.
    3. Restaura tu contenido (posts, páginas, usuarios) desde tu backup limpio más antiguo que confíes, o manualmente si tienes pocos posts.
    4. Restaura uploads/ desde backup confiable (escaneándolo antes con VirusTotal).

    Yo siempre recomiendo Opción B: es más lento pero garantiza limpieza 100%. Los atacantes suelen ocultar puertas traseras muy bien.

    Paso 5: Fortifica el sitio contra reinfección (2-3 horas)

    Ahora que está limpio, hazlo inexpugnable:

    WordPress hardening básico:

    • Deshabilita edición de archivos en wp-admin. Añade a wp-config.php: define('DISALLOW_FILE_EDIT', true);
    • Protege wp-config.php con reglas .htaccess: <files wp-config.php> order allow,deny deny from all </files>
    • Cambia el prefijo de tablas de la BD de wp_ a algo aleatorio como xk7m_ (mitiga ataques SQL masivos).
    • Limita intentos de login en wp-login.php a 3 intentos cada 15 minutos mediante .htaccess o plugin.
    • Habilita autenticación de dos factores (2FA) en todos los usuarios admin.

    Plugin de seguridad esencial: Instala Wordfence Security (gratuito con versión premium). Configura:

    • Escaneo de malware automático cada 24h.
    • WAF (Web Application Firewall) activo.
    • Rate limiting para wp-login.
    • Alertas por cambios en archivos core.

    Actualiza todo: WordPress core a última versión, todos los plugins, tema. Plugins desactualizados fueron tu puerta de entrada. Vulnerabilidades conocidas como CVE-2023-xxxx son esploitadas automáticamente por bots.

    Permisos de carpetas correctos:

    chmod 755 /wp-content/
    chmod 755 /wp-content/uploads/
    chmod 644 /wp-config.php
    chmod 600 /wp-config.php (si es posible)

    Esto evita que procesos de web escriban donde no deben.

    Paso 6: Notifica a Google y buscadores (30 minutos)

    Google mantiene el sitio penalizado si cree que sigue infectado. Debes reportar limpieza:

    1. En Google Search Console, ve a Seguridad > Problemas de seguridad.
    2. Haz clic en «Solicitar revisión».
    3. Google enviará un bot a revisar. Si todo está limpio, en 24-48h debería retirar la penalización.
    4. Revisa INCIBE (Instituto Nacional de Ciberseguridad español) para notificaciones si tu sitio fue usado para esparcir malware a otros usuarios españoles.

    Paso 7: Investiga cómo entraron (1-2 horas)

    Esto es crucial para no volver a ser hackeado:

    Vector más común: plugin desactualizado. ¿Tenías Elementor, All in One SEO o WooCommerce sin parchear? Revisa en NVD/CVE qué vulnerabilidades afectaban a esa versión. Aprende la lección: actualiza plugins cada semana mínimo.

    Contraseña débil de admin. Si encontraste intentos fallidos masivos en logs (brute force ataque), tu contraseña era admin123, wordpress o similar. Usa gestor de contraseñas (Bitwarden, 1Password).

    Acceso FTP/SFTP comprometido. Si tus credenciales FTP viajaban en texto plano, un man-in-the-middle atacante puede haberlas interceptado. Usa SFTP (protocolo seguro) de aquí en adelante. Cambia credenciales de hosting.

    Tema o plugin nulled. Si alguna vez descargaste un tema premium de un repositorio pirata, ese fue el origen. Nunca más. Usa temas de repositorios oficiales: WordPress.org, ThemeForest verificado, Elementor directo.

    Monitoreo continuo post-limpieza

    La primera semana tras una infección es crítica. Vigila:

    • Logs de acceso FTP/SFTP: ¿Hay conexiones nuevas no autorizadas? Si sí, atacante aún tiene credenciales. Resetea todas.
    • Base de datos: ¿Aparecen posts spam nuevos? ¿Usuarios desconocidos? Bórralos al instante.
    • Wordfence alertas: Configúralo para notificarte por email de cambios en archivos core, nuevos plugins, cambios de usuarios.
    • Google Search Console: Revisa diariamente que no aparezcan nuevas «URL infectadas detectadas».

    En mi experiencia, si aplicaste estos pasos correctamente, en 95% de casos no hay reinfección. El 5% restante suele ser porque se dejó una puerta trasera muy oculta, o credenciales aún comprometidas.

    ¿Cuándo llamar a un profesional?

    Si después de 4 horas de seguir estos pasos no te sientes seguro, o si la infección es compleja (malware cifrado, múltiples backdoors), es momento de buscar ayuda especializada. Yo ofrezco desde ManuelFolgar.com servicio de limpieza manual integral: escaneo exhaustivo con herramientas forenses, eliminación garantizada de malware, hardening completo, y soporte post-limpieza 30 días.

    Contacta conmigo en ManuelFolgar.com/contacto para una auditoría gratuita de tu WordPress. Te diré exactamente qué está comprometido y cuál es tu mejor opción.

    Resumen de acciones inmediatas

    1. Confirma hackeo con Sucuri SiteCheck y Google Search Console.
    2. Desactiva plugins, cambia contraseñas admin, avisa al hosting (30 min).
    3. Identifica tipo de malware: backdoor, SEO spam, cryptominer, etc. (1-2 horas).
    4. Copia backup con malware por seguridad.
    5. Limpia o reinstala WordPress limpio (2-4 horas).
    6. Aplica hardening: deshabilitar edición, cambiar prefijo BD, 2FA, Wordfence, actualizar todo.
    7. Solicita revisión a Google en Search Console.
    8. Investiga vector de entrada para no repetir error.
    9. Monitorea 7 días vigilando logs, BD, alertas Wordfence.

    El coste de esta limpieza en tiempo es alto, pero es infinitamente menor al daño de un sitio infectado durante meses.

    ¿Sientes que tu WordPress aún está en riesgo o necesitas una limpieza 100% profesional? Yo me encargo. Contacta ahora en ManuelFolgar.com/contacto. Limpio, fortifíco y te dejo tu web segura.