{"id":3637,"date":"2026-06-19T00:43:56","date_gmt":"2026-06-18T22:43:56","guid":{"rendered":"https:\/\/mantenimientoweb.pro\/blog\/como-limpiar-un-sitio-wordpress-infectado-con-malware-paso-a-paso\/"},"modified":"2026-06-19T00:43:58","modified_gmt":"2026-06-18T22:43:58","slug":"como-limpiar-un-sitio-wordpress-infectado-con-malware-paso-a-paso","status":"publish","type":"post","link":"https:\/\/mantenimientoweb.pro\/blog\/como-limpiar-un-sitio-wordpress-infectado-con-malware-paso-a-paso\/","title":{"rendered":"\u00bfC\u00f3mo limpiar un sitio WordPress infectado con malware paso a paso?"},"content":{"rendered":"<p><main><\/p>\n<article>\n<section>\n      <span>Seguridad WordPress \u00b7 Malware \u00b7 Recuperaci\u00f3n<\/span><br \/>\n      \u00bfC\u00f3mo limpiar un sitio WordPress infectado con malware paso a paso? \ud83d\udee1\ufe0f<\/p>\n<p>Una gu\u00eda profesional para diagnosticar, contener, limpiar y reforzar un WordPress comprometido sin perder la cabeza, el posicionamiento ni la confianza de tus usuarios.<\/p>\n<\/section>\n<section>\n<p>Un sitio WordPress infectado rara vez llega con m\u00fasica dram\u00e1tica. A veces aparece como una redirecci\u00f3n absurda a una tienda de zapatillas, otras como un aviso rojo de Google, un pico extra\u00f1o de consumo del servidor o un archivo llamado <code>class-wp-cache.php<\/code> que, por supuesto, no cachea nada salvo la desgracia. La iron\u00eda es fina: construimos una web para que nos encuentren, y el malware la convierte en un faro para bots, spam y buscadores ofendidos.<\/p>\n<p>WordPress es el gestor de contenidos m\u00e1s usado del mundo; seg\u00fan mediciones p\u00fablicas como W3Techs, impulsa alrededor del 40% de los sitios web. Esa popularidad es virtud y condena: comunidad inmensa, ecosistema brillante, miles de plugins \u00fatiles; y, al mismo tiempo, una superficie de ataque enorme. No porque WordPress sea \u201cinseguro\u201d por naturaleza, sino porque muchos sitios viven con plugins abandonados, contrase\u00f1as recicladas, temas pirata y copias de seguridad que existen solo en la imaginaci\u00f3n. El castillo es s\u00f3lido; la puerta, a veces, queda con la llave puesta.<\/p>\n<p>        <strong>Mapa r\u00e1pido de la gu\u00eda \ud83e\udded<\/strong><\/p>\n<ol>\n<li><a href=\"#senales\">Se\u00f1ales de infecci\u00f3n en WordPress<\/a><\/li>\n<li><a href=\"#contencion\">Contener el incidente antes de limpiar<\/a><\/li>\n<li><a href=\"#backup\">Crear una copia forense del sitio infectado<\/a><\/li>\n<li><a href=\"#diagnostico\">Diagnosticar el alcance del malware<\/a><\/li>\n<li><a href=\"#limpieza-archivos\">Limpiar archivos del n\u00facleo, plugins, temas y uploads<\/a><\/li>\n<li><a href=\"#limpieza-bd\">Limpiar la base de datos de WordPress<\/a><\/li>\n<li><a href=\"#usuarios\">Revisar usuarios, contrase\u00f1as y accesos<\/a><\/li>\n<li><a href=\"#permisos\">Corregir permisos, cron jobs y configuraciones ocultas<\/a><\/li>\n<li><a href=\"#verificacion\">Verificar que el sitio qued\u00f3 limpio<\/a><\/li>\n<li><a href=\"#seo\">Recuperar reputaci\u00f3n, SEO y avisos de seguridad<\/a><\/li>\n<li><a href=\"#hardening\">Endurecer WordPress para evitar reinfecciones<\/a><\/li>\n<\/ol>\n<h2 id=\"senales\">1. Se\u00f1ales de que tu WordPress tiene malware \ud83d\udd0d<\/h2>\n<p>El malware en WordPress no siempre se ve como una p\u00e1gina destruida. A menudo trabaja como humedad detr\u00e1s de una pared: silencioso, persistente, dejando manchas cuando ya lleva tiempo ah\u00ed. Estas son se\u00f1ales habituales:<\/p>\n<h3>\ud83d\udea8 Avisos visibles<\/h3>\n<ul>\n<li>Google muestra \u201cEste sitio puede haber sido hackeado\u201d.<\/li>\n<li>El navegador alerta sobre phishing o software malicioso.<\/li>\n<li>Redirecciones a casinos, sorteos, farmacias o sitios para adultos.<\/li>\n<li>Pop-ups extra\u00f1os que no estaban en tu dise\u00f1o.<\/li>\n<\/ul>\n<h3>\u2699\ufe0f S\u00edntomas t\u00e9cnicos<\/h3>\n<ul>\n<li>Archivos PHP dentro de <code>wp-content\/uploads<\/code>.<\/li>\n<li>Consumo anormal de CPU, RAM o procesos PHP.<\/li>\n<li>Errores 500, lentitud repentina o ca\u00eddas intermitentes.<\/li>\n<li>Tareas cron desconocidas o archivos modificados recientemente.<\/li>\n<\/ul>\n<h3>\ud83d\udcc9 Da\u00f1o comercial<\/h3>\n<ul>\n<li>Ca\u00edda brusca del tr\u00e1fico org\u00e1nico.<\/li>\n<li>Emails del dominio marcados como spam.<\/li>\n<li>Pedidos o formularios sospechosos.<\/li>\n<li>Clientes preguntando por enlaces raros. Qu\u00e9 elegante, justo un lunes.<\/li>\n<\/ul>\n<table>\n<thead>\n<tr>\n<th>Tipo de infecci\u00f3n<\/th>\n<th>C\u00f3mo suele verse<\/th>\n<th>D\u00f3nde buscar<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Backdoor<\/td>\n<td>Archivo que permite reingresar aunque cambies contrase\u00f1as.<\/td>\n<td><code>wp-content<\/code>, <code>uploads<\/code>, <code>mu-plugins<\/code>, archivos con nombres parecidos a los leg\u00edtimos.<\/td>\n<\/tr>\n<tr>\n<td>Redirecci\u00f3n maliciosa<\/td>\n<td>El sitio manda a usuarios o m\u00f3viles a dominios externos.<\/td>\n<td><code>.htaccess<\/code>, <code>wp-config.php<\/code>, base de datos, scripts inyectados.<\/td>\n<\/tr>\n<tr>\n<td>SEO spam<\/td>\n<td>P\u00e1ginas ocultas sobre medicamentos, apuestas, pr\u00e9stamos o productos falsos.<\/td>\n<td><code>wp_posts<\/code>, <code>wp_options<\/code>, archivos sitemap falsos, plantillas del tema.<\/td>\n<\/tr>\n<tr>\n<td>Phishing<\/td>\n<td>P\u00e1ginas falsas de bancos, correos o pasarelas de pago.<\/td>\n<td>Directorios ocultos, subcarpetas con HTML\/PHP, cuentas FTP comprometidas.<\/td>\n<\/tr>\n<tr>\n<td>Web shell<\/td>\n<td>Panel clandestino para ejecutar comandos en el servidor.<\/td>\n<td>Archivos PHP con funciones como <code>eval<\/code>, <code>system<\/code>, <code>shell_exec<\/code>; revisar con criterio porque puede haber falsos positivos.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>        <strong>Importante:<\/strong> no empieces borrando archivos \u201craros\u201d como quien arranca malas hierbas con los ojos cerrados. Puedes eliminar evidencia \u00fatil, romper el sitio o dejar intacta la puerta trasera. Primero contiene, copia y analiza.<\/p>\n<h2 id=\"contencion\">2. Contener el incidente: parar la hemorragia antes de operar \ud83e\uddef<\/h2>\n<p>Limpiar WordPress infectado no es solo \u201cpasar un plugin de seguridad\u201d. Es una respuesta a incidente, aunque sea en miniatura. Hay un antes y un despu\u00e9s: antes, el sitio sirve contenido; despu\u00e9s, quiz\u00e1 sirve malware. La diferencia entre ambos mundos puede ser una l\u00ednea en <code>.htaccess<\/code>, tan peque\u00f1a como una astilla y tan da\u00f1ina como una viga podrida.<\/p>\n<h3>2.1 Restringe temporalmente el acceso<\/h3>\n<p>Si el sitio est\u00e1 enviando malware, redirigiendo usuarios o mostrando phishing, ponlo en mantenimiento o limita el acceso por IP. Si tienes una tienda online, entiende el golpe comercial, s\u00ed; pero dejar un ecommerce infectado funcionando es como vender pan desde una panader\u00eda con humo saliendo del horno.<\/p>\n<p>Opciones razonables:<\/p>\n<ul>\n<li>Activar modo mantenimiento desde el hosting o un archivo temporal.<\/li>\n<li>Bloquear acceso p\u00fablico mediante reglas del servidor, permitiendo solo tu IP.<\/li>\n<li>Pausar campa\u00f1as de anuncios para no enviar tr\u00e1fico a una p\u00e1gina comprometida.<\/li>\n<li>Desactivar temporalmente tareas automatizadas sospechosas si est\u00e1n generando spam.<\/li>\n<\/ul>\n<h3>2.2 Contacta al proveedor de hosting<\/h3>\n<p>Un buen hosting puede revisar logs, detectar procesos sospechosos, restaurar archivos de sistema, confirmar si hay otros sitios infectados en la misma cuenta y decirte si el problema viene de permisos, FTP, vulnerabilidades conocidas o abuso de recursos. Un mal hosting responder\u00e1 con un \u201cinstale un plugin\u201d, esa poes\u00eda administrativa tan nuestra. Insiste en obtener datos: hora de modificaci\u00f3n, IPs, rutas afectadas, procesos y alertas del antivirus del servidor.<\/p>\n<h3>2.3 No conf\u00edes en un \u00fanico esc\u00e1ner<\/h3>\n<p>Herramientas como Wordfence, Sucuri SiteCheck, Patchstack, MalCare, ImunifyAV, ClamAV o el esc\u00e1ner del hosting pueden ayudar. Pero ning\u00fan esc\u00e1ner ve todo. Algunos detectan firmas conocidas; otros identifican comportamiento; otros solo miran desde fuera. El malware nuevo, ofuscado o escondido en base de datos puede pasar como pez bajo agua turbia.<\/p>\n<h2 id=\"backup\">3. Haz una copia del sitio infectado antes de tocar nada \ud83d\udcbe<\/h2>\n<p>Puede parecer absurdo respaldar algo contaminado. Pero esa copia es tu fotograf\u00eda de la escena. Sirve para comparar, auditar, recuperar contenido leg\u00edtimo y entender c\u00f3mo entr\u00f3 el atacante. La memoria t\u00e9cnica, como la memoria humana, se deforma cuando la urgencia aprieta.<\/p>\n<p>Guarda:<\/p>\n<ul>\n<li>Todos los archivos del sitio: <code>public_html<\/code>, <code>www<\/code> o el directorio correspondiente.<\/li>\n<li>La base de datos completa en formato SQL.<\/li>\n<li>Logs de acceso y error del servidor, si est\u00e1n disponibles.<\/li>\n<li>Lista de usuarios administradores, plugins y temas instalados.<\/li>\n<li>Capturas de avisos de Google, Search Console, navegador o antivirus.<\/li>\n<\/ul>\n<p>Si tienes SSH, puedes comprimir archivos y exportar la base de datos. Ajusta rutas, usuario y nombre de base de datos a tu caso:<\/p>\n<pre><code>tar -czf respaldo-sitio-infectado.tar.gz \/ruta\/del\/sitio\n\nmysqldump -u usuario_bd -p nombre_bd &gt; respaldo-base-datos-infectada.sql<\/code><\/pre>\n<p>Con WP-CLI, si est\u00e1 disponible:<\/p>\n<pre><code>wp db export respaldo-base-datos-infectada.sql<\/code><\/pre>\n<p>        <strong>Consejo pr\u00e1ctico:<\/strong> descarga esa copia fuera del servidor. Si el atacante conserva acceso, un respaldo guardado en la misma cuenta puede ser modificado o borrado. El backup local es como una linterna en un apag\u00f3n: humilde, pero cuando hace falta, vale oro.<\/p>\n<h2 id=\"diagnostico\">4. Diagnosticar el alcance de la infecci\u00f3n \ud83e\uddea<\/h2>\n<p>Antes de limpiar, hay que saber qu\u00e9 se limpi\u00f3 y qu\u00e9 falta. Una infecci\u00f3n puede estar en archivos, base de datos, usuarios, tareas programadas, reglas de servidor o incluso en credenciales externas. El error cl\u00e1sico es eliminar el archivo visible y celebrar. Dos d\u00edas despu\u00e9s, el malware vuelve. No era resurrecci\u00f3n; era una puerta trasera haciendo su trabajo con paciencia de jardinero.<\/p>\n<h3>4.1 Revisa versiones y vulnerabilidades conocidas<\/h3>\n<p>Consulta la versi\u00f3n de WordPress, plugins y temas. Las vulnerabilidades m\u00e1s frecuentes en el ecosistema WordPress suelen concentrarse en plugins y temas de terceros. Informes p\u00fablicos de empresas como Patchstack y Wordfence muestran a\u00f1o tras a\u00f1o que la mayor\u00eda de vulnerabilidades reportadas no est\u00e1n en el n\u00facleo de WordPress, sino en extensiones. Esto no demoniza los plugins; demoniza abandonarlos.<\/p>\n<pre><code>wp core version\nwp plugin list --fields=name,status,version,update\nwp theme list --fields=name,status,version,update<\/code><\/pre>\n<p>Busca:<\/p>\n<ul>\n<li>Plugins sin actualizar desde hace a\u00f1os.<\/li>\n<li>Temas \u201cnulled\u201d o descargados fuera de fuentes confiables.<\/li>\n<li>Plugins desactivados pero presentes en el servidor.<\/li>\n<li>Extensiones con vulnerabilidades recientes publicadas en bases como Patchstack, WPScan Vulnerability Database o NVD.<\/li>\n<\/ul>\n<h3>4.2 Verifica integridad del n\u00facleo de WordPress<\/h3>\n<p>WP-CLI permite comparar archivos del n\u00facleo con los checksums oficiales. Es una de las comprobaciones m\u00e1s limpias para detectar modificaciones indebidas en <code>wp-admin<\/code>, <code>wp-includes<\/code> y archivos ra\u00edz de WordPress.<\/p>\n<pre><code>wp core verify-checksums<\/code><\/pre>\n<p>Si aparecen archivos alterados en el n\u00facleo, lo normal es reinstalar WordPress desde una fuente oficial. No \u201carregles\u201d manualmente cada archivo del core salvo que sepas muy bien por qu\u00e9. El n\u00facleo debe ser aburridamente id\u00e9ntico al original; ah\u00ed la creatividad es sospechosa.<\/p>\n<h3>4.3 Encuentra archivos modificados recientemente<\/h3>\n<p>Este comando muestra archivos editados en los \u00faltimos 14 d\u00edas:<\/p>\n<pre><code>find . -type f -mtime -14 -ls<\/code><\/pre>\n<p>Para buscar PHP donde no deber\u00eda haberlo, especialmente en uploads:<\/p>\n<pre><code>find wp-content\/uploads -type f \\( -name \"*.php\" -o -name \"*.phtml\" -o -name \"*.phar\" -o -name \"*.php5\" \\) -print<\/code><\/pre>\n<p>En la mayor\u00eda de sitios, <code>wp-content\/uploads<\/code> deber\u00eda contener im\u00e1genes, PDFs, documentos y medios, no scripts PHP. Hay excepciones raras, pero pocas. Si encuentras <code>image.php<\/code>, <code>about.php<\/code>, <code>autoload_classmap.php<\/code> o nombres \u201cinocentes\u201d dentro de uploads, levanta la ceja.<\/p>\n<h3>4.4 Busca patrones sospechosos, sin caer en paranoia<\/h3>\n<p>Algunas funciones son comunes en malware, aunque tambi\u00e9n pueden aparecer en c\u00f3digo leg\u00edtimo. \u00dasalas como pista, no como sentencia:<\/p>\n<pre><code>grep -RIn --include=\"*.php\" \"eval\\|base64_decode\\|gzinflate\\|str_rot13\\|shell_exec\\|passthru\\|assert\" wp-content<\/code><\/pre>\n<p>Un archivo con <code>base64_decode<\/code> no siempre es malware; un archivo con cinco capas de ofuscaci\u00f3n, nombres aleatorios y llamadas remotas a dominios extra\u00f1os ya huele diferente. Como pescado olvidado en agosto.<\/p>\n<h3>4.5 Revisa archivos especialmente sensibles<\/h3>\n<ul>\n<li><code>.htaccess<\/code>: redirecciones, reglas extra\u00f1as, condicionales por user-agent o referer.<\/li>\n<li><code>wp-config.php<\/code>: c\u00f3digo a\u00f1adido antes o despu\u00e9s de la configuraci\u00f3n leg\u00edtima.<\/li>\n<li><code>index.php<\/code>: inyecciones al inicio o al final del archivo.<\/li>\n<li><code>wp-content\/mu-plugins<\/code>: plugins obligatorios que cargan siempre.<\/li>\n<li><code>wp-content\/advanced-cache.php<\/code> y <code>object-cache.php<\/code>: drop-ins leg\u00edtimos o escondites perfectos.<\/li>\n<li><code>.user.ini<\/code> y <code>php.ini<\/code>: directivas como <code>auto_prepend_file<\/code> que cargan malware en cada petici\u00f3n.<\/li>\n<\/ul>\n<h2 id=\"limpieza-archivos\">5. Limpiar archivos infectados de WordPress \ud83e\uddf9<\/h2>\n<p>Aqu\u00ed empieza la cirug\u00eda. No buscamos embellecer el paciente; buscamos extirpar lo comprometido y reconstruir con fuentes confiables. Antiguo contra nuevo, limpio contra contaminado, certeza contra sospecha.<\/p>\n<h3>5.1 Reinstala el n\u00facleo desde wordpress.org<\/h3>\n<p>La forma m\u00e1s segura es reemplazar <code>wp-admin<\/code>, <code>wp-includes<\/code> y los archivos ra\u00edz de WordPress con una copia limpia. Conserva <code>wp-config.php<\/code> y <code>wp-content<\/code>, pero rev\u00edsalos con lupa.<\/p>\n<p>Con WP-CLI:<\/p>\n<pre><code>wp core update --force<\/code><\/pre>\n<p>Despu\u00e9s, vuelve a verificar:<\/p>\n<pre><code>wp core verify-checksums<\/code><\/pre>\n<p>        <strong>No borres <code>wp-content<\/code> completo<\/strong> si no tienes copia verificada. Ah\u00ed est\u00e1n medios, temas, plugins y archivos propios. Pero tampoco lo trates como territorio sagrado: es uno de los lugares favoritos del malware.<\/p>\n<h3>5.2 Elimina plugins y temas no confiables<\/h3>\n<p>Los plugins \u201cnulled\u201d prometen funciones premium gratis. Qu\u00e9 generosidad tan conmovedora: a menudo traen backdoors, spam SEO o inyecciones preparadas. Si un tema o plugin no viene del repositorio oficial, del desarrollador leg\u00edtimo o de un marketplace fiable, elim\u00ednalo.<\/p>\n<p>Buenas pr\u00e1cticas:<\/p>\n<ul>\n<li>Desinstala plugins inactivos. Inactivo no significa inocuo si sus archivos siguen ah\u00ed.<\/li>\n<li>Reinstala plugins desde fuentes oficiales, no sobreescribiendo versiones sospechosas sin revisar.<\/li>\n<li>Reemplaza temas abandonados. Mant\u00e9n solo el tema activo y un tema oficial de respaldo si lo necesitas.<\/li>\n<li>Comprueba si el plugin vulnerable tiene parche. Si no, busca alternativa.<\/li>\n<\/ul>\n<pre><code>wp plugin update --all\nwp theme update --all<\/code><\/pre>\n<p>Si quieres verificar checksums de plugins disponibles en wordpress.org, puedes probar:<\/p>\n<pre><code>wp plugin verify-checksums --all<\/code><\/pre>\n<p>Este comando solo es \u00fatil para plugins del repositorio oficial con checksums disponibles. Plugins comerciales o personalizados requieren comparaci\u00f3n con una copia limpia del proveedor o del repositorio de desarrollo.<\/p>\n<h3>5.3 Limpia la carpeta uploads<\/h3>\n<p><code>wp-content\/uploads<\/code> es un lugar c\u00f3modo para ocultar puertas traseras porque suele tener permisos de escritura. Busca archivos ejecutables:<\/p>\n<pre><code>find wp-content\/uploads -type f \\( -name \"*.php\" -o -name \"*.phtml\" -o -name \"*.phar\" -o -name \"*.cgi\" -o -name \"*.pl\" \\) -print<\/code><\/pre>\n<p>Si confirmas que no pertenecen a una funci\u00f3n leg\u00edtima, elim\u00ednalos. Luego impide ejecuci\u00f3n PHP en uploads. En servidores Apache, puedes crear o ajustar un <code>.htaccess<\/code> dentro de <code>wp-content\/uploads<\/code>:<\/p>\n<pre><code>&lt;FilesMatch \"\\.(php|phtml|php5|phar)$\"&gt;\n  Require all denied\n&lt;\/FilesMatch&gt;<\/code><\/pre>\n<p>En Nginx, la restricci\u00f3n debe hacerse en la configuraci\u00f3n del servidor, por ejemplo denegando ejecuci\u00f3n PHP dentro de <code>\/wp-content\/uploads\/<\/code>. Si no administras Nginx, pide al hosting que lo aplique.<\/p>\n<h3>5.4 Revisa <code>.htaccess<\/code><\/h3>\n<p>Un <code>.htaccess<\/code> limpio de WordPress suele ser breve. El bloque est\u00e1ndar se parece a esto:<\/p>\n<pre><code># BEGIN WordPress\n&lt;IfModule mod_rewrite.c&gt;\nRewriteEngine On\nRewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]\nRewriteBase \/\nRewriteRule ^index\\.php$ - [L]\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteRule . \/index.php [L]\n&lt;\/IfModule&gt;\n# END WordPress<\/code><\/pre>\n<p>Desconf\u00eda de reglas que:<\/p>\n<ul>\n<li>Redirigen a dominios que no reconoces.<\/li>\n<li>Act\u00faan solo sobre visitantes m\u00f3viles.<\/li>\n<li>Filtran por <code>googlebot<\/code>, <code>bingbot<\/code>, <code>referer<\/code> o pa\u00eds.<\/li>\n<li>Contienen cadenas largas y ofuscadas.<\/li>\n<\/ul>\n<h3>5.5 Revisa <code>wp-config.php<\/code><\/h3>\n<p>El archivo <code>wp-config.php<\/code> debe contener credenciales de base de datos, claves de seguridad, prefijo de tablas y constantes leg\u00edtimas. Busca c\u00f3digo antes de <code>&lt;?php<\/code>, despu\u00e9s del final, inclusiones extra\u00f1as o llamadas remotas.<\/p>\n<p>Se\u00f1ales sospechosas:<\/p>\n<ul>\n<li><code>include<\/code> o <code>require<\/code> hacia archivos ocultos.<\/li>\n<li>Variables con nombres aleatorios.<\/li>\n<li>C\u00f3digo codificado en base64.<\/li>\n<li>Conexiones a dominios externos.<\/li>\n<li>Modificaciones no documentadas de <code>WP_HOME<\/code> o <code>WP_SITEURL<\/code>.<\/li>\n<\/ul>\n<p>Despu\u00e9s de limpiar, regenera las salts de WordPress. Con WP-CLI:<\/p>\n<pre><code>wp config shuffle-salts<\/code><\/pre>\n<p>Esto cerrar\u00e1 sesiones activas. Inc\u00f3modo, s\u00ed. Necesario, tambi\u00e9n.<\/p>\n<h2 id=\"limpieza-bd\">6. Limpiar la base de datos de WordPress \ud83d\uddc4\ufe0f<\/h2>\n<p>Muchos ataques no se conforman con archivos. Insertan JavaScript en entradas, widgets, opciones del tema o registros aparentemente anodinos. La base de datos se vuelve entonces un \u00e1tico lleno de cajas: casi todo parece familiar hasta que abres una y encuentras una serpiente.<\/p>\n<p>        <strong>Antes de tocar la base de datos:<\/strong> crea una copia SQL. Una consulta mal escrita puede borrar contenido leg\u00edtimo. Trabaja en staging si es posible y valida antes de ejecutar cambios masivos.<\/p>\n<h3>6.1 Revisa URLs principales<\/h3>\n<p>Aseg\u00farate de que <code>siteurl<\/code> y <code>home<\/code> no fueron alteradas:<\/p>\n<pre><code>wp option get siteurl\nwp option get home<\/code><\/pre>\n<p>O mediante SQL, ajustando el prefijo si no usas <code>wp_<\/code>:<\/p>\n<pre><code>SELECT option_name, option_value\nFROM wp_options\nWHERE option_name IN ('siteurl', 'home');<\/code><\/pre>\n<h3>6.2 Busca scripts y iframes maliciosos<\/h3>\n<pre><code>SELECT ID, post_title\nFROM wp_posts\nWHERE post_content LIKE '%&lt;script%'\n   OR post_content LIKE '%iframe%'\n   OR post_content LIKE '%document.write%'\n   OR post_content LIKE '%atob(%';<\/code><\/pre>\n<p>Tambi\u00e9n revisa opciones:<\/p>\n<pre><code>SELECT option_id, option_name\nFROM wp_options\nWHERE option_value LIKE '%&lt;script%'\n   OR option_value LIKE '%base64%'\n   OR option_value LIKE '%eval(%'\n   OR option_value LIKE '%iframe%';<\/code><\/pre>\n<p>Estas b\u00fasquedas pueden encontrar c\u00f3digo leg\u00edtimo, especialmente en plugins de anal\u00edtica, chat, consentimientos de cookies o constructores visuales. La diferencia suele estar en el dominio, la ofuscaci\u00f3n y el contexto. Un script de Google Tag Manager reconocible no es lo mismo que una cadena ilegible apuntando a un dominio reci\u00e9n nacido.<\/p>\n<h3>6.3 Revisa widgets, men\u00fas y opciones del tema<\/h3>\n<p>Los atacantes adoran las zonas que cargan en todas las p\u00e1ginas: widgets HTML, cabecera del tema, footer, opciones de constructores, snippets personalizados. Busca en:<\/p>\n<ul>\n<li><code>wp_options<\/code>: opciones de tema, plugins de cabecera\/footer, constructores.<\/li>\n<li><code>wp_posts<\/code>: entradas, p\u00e1ginas, revisiones, plantillas de builders.<\/li>\n<li><code>wp_postmeta<\/code>: metadatos donde muchos builders guardan contenido.<\/li>\n<li><code>wp_terms<\/code> y <code>wp_termmeta<\/code>: menos frecuente, pero posible.<\/li>\n<\/ul>\n<h3>6.4 Identifica p\u00e1ginas spam creadas por el atacante<\/h3>\n<p>Lista publicaciones recientes o modificadas:<\/p>\n<pre><code>SELECT ID, post_title, post_type, post_status, post_date, post_modified\nFROM wp_posts\nORDER BY post_modified DESC\nLIMIT 50;<\/code><\/pre>\n<p>Busca t\u00edtulos en otros idiomas, slugs extra\u00f1os, contenido farmac\u00e9utico, casinos, cupones o p\u00e1ginas que no pertenecen al sitio. En algunos hackeos SEO, las p\u00e1ginas se muestran solo a Google y no al visitante normal; el teatro es barato, pero efectivo.<\/p>\n<h3>6.5 Limpieza cuidadosa<\/h3>\n<p>No hagas un reemplazo global de cualquier <code>&lt;script&gt;<\/code>. Puedes destruir integraciones leg\u00edtimas. Procede as\u00ed:<\/p>\n<ol>\n<li>Exporta la tabla afectada.<\/li>\n<li>Identifica el patr\u00f3n exacto de malware.<\/li>\n<li>Prueba la limpieza en una copia.<\/li>\n<li>Verifica p\u00e1ginas clave.<\/li>\n<li>Aplica en producci\u00f3n cuando est\u00e9s seguro.<\/li>\n<\/ol>\n<h2 id=\"usuarios\">7. Revisar usuarios, contrase\u00f1as y accesos \ud83d\udc64<\/h2>\n<p>Si solo limpias archivos y dejas una cuenta administradora creada por el atacante, has cambiado las s\u00e1banas mientras el ladr\u00f3n sigue en la casa. Revisa usuarios con privilegios altos:<\/p>\n<pre><code>wp user list --role=administrator<\/code><\/pre>\n<p>Consulta usuarios recientes:<\/p>\n<pre><code>SELECT ID, user_login, user_email, user_registered\nFROM wp_users\nORDER BY user_registered DESC;<\/code><\/pre>\n<p>Acciones recomendadas:<\/p>\n<ul>\n<li>Elimina administradores desconocidos.<\/li>\n<li>Cambia contrase\u00f1as de todos los administradores, editores y cuentas FTP\/SFTP\/SSH.<\/li>\n<li>Cambia la contrase\u00f1a de la base de datos y actualiza <code>wp-config.php<\/code>.<\/li>\n<li>Revoca sesiones activas regenerando salts.<\/li>\n<li>Activa autenticaci\u00f3n de dos factores para administradores.<\/li>\n<li>Revisa emails de recuperaci\u00f3n. Un correo comprometido puede reabrir la puerta.<\/li>\n<li>Cambia claves API de servicios conectados: pasarelas de pago, SMTP, CDN, anal\u00edtica, repositorios, automatizaciones.<\/li>\n<\/ul>\n<p>        <strong>Peque\u00f1a digresi\u00f3n:<\/strong> una vez vi un sitio reinfectarse tres veces. No era un plugin, ni el tema, ni una conspiraci\u00f3n del servidor. Era una cuenta FTP guardada en un port\u00e1til con malware. El WordPress era la v\u00edctima visible; el verdadero incendio estaba en otra habitaci\u00f3n.<\/p>\n<h2 id=\"permisos\">8. Corregir permisos, tareas cron y configuraciones ocultas \ud83d\udd10<\/h2>\n<p>Los permisos no son glamorosos. Nadie presume en una reuni\u00f3n: \u201cmi <code>755<\/code> est\u00e1 impecable\u201d. Y, sin embargo, unos permisos mal puestos pueden convertir el servidor en una plaza p\u00fablica con micr\u00f3fono abierto.<\/p>\n<h3>8.1 Permisos recomendados<\/h3>\n<p>Como regla general en servidores Linux:<\/p>\n<ul>\n<li>Directorios: <code>755<\/code><\/li>\n<li>Archivos: <code>644<\/code><\/li>\n<li><code>wp-config.php<\/code>: <code>600<\/code> o <code>640<\/code>, seg\u00fan configuraci\u00f3n del hosting<\/li>\n<\/ul>\n<pre><code>find . -type d -exec chmod 755 {} \\;\nfind . -type f -exec chmod 644 {} \\;\nchmod 600 wp-config.php<\/code><\/pre>\n<p>Algunos hostings administrados usan permisos distintos por su arquitectura. Si el sitio deja de funcionar tras cambiar permisos, consulta documentaci\u00f3n del proveedor.<\/p>\n<h3>8.2 Desactiva el editor de archivos desde el panel<\/h3>\n<p>Agrega en <code>wp-config.php<\/code>:<\/p>\n<pre><code>define('DISALLOW_FILE_EDIT', true);<\/code><\/pre>\n<p>Esto evita editar temas y plugins desde el administrador. No detiene un ataque por s\u00ed solo, pero reduce da\u00f1o si una cuenta admin cae.<\/p>\n<h3>8.3 Revisa WP-Cron y cron del servidor<\/h3>\n<p>Lista eventos programados:<\/p>\n<pre><code>wp cron event list<\/code><\/pre>\n<p>Busca hooks con nombres extra\u00f1os, llamadas a archivos eliminados o tareas que ejecutan acciones desconocidas. Tambi\u00e9n revisa cron jobs del hosting o del usuario Linux:<\/p>\n<pre><code>crontab -l<\/code><\/pre>\n<p>El malware puede programarse para reconstruirse cada cierto tiempo. Como esas plantas que cortas mal y vuelven m\u00e1s verdes, m\u00e1s insolentes.<\/p>\n<h3>8.4 Revisa configuraciones del servidor<\/h3>\n<ul>\n<li><code>.user.ini<\/code>: busca <code>auto_prepend_file<\/code> o <code>auto_append_file<\/code>.<\/li>\n<li><code>php.ini<\/code>: revisa directivas inesperadas.<\/li>\n<li>Archivos ocultos: usa <code>ls -la<\/code>.<\/li>\n<li>Subdominios o carpetas antiguas dentro del mismo hosting.<\/li>\n<li>Otros WordPress en la cuenta. Un sitio abandonado puede infectar al sitio principal.<\/li>\n<\/ul>\n<h2 id=\"verificacion\">9. Verificar que el malware fue eliminado \u2705<\/h2>\n<p>La limpieza no termina cuando la home carga bien. Termina cuando has comprobado varias capas: archivos, base de datos, accesos, comportamiento externo y registros. Un sitio infectado puede mostrar una cara limpia al administrador y una m\u00e1scara venenosa al visitante que llega desde Google.<\/p>\n<h3>9.1 Limpia cach\u00e9s<\/h3>\n<p>Antes de verificar, purga:<\/p>\n<ul>\n<li>Cach\u00e9 del plugin de WordPress.<\/li>\n<li>Cach\u00e9 del servidor.<\/li>\n<li>CDN, por ejemplo Cloudflare, Fastly o similar.<\/li>\n<li>Cach\u00e9 del navegador al probar.<\/li>\n<li>Object cache si usas Redis o Memcached.<\/li>\n<\/ul>\n<h3>9.2 Prueba como distintos visitantes<\/h3>\n<p>Abre el sitio:<\/p>\n<ul>\n<li>En inc\u00f3gnito.<\/li>\n<li>Desde m\u00f3vil.<\/li>\n<li>Con user-agent de Googlebot, si sabes hacerlo con seguridad.<\/li>\n<li>Desde resultados de b\u00fasqueda.<\/li>\n<li>Con par\u00e1metros habituales: <code>?utm_source=google<\/code>, p\u00e1ginas internas y checkout.<\/li>\n<\/ul>\n<h3>9.3 Escanea desde dentro y desde fuera<\/h3>\n<p>Usa m\u00e1s de una herramienta. Un esc\u00e1ner externo puede detectar redirecciones, blocklists y scripts visibles. Un esc\u00e1ner interno puede ver archivos PHP, permisos y modificaciones. Ninguno reemplaza una revisi\u00f3n manual seria, pero juntos reducen la niebla.<\/p>\n<h3>9.4 Revisa logs despu\u00e9s de limpiar<\/h3>\n<p>Durante 24 a 72 horas, observa:<\/p>\n<ul>\n<li>Intentos de acceso a archivos eliminados.<\/li>\n<li>Peticiones POST a rutas inusuales.<\/li>\n<li>IPs repetitivas intentando explotar plugins antiguos.<\/li>\n<li>Errores PHP nuevos.<\/li>\n<li>Creaci\u00f3n de archivos inesperados.<\/li>\n<\/ul>\n<p>Un intento de acceso a una backdoor ya borrada puede revelar por d\u00f3nde entraban. El atacante vuelve a tocar la puerta; esta vez, al menos, tienes c\u00e1mara.<\/p>\n<h2 id=\"seo\">10. Recuperar reputaci\u00f3n, SEO y avisos de seguridad \ud83d\udcc8<\/h2>\n<p>Cuando Google, Bing, navegadores o antivirus marcan un sitio como peligroso, la limpieza t\u00e9cnica no basta. Debes demostrar que el sitio ya no amenaza a los usuarios. La confianza digital se pierde como cristal y se reconstruye como catedral: piedra a piedra.<\/p>\n<h3>10.1 Google Search Console<\/h3>\n<p>Entra en Search Console y revisa:<\/p>\n<ul>\n<li><strong>Problemas de seguridad:<\/strong> malware, contenido enga\u00f1oso, descargas da\u00f1inas.<\/li>\n<li><strong>Acciones manuales:<\/strong> spam puro, enlaces artificiales o contenido pirateado.<\/li>\n<li><strong>Indexaci\u00f3n:<\/strong> p\u00e1ginas desconocidas a\u00f1adidas al \u00edndice.<\/li>\n<li><strong>Sitemaps:<\/strong> archivos sitemap falsos o generados por el atacante.<\/li>\n<\/ul>\n<p>Cuando hayas limpiado y verificado, solicita revisi\u00f3n. Explica de forma breve qu\u00e9 hiciste: actualizaciones, eliminaci\u00f3n de malware, cambio de contrase\u00f1as, revisi\u00f3n de usuarios, endurecimiento. No escribas una novela judicial; Google necesita se\u00f1ales claras, no l\u00e1grimas.<\/p>\n<h3>10.2 Revisa resultados indexados<\/h3>\n<p>Busca en Google:<\/p>\n<pre><code>site:tudominio.com<\/code><\/pre>\n<p>Si aparecen p\u00e1ginas spam, elim\u00ednalas del sitio, aseg\u00farate de que devuelvan 404 o 410 si no deben existir, actualiza sitemap y solicita retirada temporal si el da\u00f1o reputacional es urgente.<\/p>\n<h3>10.3 Email y dominio<\/h3>\n<p>Si el sitio envi\u00f3 spam, revisa si el dominio o IP est\u00e1n en listas negras. Comprueba tambi\u00e9n SPF, DKIM y DMARC. Muchos due\u00f1os de sitios separan mentalmente \u201cweb\u201d y \u201ccorreo\u201d, pero para la reputaci\u00f3n del dominio viven en la misma casa.<\/p>\n<h2 id=\"hardening\">11. Endurecer WordPress para evitar reinfecciones \ud83e\uddf1<\/h2>\n<p>Limpiar sin endurecer es barrer arena durante una tormenta. El objetivo no es volver al estado anterior; el objetivo es volver mejor. M\u00e1s sobrio. Menos confiado. La seguridad perfecta no existe, pero la negligencia perfecta s\u00ed, y se reconoce enseguida.<\/p>\n<h3>11.1 Mant\u00e9n todo actualizado<\/h3>\n<ul>\n<li>Activa actualizaciones autom\u00e1ticas para parches menores.<\/li>\n<li>Revisa actualizaciones de plugins y temas al menos semanalmente.<\/li>\n<li>Elimina lo que no uses.<\/li>\n<li>Sustituye plugins abandonados por alternativas mantenidas.<\/li>\n<\/ul>\n<h3>11.2 Usa copias de seguridad reales<\/h3>\n<p>Una buena estrategia de backups debe cumplir la regla 3-2-1:<\/p>\n<ul>\n<li>3 copias de los datos.<\/li>\n<li>2 medios o ubicaciones distintas.<\/li>\n<li>1 copia fuera del servidor principal.<\/li>\n<\/ul>\n<p>Y a\u00f1ade una condici\u00f3n que muchos olvidan: prueba la restauraci\u00f3n. Un backup no probado es una promesa, no una garant\u00eda.<\/p>\n<h3>11.3 Aplica m\u00ednimo privilegio<\/h3>\n<ul>\n<li>No todos necesitan ser administradores.<\/li>\n<li>Usa cuentas individuales, no usuarios compartidos.<\/li>\n<li>Revoca accesos de exempleados, agencias anteriores o proveedores temporales.<\/li>\n<li>Limita acceso SFTP\/SSH a quienes realmente lo necesitan.<\/li>\n<\/ul>\n<h3>11.4 Activa WAF y protecci\u00f3n de login<\/h3>\n<p>Un Web Application Firewall ayuda a bloquear explotaci\u00f3n de vulnerabilidades conocidas, bots agresivos y patrones maliciosos. Puede estar en plugin, hosting o CDN. Adem\u00e1s:<\/p>\n<ul>\n<li>Activa 2FA para administradores.<\/li>\n<li>Limita intentos de login.<\/li>\n<li>Protege <code>wp-login.php<\/code> y <code>xmlrpc.php<\/code> si no necesitas XML-RPC.<\/li>\n<li>Usa contrase\u00f1as largas y \u00fanicas con gestor de contrase\u00f1as.<\/li>\n<\/ul>\n<h3>11.5 Cabeceras y configuraci\u00f3n adicional<\/h3>\n<p>Seg\u00fan el sitio, considera:<\/p>\n<ul>\n<li><code>Content-Security-Policy<\/code> para reducir impacto de scripts inyectados, implementada con cuidado.<\/li>\n<li><code>X-Frame-Options<\/code> o <code>frame-ancestors<\/code> para mitigar clickjacking.<\/li>\n<li><code>X-Content-Type-Options: nosniff<\/code>.<\/li>\n<li>HTTPS obligatorio con HSTS si est\u00e1s seguro de tu configuraci\u00f3n.<\/li>\n<li>Deshabilitar ejecuci\u00f3n PHP en directorios de subida.<\/li>\n<\/ul>\n<h3>11.6 Monitoreo continuo<\/h3>\n<p>Despu\u00e9s de una infecci\u00f3n, instala vigilancia razonable:<\/p>\n<ul>\n<li>Alertas de cambios de archivos.<\/li>\n<li>Registro de actividad de usuarios.<\/li>\n<li>Escaneos programados.<\/li>\n<li>Monitoreo de uptime.<\/li>\n<li>Alertas de Search Console.<\/li>\n<\/ul>\n<p>No conviertas el sitio en un b\u00fanker inmanejable. La seguridad \u00fatil es la que se mantiene. La otra, la que exige rituales imposibles, se abandona en dos semanas.<\/p>\n<h2>12. Checklist profesional para limpiar WordPress infectado \ud83e\uddfe<\/h2>\n<table>\n<thead>\n<tr>\n<th>Fase<\/th>\n<th>Acci\u00f3n<\/th>\n<th>Estado<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Contenci\u00f3n<\/td>\n<td>Restringir acceso p\u00fablico o activar mantenimiento si hay riesgo para usuarios.<\/td>\n<td><span>Prioritario<\/span><\/td>\n<\/tr>\n<tr>\n<td>Respaldo<\/td>\n<td>Copiar archivos, base de datos y logs antes de limpiar.<\/td>\n<td><span>Prioritario<\/span><\/td>\n<\/tr>\n<tr>\n<td>Diagn\u00f3stico<\/td>\n<td>Identificar versiones vulnerables, archivos modificados y rutas infectadas.<\/td>\n<td><span>Necesario<\/span><\/td>\n<\/tr>\n<tr>\n<td>Core<\/td>\n<td>Reinstalar WordPress desde fuente oficial y verificar checksums.<\/td>\n<td><span>Recomendado<\/span><\/td>\n<\/tr>\n<tr>\n<td>Plugins y temas<\/td>\n<td>Eliminar extensiones pirata, abandonadas o innecesarias; reinstalar copias limpias.<\/td>\n<td><span>Cr\u00edtico<\/span><\/td>\n<\/tr>\n<tr>\n<td>Uploads<\/td>\n<td>Eliminar PHP sospechoso y bloquear ejecuci\u00f3n de scripts.<\/td>\n<td><span>Cr\u00edtico<\/span><\/td>\n<\/tr>\n<tr>\n<td>Base de datos<\/td>\n<td>Buscar scripts, iframes, spam SEO y opciones alteradas.<\/td>\n<td><span>Necesario<\/span><\/td>\n<\/tr>\n<tr>\n<td>Usuarios<\/td>\n<td>Eliminar administradores desconocidos, cambiar contrase\u00f1as y salts.<\/td>\n<td><span>Cr\u00edtico<\/span><\/td>\n<\/tr>\n<tr>\n<td>Servidor<\/td>\n<td>Revisar permisos, cron jobs, <code>.user.ini<\/code>, <code>php.ini<\/code> y otros sitios en la cuenta.<\/td>\n<td><span>Necesario<\/span><\/td>\n<\/tr>\n<tr>\n<td>Verificaci\u00f3n<\/td>\n<td>Escanear desde dentro y fuera, purgar cach\u00e9s y revisar logs.<\/td>\n<td><span>Recomendado<\/span><\/td>\n<\/tr>\n<tr>\n<td>Reputaci\u00f3n<\/td>\n<td>Solicitar revisi\u00f3n en Google Search Console y limpiar resultados spam.<\/td>\n<td><span>Recomendado<\/span><\/td>\n<\/tr>\n<tr>\n<td>Prevenci\u00f3n<\/td>\n<td>WAF, 2FA, backups externos, actualizaciones y monitoreo.<\/td>\n<td><span>Cr\u00edtico<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>13. Errores frecuentes al eliminar malware en WordPress \u274c<\/h2>\n<p>Algunos errores se repiten tanto que casi merecen estatua, aunque ser\u00eda una estatua fea.<\/p>\n<ul>\n<li><strong>Restaurar un backup sin saber si ya estaba infectado.<\/strong> Si el malware entr\u00f3 hace semanas, el respaldo de ayer solo devuelve el problema con puntualidad brit\u00e1nica.<\/li>\n<li><strong>Cambiar solo la contrase\u00f1a del administrador.<\/strong> Tambi\u00e9n hay FTP, base de datos, hosting, correo, SSH, API keys y sesiones activas.<\/li>\n<li><strong>Dejar plugins inactivos.<\/strong> Si el archivo vulnerable sigue en el servidor, puede seguir siendo explotable.<\/li>\n<li><strong>No limpiar cach\u00e9.<\/strong> Puedes creer que el malware contin\u00faa cuando solo est\u00e1s viendo una copia cacheada; o peor, creer que se fue mientras la CDN a\u00fan lo sirve.<\/li>\n<li><strong>Ignorar otros sitios en la misma cuenta.<\/strong> Un WordPress viejo en una subcarpeta puede reinfectar al principal.<\/li>\n<li><strong>Confiar en temas pirata.<\/strong> Lo barato sale caro; lo gratis robado sale car\u00edsimo.<\/li>\n<li><strong>No revisar base de datos.<\/strong> El malware no vive solo en archivos.<\/li>\n<li><strong>No investigar el vector de entrada.<\/strong> Si no sabes c\u00f3mo entr\u00f3, no sabes si cerraste la puerta.<\/li>\n<\/ul>\n<h2>14. \u00bfCu\u00e1ndo conviene llamar a un profesional? \ud83e\uddd1\u200d\ud83d\udcbb<\/h2>\n<p>Hay limpiezas que un administrador cuidadoso puede resolver. Otras requieren experiencia forense, acceso al servidor y criterio para separar c\u00f3digo leg\u00edtimo de veneno elegante. Busca ayuda profesional si:<\/p>\n<ul>\n<li>El sitio procesa pagos, datos personales sensibles o informaci\u00f3n m\u00e9dica\/legal.<\/li>\n<li>Hay phishing o robo de credenciales.<\/li>\n<li>La infecci\u00f3n vuelve despu\u00e9s de limpiar.<\/li>\n<li>No tienes backups confiables.<\/li>\n<li>El hosting amenaza con suspender la cuenta.<\/li>\n<li>Hay varios sitios afectados en el mismo servidor.<\/li>\n<li>No sabes interpretar logs, permisos o consultas SQL.<\/li>\n<\/ul>\n<p>Adem\u00e1s, si manejas datos personales, revisa tus obligaciones legales. Dependiendo del pa\u00eds y del tipo de datos, podr\u00edas tener deberes de notificaci\u00f3n ante usuarios o autoridades. La seguridad web no vive aislada en el s\u00f3tano t\u00e9cnico; toca reputaci\u00f3n, contratos, privacidad y confianza.<\/p>\n<h2>15. Gu\u00eda r\u00e1pida de comandos \u00fatiles \u2699\ufe0f<\/h2>\n<p>Estos comandos no sustituyen una auditor\u00eda, pero ayudan a orientarse. Ejec\u00fatalos solo si tienes permisos y sabes revertir cambios.<\/p>\n<pre><code># Ver versi\u00f3n de WordPress\nwp core version\n\n# Verificar integridad del n\u00facleo\nwp core verify-checksums\n\n# Reinstalar core limpio\nwp core update --force\n\n# Listar plugins con versi\u00f3n y actualizaci\u00f3n disponible\nwp plugin list --fields=name,status,version,update\n\n# Listar temas\nwp theme list --fields=name,status,version,update\n\n# Listar administradores\nwp user list --role=administrator\n\n# Exportar base de datos\nwp db export respaldo.sql\n\n# Revisar cron de WordPress\nwp cron event list\n\n# Regenerar salts y cerrar sesiones\nwp config shuffle-salts\n\n# Buscar archivos modificados recientemente\nfind . -type f -mtime -14 -ls\n\n# Buscar PHP dentro de uploads\nfind wp-content\/uploads -type f \\( -name \"*.php\" -o -name \"*.phtml\" -o -name \"*.phar\" \\) -print<\/code><\/pre>\n<h2>16. Un plan de recuperaci\u00f3n en 24 horas \u23f1\ufe0f<\/h2>\n<p>Si necesitas actuar con rapidez, este orden suele funcionar bien:<\/p>\n<table>\n<thead>\n<tr>\n<th>Tiempo<\/th>\n<th>Acciones recomendadas<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Primeras 2 horas<\/td>\n<td>Contener sitio, avisar al hosting, crear respaldo infectado, pausar campa\u00f1as, revisar alertas de Search Console.<\/td>\n<\/tr>\n<tr>\n<td>Horas 2 a 6<\/td>\n<td>Verificar core, detectar archivos modificados, limpiar uploads, revisar <code>.htaccess<\/code>, <code>wp-config.php<\/code> y plugins vulnerables.<\/td>\n<\/tr>\n<tr>\n<td>Horas 6 a 12<\/td>\n<td>Reinstalar core, plugins y temas limpios; eliminar extensiones sospechosas; revisar base de datos y usuarios.<\/td>\n<\/tr>\n<tr>\n<td>Horas 12 a 18<\/td>\n<td>Cambiar credenciales, salts, permisos, cron jobs, configuraciones ocultas y cach\u00e9s.<\/td>\n<\/tr>\n<tr>\n<td>Horas 18 a 24<\/td>\n<td>Escaneo m\u00faltiple, pruebas manuales, monitoreo de logs, solicitud de revisi\u00f3n a Google si corresponde, documentaci\u00f3n del incidente.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>17. Despu\u00e9s de la limpieza: documenta lo ocurrido \ud83d\udcda<\/h2>\n<p>Documentar no es burocracia; es memoria operativa. Anota:<\/p>\n<ul>\n<li>Fecha aproximada de inicio de la infecci\u00f3n.<\/li>\n<li>Archivos y tablas afectadas.<\/li>\n<li>Vulnerabilidad o vector probable.<\/li>\n<li>Credenciales cambiadas.<\/li>\n<li>Plugins eliminados o reemplazados.<\/li>\n<li>Medidas de endurecimiento aplicadas.<\/li>\n<li>Esc\u00e1neres usados y resultados.<\/li>\n<\/ul>\n<p>Dentro de seis meses, cuando alguien pregunte \u201c\u00bfpor qu\u00e9 dejamos de usar aquel plugin tan c\u00f3modo?\u201d, agradecer\u00e1s tener una respuesta distinta a \u201cme suena que pas\u00f3 algo\u201d.<\/p>\n<h2>Resumen pr\u00e1ctico para propietarios de sitios WordPress \ud83e\udde0<\/h2>\n<p>Para limpiar un sitio WordPress infectado con malware, primero debes contener el incidente, crear una copia de seguridad del estado infectado, analizar archivos y base de datos, reinstalar el n\u00facleo desde fuentes oficiales, eliminar plugins y temas vulnerables o pirata, revisar usuarios administradores, cambiar todas las credenciales, corregir permisos, bloquear ejecuci\u00f3n PHP en uploads, limpiar cach\u00e9s, escanear nuevamente y solicitar revisi\u00f3n en Google Search Console si el dominio fue marcado. La clave no es solo eliminar el malware visible, sino cerrar el vector de entrada para evitar reinfecciones.<\/p>\n<h2>Un cierre necesario: limpiar es recuperar confianza \ud83c\udf31<\/h2>\n<p>Un WordPress hackeado duele porque rompe una ilusi\u00f3n b\u00e1sica: la de que nuestro sitio, ese peque\u00f1o territorio de marca, ventas, ideas o comunidad, estaba bajo control. Pero una infecci\u00f3n tambi\u00e9n puede ser una auditor\u00eda brutal y \u00fatil. Muestra contrase\u00f1as d\u00e9biles, plugins olvidados, backups teatrales, permisos excesivos y dependencias que nadie revisaba.<\/p>\n<p>La web moderna vive en esa tensi\u00f3n: apertura y riesgo, velocidad y fragilidad, abundancia de herramientas y exceso de descuido. WordPress puede ser una casa luminosa o un pasillo lleno de puertas sin llave. La diferencia no est\u00e1 en un plugin milagroso, sino en m\u00e9todo, mantenimiento y vigilancia.<\/p>\n<p>Limpiar malware es apagar un incendio; endurecer el sitio es revisar la instalaci\u00f3n el\u00e9ctrica. Lo primero salva el d\u00eda. Lo segundo salva el futuro.<\/p>\n<\/section>\n<section>\n<p>\ud83d\udee1\ufe0f Mant\u00e9n WordPress actualizado, reduce extensiones innecesarias, usa copias externas, activa 2FA y revisa tus logs. La seguridad no es un producto que se instala: es una costumbre que se practica.<\/p>\n<\/section>\n<\/article>\n<p><\/main><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Seguridad WordPress \u00b7 Malware \u00b7 Recuperaci\u00f3n \u00bfC\u00f3mo limpiar un sitio WordPress infectado con malware paso<\/p>\n","protected":false},"author":1,"featured_media":3636,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[],"_seopress_pro_schemas_manual":[],"_seopress_pro_rich_snippets_disable_all":"","_seopress_pro_rich_snippets_disable":[],"_seopress_pro_schemas":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-3637","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mantenimiento"],"_links":{"self":[{"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts\/3637","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/comments?post=3637"}],"version-history":[{"count":1,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts\/3637\/revisions"}],"predecessor-version":[{"id":3638,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts\/3637\/revisions\/3638"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/media\/3636"}],"wp:attachment":[{"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/media?parent=3637"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/categories?post=3637"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/tags?post=3637"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}