PHP File Upload
ID de alerta: php_upload
MITRE ATT&CK: T1505.003 – Server Software Component: Web Shell
Severidad / Criticidad
Sección titulada «Severidad / Criticidad»!!! danger “Crítica”
Cualquier archivo PHP detectado dentro del directorio uploads se considera una amenaza grave.
¿Por qué se considera maliciosa?
Sección titulada «¿Por qué se considera maliciosa?»- Web shells: permiten la ejecución remota de comandos en el servidor.
- Backdoors: otorgan acceso persistente al atacante.
- Cryptominers: uso no autorizado de los recursos del servidor.
- Spam mailers: convierten el sitio en una plataforma de envío masivo de spam.
- Exfiltración de datos: robo de información sensible.
!!! warning ""
El directorio uploads no debe contener código ejecutable bajo ninguna circunstancia.
¿Cuándo salta la alerta?
Sección titulada «¿Cuándo salta la alerta?»- Detección inmediata de extensiones sospechosas:
.php,.php3,.php4,.php5,.phtml,.phar. - Otras extensiones monitorizadas:
- Scripts:
.asp,.aspx,.jsp,.cgi,.pl,.py,.rb. - Ejecutables:
.exe,.dll,.bat,.sh,.ps1.
- Scripts:
- Análisis de contenido: búsqueda de indicadores PHP (
<?php,<?=). - Ventana de deduplicación: 30 segundos.
Indicadores Técnicos (IOCs)
Sección titulada «Indicadores Técnicos (IOCs)»| Tipo | Patrón | Descripción |
|---|---|---|
file_pattern | eval($_POST['cmd']); | Ejecución de código remoto |
file_pattern | system($_GET['command']); | Ejecución de comandos del sistema |
file_pattern | base64_decode( | Código ofuscado |
file_pattern | file_get_contents('php://input') | Lectura directa desde entrada PHP |
file_pattern | c99.php, r57.php, wso.php | Webshells conocidos |
Falsos positivos comunes
Sección titulada «Falsos positivos comunes»- Plugins legítimos mal diseñados que permiten subir archivos PHP.
- Desarrolladores subiendo código de prueba (mala práctica).
- Herramientas de migración o backup que no usan directorios temporales.
!!! warning “Atención” Incluso los “falsos positivos” representan fallos de seguridad graves que deben corregirse.
Pasos de investigación
Sección titulada «Pasos de investigación»-
No ejecutar el archivo. Examinarlo con:
Ventana de terminal strings /path/to/file.php | grep -E 'eval|exec|system|base64' -
Calcular hash MD5 y SHA256 del archivo.
-
Verificar su origen mediante timestamp y logs de acceso (usuario/IP).
-
Buscar otros shells:
Ventana de terminal find wp-content/uploads -name "*.php" -type f -
Revisar logs para detectar requests dirigidas al archivo sospechoso.
Mitigaciones recomendadas
Sección titulada «Mitigaciones recomendadas»=== “Inmediatas”
!!! danger "" - Aislar el archivo (no eliminar, conservar como evidencia). - Moverlo a un directorio de cuarentena fuera del `webroot`. - Bloquear acceso vía `.htaccess`. - Escanear el sitio completo con herramientas antimalware. - Cambiar todas las contraseñas (WordPress, hosting, FTP, DB).=== “Preventivas”
!!! tip "" Añadir en `.htaccess` dentro de `wp-content/uploads`:
```apache <FilesMatch "\.(?:php|phtml)$"> Deny from all </FilesMatch> ```
- Restringir políticas de subida (solo imágenes y documentos). - Validar archivos del lado servidor antes de guardarlos. - Implementar `mod_security` con reglas para detección de webshells. - Asignar permisos seguros (`uploads`: 755 para carpetas, 644 para archivos).