En este artículo, hablaremos sobre los tipos más comunes de hackeos en WordPress, cómo identificarlos y los diferentes métodos para solucionarlos. Si te encuentras con este tipo de problema, te recomendamos encarecidamente contactar a un desarrollador web profesional para obtener más ayuda. Para obtener orientación adicional sobre cómo mejorar la seguridad de tu cuenta de hosting, consulta esta guía.
IMPORTANTE: Antes de realizar cualquier cambio, crea una copia de seguridad completa de tu sitio web.
NOTA: Para reducir el riesgo de futuros hackeos en WordPress, escanea regularmente tu cuenta de hosting con una herramienta antivirus, elimina cualquier archivo malicioso o sospechoso y mantén todos los plugins y temas de tu sitio web actualizados a sus últimas versiones.
Si bien varios problemas diferentes pueden provocar la falta o alteración de archivos predeterminados, la causa más común es el malware inyectado en tu instalación de WordPress. Afortunadamente, las herramientas antivirus en nuestros servidores Web y de Hosting pueden detectar y poner en cuarentena automáticamente los archivos comprometidos.
Si los archivos principales de WordPress se infectan, puedes experimentar síntomas como:
Una página en blanco;
Un error 500 Internal Server Error;
Un “Este sitio está experimentando problemas técnicos” (introducido en WordPress 5.2.2);
U otros errores similares.
Para solucionar este problema, simplemente sigue los pasos que se indican a continuación.
Para identificar qué causó el problema en tu sitio, revisa el archivo error_log. Este archivo registra cualquier error crítico que encuentre tu sitio web.
Puedes encontrarlo en tu cuenta de cPanel > el menú “Administrador de archivos” > el directorio raíz de tu instalación de WordPress.
Una vez que accedas a la carpeta raíz del dominio, busca el archivo error_log. Si existe, sigue estos pasos:
Haz clic derecho en el archivo y selecciona Ver:

Dentro del registro, puedes ver un error como: “No such file or directory in…”, seguido de la ruta del archivo faltante. Esto indica que falta un archivo requerido y está impidiendo que el sitio web funcione correctamente.
Por ejemplo:/home/cPuser/public_html/wp-settings.php

Para restaurar el archivo faltante, desplázate hacia la sección "Cómo reemplazar los archivos faltantes" de esta guía.
Si el archivo error_log no está disponible en el directorio raíz de tu sitio web, puedes habilitar la opción de PHP display_errors en tu cuenta de cPanel. Esta configuración permite que los mensajes de error aparezcan directamente en tu sitio web, facilitando la identificación del problema.
Importante: Por razones de seguridad, asegúrate de deshabilitar display_errors una vez que termines de solucionar el problema.
Puedes habilitar la opción de PHP de las siguientes maneras:
Vía php.ini
Además del menú “PHP Tweaks” de cPanel, también puedes ajustar ciertas configuraciones de un sitio web directamente a través de un archivo php.ini agregando o editando las líneas correspondientes allí.
Para habilitar la opción display_errors, deberás agregar la siguiente línea al archivo: display_errors=1
Puedes crear un nuevo archivo php.ini en la carpeta raíz del sitio web y agregar la línea allí o modificar el archivo generado por el sistema siguiendo los pasos a continuación.
Inicia sesión en tu cuenta de cPanel y ve al menú “Administrador de archivos”.
Asegúrate de que la opción “Mostrar archivos ocultos (dotfiles)” esté habilitada en la configuración:

Navega al siguiente directorio: /home/cPanel_user/.system-php/ini

