Ir al contenido

PHP File Upload

ID de alerta: php_upload MITRE ATT&CK: T1505.003 – Server Software Component: Web Shell



  • 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.

  • 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.
  • Análisis de contenido: búsqueda de indicadores PHP (<?php, <?=).
  • Ventana de deduplicación: 30 segundos.

TipoPatrónDescripción
file_patterneval($_POST['cmd']);Ejecución de código remoto
file_patternsystem($_GET['command']);Ejecución de comandos del sistema
file_patternbase64_decode(Código ofuscado
file_patternfile_get_contents('php://input')Lectura directa desde entrada PHP
file_patternc99.php, r57.php, wso.phpWebshells conocidos

  • 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.

  1. No ejecutar el archivo. Examinarlo con:

    Ventana de terminal
    strings /path/to/file.php | grep -E 'eval|exec|system|base64'
  2. Calcular hash MD5 y SHA256 del archivo.

  3. Verificar su origen mediante timestamp y logs de acceso (usuario/IP).

  4. Buscar otros shells:

    Ventana de terminal
    find wp-content/uploads -name "*.php" -type f
  5. Revisar logs para detectar requests dirigidas al archivo sospechoso.


Cuando el plugin detecta un archivo PHP dentro de wp-content/uploads, Vulnity no se limita a crear la alerta:

  • Registra evidencia del archivo, incluyendo ruta, nombre y hashes cuando están disponibles.
  • Intenta instalar o reforzar una regla para bloquear la ejecución de PHP dentro de uploads.
  • Verifica si el servidor sigue ejecutando PHP en esa carpeta.
  • Si el bloqueo no se puede aplicar o no resulta efectivo, mueve el archivo a wp-content/uploads/vulnity-quarantine/ con extensión .quarantine y protege esa carpeta con reglas de denegación.
  • Desde el panel de la alerta, si existe contexto de cuarentena, puedes restaurar el archivo o eliminarlo definitivamente desde WordPress.

La restauración solo debe usarse tras verificar manualmente que el archivo no es malicioso. La eliminación es irreversible desde Vulnity.