RFI y LFI
Lamentablemente, esto no parece ser explotable directamente. Como se comentó en otros comentarios, RFI no es posible debido al prefijo, y LFI no es posible en Linux porque (creo) no hay forma de escapar del strpos
a través de la codificación. PHP descodificaría automáticamente cualquier cadena URL codificada antes de colocarla en la variable super $_GET
, y cualquier codificación que no activara la búsqueda strpos
tampoco se registraría como una barra diagonal para los fines de la llamada de inclusión (en por lo menos, no pude encontrar ningún vector de ataque exitoso). Sin embargo, tenga presente la respuesta de duskwuff: LFI es posible aquí en windows.
Ataques alternativos
Sin embargo, eso no significa que no pueda ayudar. En particular, las inclusiones abiertas como esta son el tipo de vulnerabilidad que te permite hacer que una vulnerabilidad más pequeña sea mucho más grande. El pensamiento inmediato que viene a la mente es verificar si este sitio web tiene una función de carga de imágenes en algún lugar. Si es así, y sabe dónde se guardan las imágenes, puede intentar incrustar PHP válido en los datos EXIF de una imagen jpg que luego carga al servidor. Normalmente, dicho código no es explotable, porque de todos modos no tiene que ejecutar su PHP en el servidor. Pero, con una inclusión abierta como esta, puede cargar su archivo y luego usar esta debilidad para ejecutarlo (ya que el archivo cargado probablemente existirá dentro de /path/to/php/files
, la falta de una vulnerabilidad de LFI totalmente calificada no importará). Desde allí puedes hacer lo que quieras.
Utilizar una entrada de usuario para crear una ruta de inclusión es casi una siempre una mala idea, y rara vez es necesario. Incluso si no hay una debilidad inmediata, eso no significa que no pueda ayudarte a la hora de explotar otras.
Mejor seguridad
Creo que vale la pena tomarse un minuto para explicar cómo algo como esto debería ser asegurado. Es difícil dar una solución exacta sin más contexto, pero generalmente algo como esto se puede dividir en un proceso de dos pasos más seguro:
- Use
realpath
para permitir que el sistema resuelva todos los intentos de recorrido de directorios y obtenga una ruta absoluta definitiva
- Asegúrese de que la ruta absoluta final se encuentre en un directorio seguro para que pueda incluir archivos de, o una lista blanca explícita en contra de una lista de inclusión de seguridad
Nunca desea permitir que el usuario incluya un archivo arbitrario. Averigüe exactamente qué archivo se incluirá como resultado de sus aportaciones del usuario, y filtre eso a través de una lista blanca. Esa es la única manera de hacer esto de manera segura.