Selecciona la versión de PHP asignada a tu dominio y luego selecciona el directorio del dominio. Por ejemplo, la ruta completa puede ser:
/home/cPanel_user/.system-php/ini/7.0/testwebsite.com
Haz clic derecho en el archivo php.ini y selecciona Editar.
Agrega la siguiente línea al archivo: display_errors=1
Vía .htaccess
Para habilitar la opción display_errors de PHP mediante el archivo .htaccess, deberás editar el archivo dentro del directorio raíz del sitio web en el “Administrador de archivos” y agregar la siguiente línea allí:php_value display_errors 1
Los pasos detallados para localizar el archivo .htaccess se encuentran en este artículo.
Después de realizar los cambios, haz clic en Guardar.
WordPress utiliza una estructura de archivos simple y organizada, lo que hace que restaurar archivos faltantes o dañados sea relativamente fácil. Se recomienda encarecidamente reemplazar los archivos principales predeterminados, ya que garantiza que cualquier archivo comprometido por malware sea completamente restaurado. Sin embargo, procede con precaución: reemplazar ciertos archivos o carpetas puede resultar en pérdida de datos si no se hace correctamente.
Sigue los pasos a continuación para reemplazar archivos faltantes de WordPress:
Inicia sesión en tu cPanel y ve a Softaculous Apps Installer.
Crea una nueva instalación de WordPress en un subdirectorio temporal. Para hacerlo, haz clic en el ícono de WordPress y luego selecciona Instalar:

Serás redirigido a la página de configuración de la instalación. Allí, selecciona el nombre de dominio en cuestión del menú desplegable e ingresa el nombre de una subcarpeta en el campo En el directorio.
En este ejemplo, usamos la subcarpeta ” fix” para la instalación de WordPress:

NOTA: Reemplazar todos los archivos predeterminados actualizará tu instalación existente a la versión utilizada en la instalación temporal “fix”, y mezclar archivos de diferentes versiones puede causar conflictos en el sistema y afectar la funcionalidad del sitio.
Si es importante mantener tu versión actual de WordPress, o si planeas reemplazar solo archivos específicos, revisa la versión de tu sitio dentro del archivo /wp-includes/version.php y asegúrate de que la nueva instalación use la misma versión de WordPress:

Puedes elegir la versión de WordPress para la nueva instalación directamente en la ventana de instalación:

Una vez que todas las configuraciones estén listas, haz clic en Instalación rápida o desplázate hasta la parte inferior de la página de instalación y haz clic en Instalar.
Después de que se complete la nueva instalación de WordPress, sus archivos aparecerán en “Administrador de archivos” > el directorio raíz de tu dominio. Abre la carpeta haciendo doble clic en ella:

Para reemplazar un archivo faltante específico (por ejemplo, wp-settings.php), localiza ese archivo dentro del directorio de la nueva instalación.
Después de esto, mueve el archivo al directorio raíz actual de tu sitio web haciendo clic derecho sobre el archivo > haz clic en Mover > ingresa la ruta a la carpeta raíz de tu sitio web > haz clic en Mover archivo(s):

Una vez completado, el archivo faltante ha sido restaurado y tu sitio web debería cargar correctamente.
En el proceso de reemplazar todos los archivos predeterminados de WordPress para un sitio web, los pasos 1-6 son los mismos que en la sección “Cómo reemplazar archivos faltantes de WordPress”.
Después de completar estos pasos y crear la nueva instalación de WordPress, para reemplazar todos los archivos predeterminados en la carpeta raíz de tu sitio web, sigue estos pasos:
Abre la carpeta raíz de la nueva instalación de WordPress:

Dentro de la nueva carpeta de instalación, elimina los siguientes archivos y carpetas:

.htaccess
wp-config.php
wp-content
Estos archivos y carpetas contienen la configuración y el contenido de tu sitio, y deben permanecer sin cambios.
Luego, mueve los archivos restantes al directorio raíz de tu sitio principal. Para esto, usa el botón Seleccionar todo > haz clic en Mover > ingresa la ruta a la carpeta raíz de tu sitio > haz clic en Mover archivo(s):

Tus archivos principales de WordPress han sido completamente reemplazados. Visita tu sitio web para confirmar que todo cargue correctamente.
Si el sitio aún muestra errores, revisa nuevamente el error_log. En la mayoría de los casos, los problemas adicionales son causados por archivos de temas o plugins faltantes.
La falta de archivos de temas o plugins puede ocurrir por varias razones, pero la causa más común es el malware que infecta y elimina componentes esenciales de tu instalación de WordPress.
Si falta algún archivo de plugin o tema de WordPress, puedes experimentar:
Una página en blanco;
Un error 500 Internal Server Error;
Un “Este sitio está experimentando problemas técnicos” (introducido en WordPress 5.2.2);
Una página parcialmente cargada o visualmente “rota”.
Para obtener ayuda con el diagnóstico del problema, consulta las siguientes secciones de este artículo: Revisa el archivo error_log de tu sitio web y Habilita la opción display_errors de PHP.
Puedes ver mensajes de error similares a los siguientes en tu error_log o directamente en el sitio web:
PHP Fatal error: Uncaught Error: Call to undefined function sample_function() in /home/cPaneluser/...
A continuación se muestra un ejemplo de un error causado por un archivo de plugin dañado o faltante:

Para restaurar el archivo faltante, simplemente reinstala el tema o plugin afectado.
NOTA: Los archivos functions.php faltantes en los temas suelen estar relacionados con el malware wp-vcd.php, que normalmente se encuentra en el directorio /wp-includes. Antes de instalar un tema nuevo, elimina wp-vcd.php si existe, o, si quieres garantizar la seguridad total, reemplaza todos los archivos predeterminados de WordPress como se describe anteriormente.
En algunos casos, cuando tu sitio web se infecta con malware, puede comenzar a redirigir a los visitantes a páginas dañinas o sospechosas. Este problema suele ser causado por un plugin o tema inseguro, que permite a los atacantes alterar las URLs de la base de datos o modificar los archivos de tu sitio web.
NOTA: Nunca hagas clic en ninguno de los enlaces redirigidos. Hacerlo puede infectar tu computadora personal con malware:

Para solucionar las redirecciones maliciosas, sigue los pasos a continuación:
Ubica un archivo de configuración de base de datos de tu sitio web - wp-config.php en tu cPanel > Administrador de archivos > la carpeta raíz del sitio web. Abre el archivo y encuentra el nombre de la base de datos del sitio web allí:

Luego, abre la base de datos asignada a tu sitio web en el menú phpMyAdmin de tu cPanel haciendo clic en él, y navega a la tabla wp_options (“wp_” es el prefijo predeterminado; el tuyo puede ser diferente):

Revisa los valores de los campos siteurl y home y, en caso de que veas URLs maliciosas o sospechosas allí, reemplázalas por el nombre real de tu dominio:

Escanea el resto de tu base de datos en busca de URLs maliciosas similares y reemplázalas según corresponda.
Reemplaza temporalmente tu archivo .htaccess actual por una versión predeterminada limpia. Es mejor renombrar el archivo existente (por ejemplo, .htaccess_old) y crear uno nuevo desde cero.
Para renombrar el archivo, haz doble clic en él > selecciona Renombrar de la lista > ingresa un nuevo nombre de archivo > y presiona Renombrar archivo.
Después de eso, para crear un archivo nuevo, haz clic en + Archivo > asígnale el nombre .htaccess > y selecciona Crear nuevo archivo.
Una vez creado el nuevo .htaccess, edítalo haciendo clic derecho sobre él > selecciona Editar de la lista. Una vez que la ventana de edición esté abierta, pega las siguientes reglas predeterminadas de WordPress en el archivo:# BEGIN WordPressRewriteEngine OnRewriteBase /RewriteRule ^index\.php$ - [L]RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule . /index.php [L]# END WordPress
Haz clic en Guardar cambios.
Si tu sitio web sigue redirigiendo, intenta reemplazar todos los archivos principales de WordPress.
También puedes desactivar temporalmente todos los plugins desde el panel de WordPress o la base de datos, e intentar habilitarlos uno por uno. Una vez que cada plugin esté habilitado, revisa el sitio web para detectar cuál causa el problema de redirección maliciosa.