Borras un PHP desconocido de una carpeta mensual de uploads y vuelve horas después. Su reaparición demuestra que otro proceso, cuenta o petición todavía puede escribirlo. Borrarlo repetidamente elimina el síntoma y deja activa la persistencia.
Impide su ejecución, conserva una muestra segura e identifica al escritor antes de abrir la web.
Conserva una aparición
Registra ruta completa, propietario y grupo, permisos, tamaño y hora. Calcula un hash sin ejecutar:
sha256sum /quarantine/suspicious-file.php
Trabaja sobre una copia en cuarentena fuera de la raíz. No abras su URL, lo incluyas desde PHP ni lo subas a un escáner público no autorizado.
Conserva logs web, PHP, SFTP y panel próximos a la fecha de modificación.
Confirma si PHP se ejecuta en uploads
Uploads debería guardar medios, no aplicaciones PHP públicas. Comprueba la configuración mediante documentación y archivos seguros, nunca ejecutando la muestra.
Aplica una regla compatible para impedir PHP en uploads. Apache, Nginx y distintos handlers requieren configuraciones diferentes; un .htaccess copiado puede no funcionar.
Esto solo contiene. El escritor aún podría colocar scripts en otra ruta.
Relaciona la hora con peticiones y tareas
Compara timestamp con logs, cron de WordPress, Action Scheduler, cron del hosting, copias y análisis. Considera zonas horarias y fechas alteradas por copias o restauraciones.
Busca endpoints de carga, acciones AJAX o POST extraños justo antes. Conserva metadatos sin almacenar contraseñas, cookies o archivos de clientes innecesarios.
Si no coincide con tráfico web, investiga SFTP, panel, cron u otra web comprometida.
Compara también propietario e identificador del proceso cuando el hosting los proporcione. Una escritura realizada por el usuario de PHP no demuestra qué plugin la originó, pero descarta algunas rutas externas. Una escritura con otro usuario orienta hacia tareas del sistema, despliegues o acceso al panel.
Encuentra el proceso o código padre
Busca en una copia el nombre exacto, cadena distintiva o código que escriba en uploads. Revisa plugins desconocidos, mu-plugins, tema y wp-config.php.
Inspecciona opciones y callbacks programados que contengan código. No decodifiques ni ejecutes payloads en producción.
Si existe auditoría de archivos, configúrala de manera estrecha y temporal. La vigilancia recursiva amplia puede cargar el servidor y registrar datos sensibles.
Registra únicamente creación, ruta, usuario, proceso y hora. No copies el contenido de todos los uploads al log. Detén la auditoría después de capturar el evento y conserva su configuración para que el proveedor pueda interpretar correctamente el resultado.
Revisa vulnerabilidades de carga
Identifica plugins y formularios que aceptan archivos. Confirma extensión, MIME, permisos y mantenimiento de cada componente.
No confíes en restricciones del navegador. Las funciones personalizadas necesitan validación de servidor y almacenamiento no ejecutable.
Parchea o desactiva el componente después de conservar versión y logs. Elimina formularios abandonados, no los escondas.
Comprueba los accesos de toda la cuenta
Revisa administradores, contraseñas de aplicación, FTP, SFTP, sesiones del hosting y cron. Rota credenciales después de asegurar dispositivos y despliegues.
Inspecciona todas las webs de la cuenta. Una instalación vecina comprometida puede escribir en otra raíz si los permisos lo permiten.
Corrige propietario y aislamiento, no concedas permisos mundiales para que funcionen actualizaciones.
Limpia y demuestra que no reaparece
Elimina archivos confirmados, sustituye paquetes fiables, limpia persistencia en base y cierra la vulnerabilidad o acceso robado.
Monitoriza el directorio durante el intervalo en que solía volver. Prueba la carga con un archivo permitido e inocuo y confirma que PHP no se ejecuta.
Un escáner verde durante un minuto no basta; observa ciclos programados y el periodo histórico de recurrencia.
Mantén una alerta sobre extensiones ejecutables y cambios de reglas dentro de uploads. La ausencia de la misma muestra no basta si el escritor empieza a usar nombres aleatorios o dobles extensiones.
Cuándo solicitar limpieza especializada
Pide ayuda urgente si los archivos vuelven, hay varias webs compartidas o los logs muestran POST o SFTP desconocidos. Envía rutas y horas con usuarios censurados, no la muestra ni credenciales.
La reparación debe explicar quién o qué escribió el archivo y demostrar que se cerraron la ejecución y la reinfección.