Para eliminar malware de un sitio web necesitas identificar los archivos infectados, limpiarlos o reemplazarlos con versiones limpias, y cerrar la vulnerabilidad que permitió la entrada. Saltarte cualquiera de esos tres pasos garantiza una reinfección.
Esta guía cubre el proceso completo: desde el primer diagnóstico hasta la verificación final, con pasos aplicables a WordPress y a sitios PHP genéricos alojados en cPanel.
1. Confirma la infección antes de actuar
Antes de tocar cualquier archivo, recopila evidencia. Actuar a ciegas puede hacer que borres archivos legítimos o que no elimines todo el malware.
Señales comunes de infección:
- Google Search Console muestra avisos de "sitio engañoso" o "software dañino".
- El navegador redirige a páginas de spam o publicidad.
- Tu hosting suspendió la cuenta por envío masivo de correos.
- Aparecen archivos PHP desconocidos en carpetas de imágenes o uploads.
- El código fuente del sitio contiene iframes ocultos o scripts externos sospechosos.
Herramientas gratuitas de diagnóstico externo:
- Google Safe Browsing:
https://transparencyreport.google.com/safe-browsing/search?url=tudominio.com - Sucuri SiteCheck: escáner de malware en línea, gratuito.
- VirusTotal: para analizar URLs y archivos individuales.
2. Pon el sitio en mantenimiento y haz una copia de seguridad
Antes de cualquier modificación, activa una página de mantenimiento para que los visitantes no vean contenido infectado. Luego crea un respaldo completo de la versión infectada: lo necesitarás para comparar y para no perder datos de la base de datos.
Desde cPanel:
- Entra a Archivos > Administrador de archivos.
- Comprime la carpeta
public_htmlcompleta. - Descarga el archivo ZIP a tu máquina local.
- Haz también un respaldo de la base de datos desde phpMyAdmin > Exportar.
Si tu plan incluye respaldos automáticos, descarga también la copia más reciente previa a la infección — pero no la restaures todavía, porque puede estar comprometida si el malware lleva días activo.
3. Escanea los archivos en busca de código malicioso
Este es el paso más técnico. El objetivo es encontrar todos los archivos modificados o añadidos por el atacante.
Opción A: escáner desde cPanel (ImunifyAV / Maldet)
Muchos hostings incluyen ImunifyAV. Desde cPanel busca Imunify360 o ImunifyAV, lanza un escaneo completo y revisa el reporte. Marca los archivos como limpios solo si los confirmas tú mismo.
Opción B: búsqueda manual por patrones sospechosos
Conéctate por SSH y usa grep para localizar código obfuscado frecuente en malware PHP:
# Funciones de ejecución dinámica comunes en backdoors
grep -rl "eval(base64_decode" public_html/
grep -rl "eval(gzinflate" public_html/
grep -rl "eval(str_rot13" public_html/
# Carga de archivos remotos
grep -rl "file_get_contents(\"http" public_html/
grep -rl "curl_exec" public_html/
# Shells web típicos
grep -rl "FilesMan" public_html/
grep -rl "c99shell\|r57shell\|webshell" public_html/
Guarda el listado de archivos sospechosos antes de modificar nada.
Opción C: compara fechas de modificación
Los archivos infectados suelen tener fechas de modificación fuera del patrón normal de tu sitio.
# Archivos PHP modificados en los últimos 7 días
find public_html/ -name "*.php" -newer public_html/index.php -mtime -7
Revisa cada resultado con un editor de texto para decidir si el código es legítimo o malicioso.
4. Limpia o reemplaza los archivos infectados
Hay dos estrategias según el tipo de archivo:
| Tipo de archivo | Acción recomendada |
|---|---|
| Archivos core de WordPress (wp-includes, wp-admin) | Reemplaza completamente con la versión oficial descargada de wordpress.org |
| Plugins y temas oficiales | Reinstala desde el repositorio de WordPress o del proveedor original |
| Archivos de tu tema hijo o código personalizado | Edita manualmente y elimina solo el bloque de código malicioso |
| Archivos desconocidos sin función legítima (shells) | Elimínalos directamente |
| Archivos de configuración (.htaccess, wp-config.php) | Compara con una versión limpia conocida y borra las líneas añadidas |
Para WordPress, el proceso de reemplazo de core es rápido:
- Descarga la versión exacta de WordPress que usas desde wordpress.org/download/releases/.
- Sube y descomprime en el servidor.
- Copia los archivos de
wp-includesywp-adminencima de los existentes. No toqueswp-config.phpniwp-content.
5. Limpia la base de datos
El malware a menudo inyecta código en la base de datos: posts, opciones del sitio, widgets, e incluso cuentas de usuario. Accede a phpMyAdmin y busca patrones como estos en las tablas principales:
SELECT * FROM wp_options WHERE option_value LIKE '%eval(base64%';
SELECT * FROM wp_posts WHERE post_content LIKE '%
Si encuentras posts con scripts incrustados, edítalos y elimina el bloque malicioso. Si encuentras usuarios administradores que no reconoces, elimínalos inmediatamente.
Revisa también la tabla wp_options en los campos siteurl y home: el malware a veces cambia estos valores para redirigir el tráfico.
6. Cierra la vulnerabilidad original
La limpieza sin cerrar la puerta de entrada es trabajo perdido. Las vías de entrada más comunes son:
- Plugin o tema desactualizado con vulnerabilidad conocida. Actualiza todo inmediatamente o desinstala lo que no uses.
- Contraseña débil o reutilizada. Cambia todas las contraseñas: WordPress admin, cPanel, base de datos, FTP.
- Permisos de archivo incorrectos. Los archivos PHP deben ser 644, las carpetas 755. Nunca 777.
- Tema o plugin nulled (pirateado). Elimínalos. Incluyen backdoors deliberadas.
- Versión antigua de PHP. PHP 7.4 o inferior ya no recibe parches de seguridad. Migra a PHP 8.2+.
# Corregir permisos en masa
find public_html/ -type d -exec chmod 755 {} \;
find public_html/ -type f -name "*.php" -exec chmod 644 {} \;
7. Verifica y solicita revisión a Google
Una vez limpio, escanea de nuevo con Sucuri SiteCheck para confirmar que no queda malware. Luego:
- En Google Search Console, ve a Seguridad y Acciones Manuales > Problemas de seguridad.
- Revisa el detalle de los archivos marcados.
- Haz clic en Solicitar revisión y describe los pasos que tomaste.
- Google suele responder en 1-3 días hábiles; mientras tanto el aviso permanece activo.
Si tu hosting suspendió la cuenta, contacta al soporte con el reporte de limpieza para que reactiven el servicio.
Para protección continua, considera contratar un servicio de seguridad web profesional que monitoree y limpie infecciones de forma recurrente, especialmente si manejas datos de clientes o procesas pagos.
Conclusiones clave
- Confirma la infección con herramientas externas antes de actuar.
- Siempre haz respaldo de la versión infectada como punto de referencia.
- Escanea con grep y por fechas de modificación, no solo con plugins.
- Reemplaza los archivos core de WordPress con la versión oficial en vez de editarlos.
- Revisa también la base de datos: scripts en posts y usuarios no autorizados.
- Cierra la vulnerabilidad original; sin ese paso, la reinfección es cuestión de horas.
- Solicita revisión a Google Search Console para levantar el aviso de seguridad.
Si el proceso te resulta demasiado técnico o el sitio está gravemente comprometido, en elenlace.com ofrecemos servicio de limpieza y recuperación de sitios hackeados con garantía de reinfección. Escríbenos y resolvemos el problema hoy mismo. También puedes explorar más recursos en nuestra sección de seguridad web.
Preguntas frecuentes
¿Puedo simplemente restaurar un backup y listo?
Solo si el backup es anterior a la infección y también cierras la vulnerabilidad que permitió el acceso. Si no cierras la brecha, el atacante volverá a infectar el sitio con el mismo método en horas o días.
¿Cuánto tiempo tarda Google en quitar el aviso de "sitio peligroso"?
Tras solicitar revisión en Search Console, Google normalmente responde en 1 a 3 días hábiles para sitios pequeños. El aviso en Chrome desaparece una vez que Google confirma la limpieza.
¿Los plugins de seguridad como Wordfence son suficientes para limpiar el malware?
Los plugins ayudan a detectar y en algunos casos limpiar infecciones, pero no son infalibles: no ven malware en la base de datos igual de bien, y algunos backdoors están diseñados para evadir escaneos. Úsalos como capa adicional, no como único método.
¿Por qué encuentro archivos PHP en carpetas de imágenes?
Es una señal clásica de una shell web subida por el atacante. Los directorios de uploads suelen tener permisos de escritura, y si el servidor no bloquea la ejecución de PHP en esas carpetas, el atacante aprovecha eso. Elimina esos archivos y añade un .htaccess en la carpeta de uploads que prohíba la ejecución de PHP.
Compara proveedores
Otros proveedores y guías que vale la pena comparar: