Borrar los archivos que se ven es la parte que hace todo el mundo, y por sí sola fracasa: la vía de entrada sigue abierta y el sitio se reinfecta en unas horas. El orden de abajo cierra la puerta antes de limpiar la habitación.

1. Primero, sácalo de línea

Un sitio comprometido está mandando spam o sirviendo software malicioso a tus visitantes mientras trabajas. Detén eso antes que nada.

# a holding page that returns 503, so search engines come back later
# rather than dropping your pages

2. Copia todo antes de tocar nada

Haz una copia completa —archivos y base de datos— antes de borrar una sola cosa. Es una prueba: te dice cómo entraron, y sin ella estás adivinando.

3. Encuentra la vía de entrada

Casi siempre es una de cuatro. Busca en el registro de accesos la primera aparición de un archivo modificado, alrededor de su marca de tiempo.

  • Un complemento o tema sin actualizar: con diferencia el más común.
  • Una contraseña reutilizada: filtrada en otro sitio y probada aquí.
  • Un directorio de subidas que ejecuta PHP: un archivo subido como imagen y luego ejecutado.
  • Credenciales de FTP o SSH robadas, a menudo de un ordenador infectado.
find . -type f -mtime -7 -name "*.php" | head -50
grep -rl "eval(base64_decode" . | head

4. Limpia desde una copia sana, no editando

Sustituye el núcleo, los complementos y los temas por descargas nuevas. Conserva solo tu contenido y tus subidas, e inspecciónalos: un archivo PHP en una carpeta de subidas nunca es legítimo.

find wp-content/uploads -name "*.php" -o -name "*.phtml"

5. El paso que casi todo el mundo se salta

Cambia todas las credenciales que el servidor comprometido pudiera ver, e invalida todas las sesiones. Si te saltas esto, el atacante vuelve a entrar con la contraseña que ya tiene.

  • Cada cuenta de administrador del CMS.
  • El usuario de la base de datos y el archivo de configuración que lo guarda.
  • Las claves de FTP, SFTP y SSH.
  • Las claves de API y las credenciales de pago guardadas en el servidor.
  • WordPress: cambia las salts de wp-config.php, eso cierra la sesión de todos, incluidos ellos.

6. Y entonces cierra la puerta

  1. Actualiza todo — Núcleo, complementos, temas, PHP.
  2. Quita lo que no uses — Un complemento desactivado sigue siendo un archivo en el disco al que se puede llegar.
  3. Impide que las subidas se ejecuten — Nada de manejador de PHP en el directorio de subidas.
  4. Verificación en dos pasos en el panel y en el CMS
Pide a tu alojamiento el registro de accesos del día en que empezó. La petición que dejó el primer archivo está ahí, y nombra el agujero en una sola línea.