Escanear malware en WordPress con un script desde cPanel
¿Tu WordPress va lento, muestra errores extraños o tu proveedor de hosting te ha suspendido la cuenta por actividad sospechosa? Respira, no estás solo. Que tu sitio esté infectado es un problema serio, pero no es el fin del mundo.
En esta guía te voy a enseñar, paso a paso y sin tecnicismos complicados, cómo escanear malware en WordPress usando un script directamente desde cPanel. No necesitas ser un hacker ni un programador experto; solo necesitas seguir las instrucciones al pie de la letra. Vamos a ello.
¿Por qué usar un script desde cPanel?
Antes de ensuciarnos las manos, es importante que entiendas por qué esta es una de las mejores opciones para limpiar malware cPanel.
Cuando tu sitio está infectado, los plugins de seguridad a veces no funcionan porque el malware los desactiva o bloquea su ejecución. Además, si el atacante ha modificado los archivos principales, el panel de administración de WordPress puede ser inaccesible.
Usar un script desde cPanel tiene ventajas claras:
- Acceso directo al servidor: No dependes de que WordPress cargue correctamente.
- Detección profunda: Analiza todos los archivos del servidor, no solo los de la carpeta pública.
- Rapidez: Puedes ejecutar el análisis en minutos, incluso si tu sitio es grande.
- Control total: Ves exactamente qué archivos están comprometidos y puedes decidir qué hacer con ellos.
Preparación: Antes de ejecutar el escáner
La impaciencia es mala consejera. Antes de lanzar el script, necesitas tener a mano cierta información y tomar algunas precauciones. Esto evitará que el problema empeore.
1. Haz una copia de seguridad completa
Este paso no es negociable. Un script de escaneo puede detectar archivos maliciosos y, si decides eliminarlos, podrías borrar algo importante por error. Además, si el script modifica archivos para limpiarlos, necesitas un punto de restauración.
Ve a tu cPanel y busca la sección de Archivos o Backup. Descarga una copia completa de tu public_html (o la carpeta donde esté instalado WordPress) y también una copia de tu base de datos. Guárdala en tu ordenador o en un servicio de almacenamiento en la nube.
[WARNING] No subas la copia de seguridad a la misma cuenta de hosting. Si el servidor está comprometido, el atacante podría acceder a ella. Guárdala localmente.
2. Identifica la ruta exacta de tu WordPress
Necesitas saber dónde está instalado tu WordPress. Normalmente es en public_html, pero si tienes un sitio multsitio o lo instalaste en una subcarpeta (como /blog o /tienda), la ruta cambiará.
Dentro de cPanel, abre el Administrador de Archivos y navega hasta public_html. Si ves archivos como wp-config.php, wp-login.php y carpetas como wp-content, ese es el lugar correcto.
3. Ten a mano tus credenciales FTP o de cPanel
El script necesitará permisos para leer y, en algunos casos, modificar archivos. Asegúrate de tener tu usuario y contraseña de cPanel a mano. No te preocupes, no usaremos FTP, solo el panel.
El método: Crear y ejecutar el script de escaneo
Ahora sí, vamos a la acción. Existen varios scripts, pero el más popular y fiable para esta tarea se llama "Linux Malware Detect" (LMD) o un script casero en PHP. Para que sea sencillo y no dependa de compilaciones, usaremos un script en PHP que puedes crear tú mismo en un bloc de notas.
Paso 1: Crear el archivo del script
Abre un editor de texto plano en tu ordenador (como el Bloc de Notas de Windows, TextEdit en Mac, o Notepad++). No uses Word ni programas de procesamiento de texto.
Copia y pega el siguiente código. No te asustes, es una versión simplificada pero muy efectiva:
<?php
// Escáner de malware básico para WordPress
// Instrucciones: Sube este archivo a la raíz de tu WordPress y ejecútalo desde el navegador.
set_time_limit(0);
error_reporting(E_ALL);
$directorio = __DIR__;
$resultados = array();
$patronesMaliciosos = array(
'/eval\s*\(\s*base64_decode\s*\(/i',
'/gzinflate\s*\(/i',
'/str_rot13\s*\(/i',
'/shell_exec\s*\(/i',
'/passthru\s*\(/i',
'/system\s*\(/i',
'/exec\s*\(/i',
'/popen\s*\(/i',
'/proc_open\s*\(/i',
'/base64_decode\s*\(\s*["\']/i',
'/\bassert\s*\(/i',
'/\bcreate_function\s*\(/i',
'/FilesMan/i',
'/c99shell/i',
'/r57shell/i',
'/phpspy/i',
'/webshell/i'
);
echo "<h2>Escaneando directorio: " . $directorio . "</h2>";
echo "<p>Este proceso puede tardar unos minutos...</p>";
echo "<pre>";
function escanearDirectorio($dir, &$resultados, $patrones) {
$archivos = scandir($dir);
foreach ($archivos as $archivo) {
if ($archivo == '.' || $archivo == '..') continue;
$rutaCompleta = $dir . '/' . $archivo;
if (is_dir($rutaCompleta)) {
// Omitir carpetas que no deberían tener archivos ejecutables
if ($archivo == 'uploads' || $archivo == 'cache' || $archivo == 'tmp') {
// Aún así, escanea dentro por si acaso
}
escanearDirectorio($rutaCompleta, $resultados, $patrones);
} else {
// Solo escanear archivos de texto/código
$extension = pathinfo($archivo, PATHINFO_EXTENSION);
if (in_array($extension, ['php', 'phtml', 'php3', 'php4', 'php5', 'php7', 'phps', 'pht', 'html', 'htm', 'js', 'txt'])) {
$contenido = @file_get_contents($rutaCompleta);
if ($contenido !== false) {
foreach ($patrones as $patron) {
if (preg_match($patron, $contenido)) {
$resultados[] = $rutaCompleta . " (Patrón: " . $patron . ")";
break; // Solo reportar una vez por archivo
}
}
}
}
}
}
}
escanearDirectorio($directorio, $resultados, $patronesMaliciosos);
if (empty($resultados)) {
echo "✅ ¡Enhorabuena! No se encontraron patrones maliciosos comunes.\n";
} else {
echo "❌ Se encontraron " . count($resultados) . " archivos potencialmente peligrosos:\n\n";
foreach ($resultados as $resultado) {
echo $resultado . "\n";
}
}
echo "\n\nEscaneo completado.\n";
echo "</pre>";
// Limpiar: Opcional, descomenta para eliminar archivos sospechosos (¡CUIDADO!)
// echo "<p>Para eliminar los archivos encontrados, añade ?clean=1 a la URL.</p>";
// if (isset($_GET['clean']) && $_GET['clean'] == '1') {
// foreach ($resultados as $archivo) {
// $ruta = explode(" (", $archivo)[0];
// if (unlink($ruta)) {
// echo "Eliminado: " . $ruta . "\n";
// } else {
// echo "Error al eliminar: " . $ruta . "\n";
// }
// }
// }
?>
Guarda este archivo con un nombre que no sea obvio, por ejemplo, sistema_seguridad_2024.php. Evita nombres como scan.php o malware.php porque los atacantes los buscan.
Paso 2: Subir el archivo a tu servidor
- Entra a tu cPanel.
- Ve al Administrador de Archivos.
- Navega hasta la carpeta raíz de tu WordPress (normalmente
public_html). - Haz clic en Cargar en la barra de herramientas superior.
- Selecciona el archivo
sistema_seguridad_2024.phpque acabas de crear. - Espera a que termine la subida.
[TIP] Si tu WordPress está en una subcarpeta, sube el script a esa subcarpeta.
Paso 3: Ejecutar el escáner
Ahora viene la parte emocionante. Abre una nueva pestaña en tu navegador y escribe la URL de tu sitio seguida del nombre de tu script.
Por ejemplo: https://tudominio.com/sistema_seguridad_2024.php
Verás el script ejecutándose. Puede tardar desde unos segundos hasta varios minutos, dependiendo del tamaño de tu sitio. La pantalla se irá llenando de texto mientras escanea.
¿Qué significan los resultados?
- "No se encontraron patrones maliciosos comunes": Buenas noticias, pero no te confíes. El malware avanzado puede ocultarse. Te recomiendo ejecutar un segundo escaneo con otra herramienta.
- Una lista de archivos con "Patrón": Esto es lo que buscábamos. Cada línea te dice qué archivo tiene un código sospechoso y qué tipo de patrón se detectó.
Paso 4: Interpretar y limpiar los archivos infectados
Esto es delicado. No todos los resultados son malware real. A veces, plugins legítimos usan funciones como base64_decode para ofuscar su código (aunque no es una buena práctica).
Acciones recomendadas:
- Anota los archivos detectados.
- Descarga esos archivos a tu ordenador usando el Administrador de Archivos de cPanel.
- Ábrelos con un editor de texto (como Notepad++ o Sublime Text) que resalte la sintaxis.
- Busca la línea exacta donde está el patrón sospechoso. Si ves código codificado en
base64o funciones comoevalmezcladas con texto, es casi seguro que es malware. - Compara con una copia limpia: Si tienes una copia de seguridad anterior a la infección, compara los archivos. Si el archivo infectado tiene contenido extra que no estaba antes, ese es el malware.
Para limpiar:
- Opción A (Segura): Reemplaza el archivo infectado por la versión limpia de tu copia de seguridad.
- Opción B (Manual): Edita el archivo y elimina las líneas de código malicioso. Esto es más arriesgado si no sabes qué estás haciendo.
- Opción C (Automática): Descomenta la parte del script que elimina archivos (añadiendo
?clean=1a la URL). Úsalo solo si estás 100% seguro de que los archivos son malware, porque los borrará permanentemente.
[WARNING] Eliminar archivos de WordPress sin saber lo que haces puede romper tu sitio. Si no estás seguro, contacta con tu proveedor de hosting o con un profesional. Es mejor pagar por una limpieza que perder todo tu contenido.
Después de la limpieza: Pasos obligatorios
Limpiar los archivos es solo la mitad de la batalla. Si no refuerzas la seguridad, te volverán a infectar en menos de una semana.
1. Cambia todas tus contraseñas
- cPanel / Hosting: Cámbiala desde el panel.
- Base de datos MySQL: Cámbiala desde cPanel (sección Bases de Datos MySQL).
- WordPress (admin): Si puedes acceder, cambia la contraseña. Si no puedes, cámbiala desde la base de datos usando phpMyAdmin.
- FTP: Si usas FTP, cambia esa contraseña también.
2. Actualiza todo
- WordPress: Ve a
Dashboard > Actualizaciones. - Plugins y temas: Actualiza todos los que tengan versiones nuevas. Los plugins desactualizados son la puerta de entrada número uno para el malware.
3. Elimina el script de escaneo
Una vez que hayas terminado, borra el archivo sistema_seguridad_2024.php de tu servidor. Dejarlo ahí es un riesgo de seguridad, ya que cualquier persona podría ejecutarlo y ver la estructura de tu web.
4. Instala un plugin de seguridad
Para prevenir futuras infecciones, instala un buen plugin de seguridad como Wordfence, Sucuri o iThemes Security. Te avisarán de intentos de acceso, cambios en archivos y te permitirán hacer escaneos periódicos.
Preguntas frecuentes (FAQ) sobre malware en WordPress
¿Cómo sé si mi WordPress está infectado?
Los síntomas más comunes son: el sitio se redirige a páginas de spam, aparece publicidad extraña, el sitio va muy lento, aparecen usuarios nuevos en tu panel de administración, o Google te muestra un aviso de "Sitio engañoso".
¿Puedo limpiar malware cPanel sin experiencia técnica?
Sí, siguiendo esta guía, pero con precaución. Si el malware es complejo o no te sientes seguro, es mejor contratar un servicio de limpieza profesional. Muchos hosts ofrecen este servicio de forma gratuita o por un coste reducido.
¿Qué pasa si el script no encuentra nada pero el sitio sigue dando problemas?
El malware puede estar en la base de datos, no en los archivos. También puede estar oculto en archivos de imagen o en el .htaccess. En ese caso, necesitas herramientas más avanzadas o la ayuda de un especialista.
¿El escaneo desde cPanel afecta al rendimiento de mi sitio?
Sí, temporalmente. El escaneo consume recursos del servidor. Es recomendable hacerlo en horas de bajo tráfico, como de madrugada.
¿Por qué se infecta mi WordPress?
Las razones más comunes son: plugins o temas desactualizados, contraseñas débiles, no usar autenticación de dos factores, y descargar plugins/temas de fuentes no oficiales (nulled).
Mi hosting usa Syspanel, ¿es lo mismo que cPanel?
No, son paneles de control diferentes. Si tu hosting usa Syspanel (antes conocido como HestiaCP), el acceso se realiza a través del puerto 2106 (por ejemplo, https://tudominio.com:2106). La estructura de archivos y las bases de datos son similares, pero la interfaz es distinta. En Syspanel, busca la sección de "Administrador de Archivos" o "Archivos" para subir el script. El proceso de escaneo es idéntico, solo cambia la apariencia del panel.
[INFO] Si usas Syspanel, recuerda que el puerto de acceso es el 2106. No lo confundas con el puerto 2083 de cPanel.
Conclusión: La seguridad es un hábito, no un acto
Escanear malware en WordPress con un script desde cPanel es una habilidad valiosa que te puede salvar el negocio. Has aprendido a crear un escáner, interpretar sus resultados y tomar medidas para limpiar tu sitio.
Pero recuerda, esto es solo una capa de defensa. La seguridad real se construye con hábitos diarios:
- Mantén todo actualizado.
- Usa contraseñas fuertes y únicas.
- Haz copias de seguridad periódicas.
- Desconfía de plugins y temas "gratis" de sitios dudosos.
Si tu sitio ha sido infectado y has logrado limpiarlo, tómate un momento para reflexionar sobre cómo entró el atacante. ¿Fue un plugin viejo? ¿Una contraseña débil? Corrige esa vulnerabilidad para que no vuelva a ocurrir.
Espero que esta guía te haya sido de gran ayuda. Si te ha servido, compártela con otros que puedan necesitarla. Y si tienes dudas, déjalas en los comentarios (si tu web las tiene habilitadas) o consulta con tu proveedor de hosting. ¡Buena suerte y que tu WordPress esté siempre sano y seguro!
