Etiqueta: malware wordpress

  • Error de parseador: malware en tema o plugin WordPress

    Error de parseador: malware en tema o plugin WordPress

    ¿Qué es el error de parseador en WordPress y por qué aparece malware?

    Cuando ves el mensaje «Error de parseador» en tu sitio WordPress, estás ante una de las señales más claras de que algo falla en la sintaxis de tu código PHP. En mi experiencia analizando cientos de sitios comprometidos, este error suele ser la punta del iceberg: detrás hay casi siempre un plugin o tema malicioso, o una infección que ha modificado archivos críticos.

    El parseador de PHP es el encargado de interpretar el código antes de ejecutarlo. Cuando encuentra un error de sintaxis —paréntesis sin cerrar, comillas mal colocadas, o código inyectado maliciosamente— detiene la ejecución y lanza esta advertencia. El problema es que los atacantes suelen insertar código obfuscado o mal formado a propósito para evitar detección, y eso genera exactamente este error.

    Lo he visto con webshells backdoor, cryptominers inyectados en temas nulled, y redirecciones SEO maliciosas. El malware no siempre es «limpio» desde el punto de vista del parseador.

    Diferencia entre error de parseador legítimo y malware

    Error de parseador accidental (actualización o conflicto)

    A veces el error es inocente: acabas de actualizar un plugin, hay incompatibilidad entre versiones, o instalaste un tema mal optimizado. Estos errores aparecen en tu log de errores (wp-content/debug.log) con información clara sobre la línea exacta del problema.

    • Mensión específica: «Parse error in /wp-content/plugins/plugin-name/file.php on line 42»
    • Ocurre tras una actualización reciente
    • El archivo problemático está en la rama de un plugin o tema legítimo
    • Se resuelve desactivando ese elemento específico

    Error de parseador por malware

    Aquí es donde empieza la preocupación real. El malware intenta ocultarse, pero su código inyectado fuerza errores de sintaxis. Lo reconozco cuando:

    • El error aparece sin haber hecho cambios recientes
    • La línea problemática contiene código ofuscado, base64, o caracteres sospechosos
    • El archivo afectado no pertenece a ningún plugin/tema instalado (está en la raíz, en wp-includes, o en directorios ocultos)
    • Multiplicas desactivaciones y el error persiste o reaparece
    • Aparecen archivos .php nuevos en carpetas que no debería haberlos

    Cómo identificar malware en temas y plugins WordPress

    Paso 1: Revisa los logs de error de WordPress

    Activa el modo debug en wp-config.php si no lo está. Añade estas líneas antes de la línea «That’s all, stop editing!»:

    define('WP_DEBUG', true);
    define('WP_DEBUG_DISPLAY', false);
    define('WP_DEBUG_LOG', true);

    Luego accede a wp-content/debug.log y busca patrones como «eval()», «base64_decode», «assert», «system()», «exec()», «passthru()», «shell_exec()». Estas funciones son firmas claras de malware.

    Paso 2: Auditoria de plugins y temas instalados

    Usa WP-CLI para listar todos los plugins activos e inactivos:

    wp plugin list --field=name

    Luego verifica en WordPress.org que existan oficialmente. Si encuentras alguno que no esté en el repositorio oficial, lo más probable es que sea un nulled malicioso o una customización con inyecciones.

    Haz lo mismo con temas:

    wp theme list --field=name

    Paso 3: Búsqueda de código malicioso en archivos

    En mi experiencia, los atacantes casi siempre dejan rastros. Conéctate por SFTP o accede al gestor de archivos y busca:

    • Archivos .php con nombres raros en wp-content/ (como config.php, admin.php, setup.php, index0.php)
    • Archivos en la raíz del sitio que no creaste (xmlrpc-backup.php, wp-load-advanced.php)
    • Carpetas ocultas dentro de wp-content/plugins o wp-content/themes (como .shell, .config, ..admin)
    • Permisos 777 en archivos que deberían ser 644

    Si tienes acceso SSH, puedes buscar rápidamente código sospechoso:

    grep -r "eval(" wp-content/plugins/
    grep -r "base64_decode" wp-content/themes/
    find . -name "*.php" -exec grep -l "<?php @" {} ;

    Paso 4: Análisis con herramientas especializadas

    Wordfence CLI es mi favorita para esto. Desde línea de comandos:

    wordfence cli scan --dir=/var/www/html/wp-content

    También puedes usar Sucuri SiteCheck para un análisis rápido sin acceso técnico. Sube tu sitio o URL y te dirá si hay malware detectado por firmas.

    El problema específico de los temas y plugins nulled

    En mis auditorías, el 40% de las infecciones por malware vienen de temas o plugins descargados de sitios «nulled» o cracks. Estos archivos están inyectados con:

    • Backdoors de acceso: código que permite al atacante entrar sin credenciales válidas
    • Cryptominers silenciosos: código que usa los recursos de tu servidor para minar criptomonedas
    • Redirectores SEO: alteran los enlaces internos o redirigen visitantes a otros sitios
    • Skimmers de tarjetas (Magecart): en tiendas online, roban datos de pago
    • Inyectores de anuncios: insertan publicidad no autorizada en tu contenido

    El error de parseador aparece porque ese código inyectado no está «pulido». Los atacantes lo obfuscan rápidamente y sin cuidado de la sintaxis final.

    ¿Cómo reparar el error de parseador?

    Opción segura: desactivar el plugin o tema sospechoso

    Si sospechas de un plugin específico, accede a wp-admin/plugins.php en tu navegador o usa WP-CLI:

    wp plugin deactivate nombre-del-plugin

    ¿Desaparece el error? Entonces ese era el culpable. No lo vuelvas a activar sin antes inspeccionarlo línea por línea o reemplazarlo por una versión legítima descargada de WordPress.org.

    Opción nuclear: recuperar desde backup limpio

    Si hay múltiples errores de parseador, o si los logs muestran código inyectado en archivos de WordPress (wp-config.php, wp-load.php, funciones.php), lo más seguro es restaurar desde un backup anterior a la infección. En mi experiencia, limpiar manualmente WordPress comprometido es arriesgado: siempre queda código dormido.

    Limpiar código inyectado (solo si tienes experiencia)

    Si identificas un archivo específico y ves la inyección (por ejemplo, código eval() al final de un archivo functions.php), puedes editarlo con cuidado:

    • Descarga el archivo por SFTP
    • Abre con un editor de texto seguro (Sublime Text, VS Code, no Notepad)
    • Busca funciones sospechosas: eval(), assert(), base64_decode(), system(), exec()
    • Elimina solo esas líneas, deja el resto intacto
    • Vuelve a subir el archivo
    • Verifica en wp-admin que el error desaparece

    Pero te aviso: si no estás 100% seguro, no lo hagas. Un pequeño error elimina contenido importante o deja backdoors abiertos.

    Prevención: hardening para evitar el error de parseador por malware

    1. Desactiva la edición de archivos en WordPress

    Añade a wp-config.php:

    define('DISALLOW_FILE_EDIT', true);

    Esto impide que un atacante que gane acceso al wp-admin pueda editar temas o plugins directamente. Tienen que usar SFTP o shell.

    2. Usa solo plugins y temas de fuentes oficiales

    Nunca descargues temas o plugins de sitios nulled, aun si son gratis. Los repositorios oficiales de WordPress tienen revisión de código. Los sitios de cracks no.

    3. Mantén WordPress, plugins y temas actualizados

    Las actualizaciones cierren vulnerabilidades que los atacantes explotan para inyectar código. Configura actualizaciones automáticas:

    define('AUTOMATIC_UPDATER_DISABLED', false);

    4. Implementa un WAF o firewall de aplicación web

    Un WAF como Sucuri WAF o Cloudflare bloquea inyecciones SQL, XSS, y otras técnicas antes de que lleguen a tu servidor. Reduce enormemente el riesgo de parseador errors por malware.

    5. Cambia los permisos de archivos correctamente

    Los archivos PHP deben estar en 644, las carpetas en 755. Nunca uses 777. Verifica con:

    find wp-content -type f -exec chmod 644 {} ;
    find wp-content -type d -exec chmod 755 {} ;

    6. Protege wp-config.php con una regla .htaccess adicional

    Añade al archivo .htaccess de tu raíz:

    <FilesMatch "^wp-config.php$">
    Order allow,deny
    Deny from all
    </FilesMatch>

    Esto previene acceso directo a tu archivo más sensible, aunque ya no debería ser accesible desde la web.

    ¿Cuándo necesitas ayuda profesional?

    Si después de revisar logs, desactivar plugins y buscar código malicioso el error persiste, o si no tienes experiencia con PHP y análisis de seguridad, es momento de contactar especialistas. En mi trabajo como auditor, encuentro malware que los propios usuarios no ven porque está:

    • Dentro de archivos wp-includes/ modificados (muy peligroso tocar)
    • Codificado en múltiples capas de base64 y obfuscación
    • Dentro de la base de datos (options, posts, postmeta) en lugar de archivos
    • En módulos o librerías de terceros que llamadas desde plugins legítimos

    Un análisis forense profesional incluye: extracción de IOCs (indicadores de compromiso), identificación de vector de entrada, limpieza completa, refuerzo de permisos, y monitoreo post-limpieza para confirmar que no reingresan.

    Resumen: cómo actuar ante el error de parseador

    1. Activa WP_DEBUG y revisa wp-content/debug.log buscando funciones maliciosas
    2. Lista plugins y temas, verifica que existan en WordPress.org oficial
    3. Busca archivos .php sospechosos en wp-content/, wp-includes/, raíz
    4. Desactiva plugins problemáticos uno a uno
    5. Si el error continúa o es crítico, restaura desde backup limpio anterior
    6. Implementa las medidas de hardening descritas
    7. Si no resuelves en 24 horas, solicita auditoría profesional

    El error de parseador no es solo un problema de código malo; es casi siempre un síntoma de que tu seguridad ha fallado. Tratarlo como un verdadero incidente de ciberseguridad, no como un simple error técnico, es lo que marca la diferencia entre un sitio limpio y uno que se reinecta en cuestión de semanas.

    Si sospechas que tu WordPress está comprometido o quieres un análisis profesional de seguridad, te invito a que contactes conmigo en ManuelFolgar.com. Ofrezco auditorías de ciberseguridad, limpiezas de malware y hardening para WordPress y PrestaShop, con informe detallado y seguimiento posterior.

  • Cómo limpiar errores causados por plugins maliciosos

    Cómo limpiar errores causados por plugins maliciosos

    Cómo limpiar errores causados por plugins maliciosos en WordPress

    Cuando analizo un sitio WordPress comprometido, los plugins maliciosos son casi siempre el culpable número uno. No es casualidad: representan el 40% de las vulnerabilidades que detecto en mis auditorías. El problema es que muchos propietarios no saben cómo identificar y limpiar los daños que dejan atrás. En esta guía te enseñaré exactamente qué buscar y cómo eliminar cada rastro de infección.

    ¿Qué daño causa realmente un plugin malicioso?

    Un plugin comprometido no solo se instala y se olvida. Durante los meses que permanece activo, puede dejar modificaciones profundas en tu base de datos, archivos principales y configuración. Lo que recomiendo siempre es entender primero la magnitud del problema antes de actuar:

    • Puertas traseras (backdoors): Código oculto que permite acceso no autorizado incluso después de desactivar el plugin
    • Inyecciones de base de datos: Publicaciones, usuarios o tablas completamente nuevas creadas para exfiltrar datos
    • Modificaciones en wp-config.php y .htaccess: Cambios que persisten aunque elimines el plugin
    • Archivos webshell: Scripts PHP independientes distribuidos por toda tu carpeta /uploads
    • Redirecciones invisibles: Código inyectado en funciones.php que redirige tráfico a sitios de spam o phishing
    • Minería de criptomonedas: Scripts que consumen recursos del servidor sin que lo notes

    Lo crítico es que simplemente desactivar o eliminar el plugin desde el panel de WordPress no limpia estos daños colaterales. Necesitas un enfoque sistemático.

    Paso 1: Identifica qué plugins están realmente comprometidos

    Mi primer paso siempre es hacer un inventario honesto. Accede al panel de WordPress y ve a Plugins. Abre Google Search Console y comprueba si Google ha marcado tu sitio con avisos de malware.

    Luego, haz una búsqueda rápida en NVD (National Vulnerability Database) con el nombre de cada plugin instalado. Busca también en el repositorio oficial de WordPress si el plugin sigue activo o ha sido marcado como inseguro.

    Herramientas que uso constantemente:

    • Wordfence CLI: wp wordfence threat-defense status te muestra amenazas detectadas
    • WP-CLI: wp plugin list lista todos con versión y estado
    • Sucuri SiteCheck: Análisis rápido en línea que detecta inyecciones obvias
    • VirusTotal: Sube la carpeta del plugin sospechoso y escanéala contra 70+ antivirus

    Paso 2: Limpia la base de datos de cambios maliciosos

    Aquí es donde la mayoría de personas comete errores. Cuando un plugin malicioso está activo durante meses, modifica tu base de datos. Necesitas buscar:

    Usuarios fantasma: Accede a phpMyAdmin o usa WP-CLI:

    wp user list --format=table

    Busca cuentas creadas recientemente que no reconozcas, especialmente con nombres genéricos como «admin2», «backup», «test» o «wordpress». Elimínalas con:

    wp user delete ID --reassign=1

    Publicaciones y páginas ocultas: A menudo los plugins inyectan contenido spam o puerta trasera en posts:

    wp post list --post_type=any --status=any --format=table

    Si encuentras posts con títulos raros o creados en fechas sospechosas, elimínalos.

    Opciones de base de datos comprometidas: Los plugins maliciosos a menudo guardan datos en la tabla wp_options. Usa phpMyAdmin para revisar:

    SELECT * FROM wp_options WHERE option_name LIKE '%s99%' OR option_name LIKE '%malware%' OR option_name LIKE '%shell%'

    Borra cualquier entrada sospechosa.

    Paso 3: Busca y elimina webshells y archivos maliciosos

    Este es el paso más tedioso pero esencial. Los plugins maliciosos típicamente dejan archivos PHP ocultos en:

    • /wp-content/uploads/ (es el lugar favorito porque es accesible directamente por URL)
    • /wp-content/plugins/ (incluso aunque desactives el plugin)
    • Raíz de WordPress o /wp-admin/
    • /wp-includes/ (muy peligroso si logran acceso)

    Conéctate por SFTP y busca archivos sospechosos. Signos de alerta:

    • Archivos .php en carpetas que deberían ser solo imágenes (/uploads)
    • Nombres ofuscados: d8h3jd.php, img_load.php, function.php (confunde con wp-content/themes/tu-tema/functions.php)
    • Fechas de modificación recientes en archivos que no tocaste
    • Archivos con pesos inusuales: 50KB+ cuando deberían pesar 2-5KB

    Usa la terminal SSH para buscar de forma más inteligente:

    find /home/usuario/public_html/wp-content/uploads -name "*.php" -type f

    Cualquier archivo .php en uploads es sospechoso 99% del tiempo. Elimínalo.

    También revisa archivos que hayan sido modificados recientemente:

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

    Esto te muestra todos los .php editados en los últimos 30 días. Revísalos uno a uno.

    Paso 4: Limpia modificaciones en archivos de configuración críticos

    Los plugins maliciosos sofisticados modifican archivos que WordPress respeta incluso después de su desinstalación:

    wp-config.php: Revísalo línea por línea. Busca:

    • Nuevas definiciones de constantes extrañas
    • Includes o requires de archivos desconocidos
    • Código ofuscado o base64

    Si lo encuentras, elimina esas líneas pero sé cuidadoso: no borres nada relacionado con tu base de datos o claves de seguridad legítimas.

    .htaccess: Abre el archivo .htaccess en la raíz. Los backdoors suelen añadir redirecciones o modificaciones del módulo rewrite:

    • Redirecciones a dominios desconocidos
    • Reglas que ocultan archivos .php específicos
    • RewriteCond que redirigen tráfico a phishing

    Lo más seguro es regenerar un .htaccess limpio: en WordPress, ve a Ajustes > Enlaces permanentes y guarda sin cambiar nada. Esto sobrescribe el archivo con valores seguros.

    themes/tu-tema/functions.php: Los plugins a veces inyectan código en el tema activo porque es código que se ejecuta en cada carga de página:

    wp theme get --field=stylesheet-path

    Abre ese archivo y busca líneas que:

    • Hayan sido añadidas hace poco (diferentes al resto del código)
    • Contengan eval(), base64_decode(), create_function()
    • Llamen a URLs externas desconocidas
    • Creen usuarios administrativos automáticamente

    Si no eres desarrollador, compara con una copia limpia de tu tema descargada directamente del repositorio oficial.

    Paso 5: Verifica el .htaccess y las reglas del servidor

    Además del archivo .htaccess que mencioné, algunos plugins maliciosos sofisticados modifican la configuración de Apache directamente o crean archivos .htaccess ocultos en subcarpetas:

    find /home/usuario/public_html -name ".htaccess" -type f

    Si encuentras múltiples .htaccess en diferentes carpetas (debería haber solo uno en raíz), inspecciónalos. Cualquier línea que no reconozcas, bórrala.

    Luego, reconstruye uno limpio con estas reglas básicas de seguridad que recomiendo siempre:

    # Proteger wp-config.php
    <Files wp-config.php>
      Order allow,deny
      Deny from all
    </Files>
    
    # Bloquear acceso a wp-admin excepto para ti
    <FilesMatch "wp-login.php">
      Order allow,deny
      Allow from XXX.XXX.XXX.XXX
      Deny from all
    </FilesMatch>
    
    # Prohibir ejecución de PHP en /uploads
    <Directory /uploads>
      php_flag engine off
      AddType text/plain .php
    </Directory>

    Paso 6: Cambia todas las contraseñas y regenera claves de seguridad

    Si un plugin malicioso estuvo meses activo, el atacante probablemente:

    • Creó cuentas de administrador secundarias (que ya eliminaste, pero verifica de nuevo)
    • Capturó cookies de sesión
    • Tuvo acceso a wp-config.php (donde están las claves de autenticación)

    Por eso, obligatorio:

    1. Cambia la contraseña de todos los usuarios, especialmente administradores: wp user update ID --prompt=user_pass
    2. Regenera las claves de seguridad en wp-config.php. Usa el generador oficial de WordPress y reemplaza las líneas AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY (y sus variantes _SALT)
    3. Regenera tokens de API si usas cualquier integración externa

    Esto expulsa a cualquier atacante que tenga sesiones activas o cookies viejas.

    Paso 7: Realiza un escaneo antimalware profesional

    Después de limpiar manualmente, ejecuta un escaneo automatizado para confirmar que no quedó nada:

    Wordfence Premium: Escaneo profundo de archivos, base de datos y comportamiento:

    wp wordfence scan execute --scan_type=all

    MalCare: Muy efectivo detectando webshells y código obfuscado que otros pierden.

    Sucuri Security (plugin gratuito): Más ligero pero confiable para sitios pequeños.

    No confíes en un solo scanner. Si usas dos herramientas diferentes y ambas dan clean, puedes dormir tranquilo.

    Paso 8: Audita eventos en logs y revisa Google Search Console

    Aquí es donde vemos si el atacante dejó más sorpresas:

    Access logs del servidor: Accede a logs/access_log (o similar según tu hosting) y busca requests sospechosos a archivos .php en uploads:

    grep "wp-content/uploads.*.php" /var/log/apache2/access.log

    Esto te muestra si alguien ejecutó webshells. Si ves requests POST grandes o desde IPs desconocidas a tus archivos, es confirmación de que estuvo comprometido.

    Google Search Console: Abre la consola, ve a Seguridad y acciones manuales. Si Google detectó malware, verás un informe detallado. Una vez que hayas limpiado, solicita un análisis de seguridad nuevamente:

    Seguridad y acciones manuales > Problemas de seguridad > Solicitar revisión

    Google típicamente responde en 24-72 horas.

    Paso 9: Instala protección para evitar que vuelva a ocurrir

    Limpiar una vez no es suficiente. Necesitas un escudo permanente. Lo que recomiendo siempre es:

    • Wordfence Firewall: Bloquea intentos de explotación de plugins vulnerables antes de que lleguen a tu servidor. Configura para bloquear bots de fuerza bruta en wp-login.php
    • Actualizaciones automáticas: define('WP_AUTO_UPDATE_CORE', true); en wp-config.php
    • 2FA en wp-admin: Wordfence o Google Authenticator. Si no pueden entrar al panel, no pueden instalar plugins maliciosos
    • Limpieza automática de plugins inactivos: Elimina cualquier plugin que no uses realmente. Cada uno que no tengas es una puerta cerrada
    • Auditorías de plugins regularmente: Una vez al mes, verifica que cada plugin tiene actualizaciones disponibles y que la última versión no tiene vulnerabilidades reportadas

    ¿Qué pasa si todo está muy comprometido?

    A veces encuentro sitios donde un plugin malicioso ha estado tan tiempo que el daño es profundo: múltiples webshells escondidos, inyecciones en 50+ publicaciones, claves de seguridad expuestas, etc.

    En estos casos, la limpieza manual es arriesgada. Podrías dejar algo atrás y tener un segundo ataque en una semana.

    Mi recomendación es siempre clara: si no estás 100% seguro, busca ayuda profesional. En ManuelFolgar.com realizamos análisis exhaustivos, limpieza completa y hardening posterior. Es mejor 300€ en seguridad ahora que 3000€ en pérdida de datos o reputación después.

    Resumen de acciones inmediatas

    1. Identifica plugins comprometidos con NVD, Sucuri SiteCheck y Wordfence
    2. Limpia usuarios, posts y opciones sospechosas de base de datos
    3. Busca y elimina webshells en /uploads y /plugins
    4. Revisa wp-config.php, .htaccess y functions.php del tema
    5. Cambia todas las contraseñas y regenera claves de seguridad
    6. Escanea con múltiples herramientas antimalware
    7. Revisa logs y solicita revisión a Google
    8. Instala Wordfence, activa 2FA y configura actualizaciones automáticas

    Si necesitas ayuda profesional en cada uno de estos pasos, o si quieres que un experto haga la auditoría completa mientras tú descansas tranquilo, contacta conmigo en ManuelFolgar.com. Ofrezco análisis sin compromiso y planes de limpieza adaptados a tu sitio.

  • Escaneo de malware WordPress: herramientas y procedimientos

    Escaneo de malware WordPress: herramientas y procedimientos

    Escaneo de malware WordPress: herramientas y procedimientos

    Cuando un cliente me contacta porque sospecha que su WordPress está comprometido, lo primero que hago es un escaneo profundo de malware. No es algo opcional: si tu sitio está infectado y no lo detectas a tiempo, los daños pueden ser devastadores. Pérdida de datos, robo de credenciales, indexación de spam en Google, caída del tráfico orgánico y pérdida de confianza de usuarios son solo algunas consecuencias.

    En mi experiencia, la mayoría de los ataques a WordPress provienen de plugins desactualizados, temas nulled o contraseñas débiles en el panel de administración. El malware se instala silenciosamente y puede estar semanas sin ser detectado. Por eso te voy a mostrar exactamente cómo scanear tu sitio, qué herramientas funcionan de verdad y qué hacer si encuentras algo.

    ¿Por qué un escaneo de malware es imprescindible?

    Antes de entrar en herramientas, quiero que entiendas por qué esto es crítico. Los atacantes no atacan WordPress al azar. Buscan activamente vulnerabilidades porque saben que hay cientos de miles de sitios WordPress sin parches de seguridad.

    Según el equipo de seguridad de WordPress.org, mantener tu instalación actualizada es la defensa más importante. Pero si ya estás comprometido, necesitas detectarlo rápido.

    Los tipos de malware que más veo en WordPress son:

    • Backdoors: archivos ocultos que permiten al atacante acceder sin credenciales reales
    • Webshells: scripts PHP que funcionan como puerta trasera remota
    • Redirectores: código que envía a visitantes a sitios maliciosos sin tu control
    • Cryptominers: scripts que usan CPU del servidor para minar criptomonedas
    • Skimmers de tarjetas: malware que captura datos de pagos (muy grave en tiendas online)
    • Inyección de spam SEO: contenido malicioso inyectado para posicionar sitios de terceros

    Herramientas principales para escanear malware en WordPress

    No todas las herramientas detectan lo mismo. Lo que recomiendo siempre es usar varias en combinación porque un malware sofisticado puede eludir un solo scanner.

    1. Wordfence (la mejor opción plugin)

    Wordfence es mi herramienta de referencia. Tiene una versión gratuita que escanea todo el servidor, compara archivos de WordPress contra las versiones originales, detecta malware en themes y plugins, e identifica vulnerabilidades conocidas.

    Cómo usarlo:

    1. Instala el plugin desde el repositorio oficial de WordPress
    2. Ve a Wordfence > Scan
    3. Haz clic en «Start scan»
    4. Espera a que termine (puede tardar 30-60 minutos según el tamaño del sitio)
    5. Revisa los resultados en la pestaña «Threat report»

    Lo que me gusta de Wordfence es que no solo busca malware, sino también archivos modificados. Si un plugin legítimo fue parchado con código malicioso, Wordfence lo detecta comparando el hash MD5 del archivo con el original en los servidores de WordPress.org.

    2. MalCare (escaneo en la nube)

    MalCare escanea tu sitio desde servidores en la nube, lo que evita sobrecargar tu propio servidor. Es especialmente útil si tu hosting es lento o tienes poco margen de recursos.

    Ventajas:

    • Detecta malware oculto en bases de datos
    • Identifica vulnerabilidades en plugins y temas
    • Tiene inteligencia artificial para detectar patrones de ataque nuevos
    • Versión gratuita funcional para sitios pequeños

    En un caso real, encontré un backdoor que Wordfence no había detectado porque estaba ofuscado en la base de datos. MalCare lo sacó a la luz en minutos.

    3. Sucuri SiteCheck (escaneo online gratuito)

    Sucuri SiteCheck es completamente gratuito y no requiere instalar nada. Solo necesitas acceder a su web, escribir tu URL y esperar. Es perfecto como primer chequeo rápido.

    Te muestra:

    • Malware detectado
    • Blacklist status (si Google o Sucuri lo han marcado como malicioso)
    • Problemas de seguridad general
    • Vulnerabilidades conocidas

    4. Google Search Console (control de Google)

    Google indexa malware constantemente. Si tu sitio tiene código malicioso, muy probablemente lo haya detectado. En Google Search Console, ve a «Seguridad y acciones manuales» para ver si Google ha marcado tu dominio.

    Si aparece «Malware detectado», tienes un problema real que requiere acción inmediata.

    5. Análisis manual con WP-CLI

    Para los que se sienten cómodos con línea de comandos, WP-CLI es brutal en eficiencia:

    Listar plugins activos con versiones:

    • wp plugin list

    Verificar integridad de archivos de WordPress core:

    • wp core verify-checksums

    Buscar archivos sospechosos modificados recientemente:

    • find /ruta/a/wordpress -type f -name «*.php» -mtime -7

    Este comando te muestra todos los archivos PHP modificados en los últimos 7 días. Si encontras algo fuera de wp-content/uploads o temas/plugins legítimos, es sospechoso.

    6. VirusTotal (análisis de archivos individuales)

    VirusTotal te permite subir archivos PHP sospechosos y escanearlos contra 90+ antivirus. Es especialmente útil cuando encuentras un archivo raro y no sabes si es legítimo.

    Procedimiento completo de escaneo

    Aquí está el protocolo que sigo yo cuando analizo un sitio potencialmente comprometido:

    Paso 1: Escaneo inicial rápido

    Primero, accedo a Sucuri SiteCheck con la URL del cliente. Tarda 2-3 minutos y te da un primer veredicto. Si sale «malware detectado» aquí, ya sabemos que es grave.

    Paso 2: Escaneo con Wordfence

    Instalo Wordfence si no lo tiene, y lanzo un escaneo completo. Mientras se ejecuta (30-60 minutos), paso al siguiente punto.

    Paso 3: Revisión de Google Search Console

    Compruebo si Google ha detectado malware. Si tiene alertas de «Sitio comprometido» o «Malware», la situación es más delicada.

    Paso 4: Análisis de plugins y temas

    Busco:

    • Plugins desactualizados: cualquier versión antigua que tenga CVE publicado
    • Temas nulled: si el cliente dice «compré el tema en una tienda rara», probablemente sea falsificado
    • Plugins de origen dudoso: algunos «security» plugins maliciosos simulan ser legítimos
    • Plugins inactivos años atrás: son vectores de ataque si nunca se actualizaron

    Paso 5: Revisión manual de archivos core

    Con WP-CLI, corro «wp core verify-checksums». Si sale algo modificado en wp-load.php, wp-settings.php o wp-config.php, el sitio fue parchado.

    Paso 6: Búsqueda de backdoors

    Busco en directorios comunes donde los atacantes dejan backdoors:

    • /wp-content/uploads/ (el lugar más común)
    • /wp-content/plugins/ (especialmente plugins desactivados)
    • Raíz del sitio (archivos .php solitarios)
    • /wp-admin/ (si tiene permisos, pueden añadir ahí)

    Un backdoor típico es un archivo como «update.php», «config.php» o algo con nombre genérico. Cuando lo encuentro, corro VirusTotal para confirmar.

    Paso 7: Análisis de base de datos

    Conecto vía phpMyAdmin y busco:

    • Posts editados con código malicioso: inyección de iframes o scripts
    • Usuarios extra: cuentas de administrador que el cliente no reconoce
    • Opciones modificadas: valores raros en wp_options que podrían ser persistencia

    Un truco: busco en la tabla wp_posts donde post_content contiene «iframe» o «<script" sin ser del cliente.

    Paso 8: Logs del servidor

    Reviso access.log y error.log de Apache/Nginx. Busco:

    • POST requests a wp-login.php desde IPs raras
    • Accesos a archivos que no existen (típico de intentos de RFI/LFI)
    • Mensajes de error SQL (indicio de inyección)

    Qué hacer si encuentras malware

    Si tu escaneo da positivo, aquí es donde muchos clientes panic. Pero hay un plan claro:

    1. Aislamiento inmediato

    No esperes: si está en una blacklist de Google, necesitas sacarlo rápido. Algunas opciones:

    • Desactiva todos los plugins (excepto Wordfence)
    • Cambia el tema a uno stock de WordPress
    • Desconecta usuarios no autorizados en wp-admin

    El objetivo es minimizar el daño mientras trabajas en la limpieza.

    2. Backup seguro (si lo tienes)

    Descarga un backup anterior a la infección si lo guardaste. Cuidado: si el backup es infectado también, no sirve. Por eso recomiendo backups automáticos diarios, no semanales.

    3. Limpieza manual vs. reinstalación

    Aquí tengo dos opciones:

    Limpieza manual: si el malware es superficial (un plugin infectado, unos cuantos archivos backdoor), puedo eliminarlo manualmente, restablecer permisos y cambiar todas las contraseñas.

    Reinstalación completa: si el malware está profundamente enraizado (modificaciones en core, múltiples backdoors, inyección en BD), reinstalo WordPress desde cero, subo contenido limpio del backup, y reconfiguro todo.

    En mi experiencia, la reinstalación es más segura y custa menos tiempo que una limpieza manual exhaustiva.

    4. Cambio de credenciales

    Cambio todo:

    • Contraseña de admin de WordPress
    • Credenciales FTP/SFTP
    • Contraseña de la base de datos
    • Credenciales de email de administrador
    • Keys y salts de WordPress (en wp-config.php)

    5. Reportar a Google

    En Google Search Console, ve a «Seguridad y acciones manuales» y solicita una revisión de seguridad. Explica que ya está limpio. Google tarda 1-7 días en revisar.

    Prevención: hardening después del ataque

    Una vez limpios, implemento medidas para que no vuelva a pasar:

    Cambio de prefijo de tablas

    La mayoría de ataques SQL apuntan a tablas con nombre «wp_». Lo cambio en wp-config.php y la BD:

    • $table_prefix = ‘mf_’;

    Deshabilitar edición de archivos

    Añado a wp-config.php:

    • define(‘DISALLOW_FILE_EDIT’, true);

    Así, aunque un atacante acceda al panel de admin, no puede editar archivos PHP directamente.

    Proteger wp-config.php

    En .htaccess:

    • <files wp-config.php> deny from all </files>

    Limitar intentos de login

    Uso Wordfence Firewall para bloquear tras 5 intentos fallidos en 5 minutos. Mata los ataques de fuerza bruta.

    Dos factores de autenticación (2FA)

    Instalo Two-Factor Authentication for WordPress. Aunque hackeen la contraseña, sin el móvil no entran.

    Auditoría de actividad

    Wordfence mantiene logs de quién accede y cuándo. Lo reviso regularmente en «Tools > Activity Log».

    Automatizar escaneos

    Configuro escaneos semanales automáticos en Wordfence. Si encuentra algo, me avisa por email.

    Errores comunes que veo

    Después de años analizando WordPress infectados, estos son los fallos más frecuentes:

    • No actualizar plugins: el 80% de los ataques explotan vulnerabilidades conocidas y parchadas
    • Usar temas nulled: descargar temas «gratis» de sitios de dudosa reputación es suicida
    • Contraseñas débiles: «123456» o «admin» como contraseña de panel invita ataques brute force
    • No tener backups: si no tienes backup limpio, no puedes recuperarte
    • Ignorar alertas de Google: cuando Google te avisa, tienes días para actuar, no semanas
    • Confiar en un solo scanner: usar solo Wordfence puede dejar malware sin detectar

    Resumen: tu checklist de escaneo

    Si sospechas malware, haz esto hoy:

    1. Accede a Sucuri SiteCheck y scanea tu URL
    2. Revisa Google Search Console para alertas de malware
    3. Instala Wordfence si no lo tienes y lanza escaneo completo
    4. Revisa plugins desactualizados y desactiva los dudosos
    5. Busca archivos PHP raros en wp-content/uploads/
    6. Si encuentras algo, contacta con un profesional

    No intentes limpiar malware sofisticado tú solo si no tienes experiencia. Un mal movimiento puede borrar contenido legítimo o dejar puertas traseras. Lo que recomiendo siempre es trabajar con especialistas en seguridad WordPress.

    Si tu sitio está comprometido o tienes dudas después de un escaneo, contacta conmigo en ManuelFolgar.com. Hago análisis profundos de seguridad y limpiezas garantizadas para WordPress. Tu sitio es tu negocio, y merece estar protegido.

  • 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.

  • 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.