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
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
- Actualiza todo — Núcleo, complementos, temas, PHP.
- Quita lo que no uses — Un complemento desactivado sigue siendo un archivo en el disco al que se puede llegar.
- Impide que las subidas se ejecuten — Nada de manejador de PHP en el directorio de subidas.
- Verificación en dos pasos en el panel y en el CMS —