LFI2RCE Via temp file uploads

Apoya a HackTricks

Consulta los detalles completos de esta técnica en https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf

Subidas de archivos PHP

Cuando un motor PHP recibe una solicitud POST que contiene archivos formateados de acuerdo con la RFC 1867, genera archivos temporales para almacenar los datos subidos. Estos archivos son cruciales para el manejo de subidas de archivos en scripts PHP. La función move_uploaded_file debe ser utilizada para trasladar estos archivos temporales a una ubicación deseada si se necesita almacenamiento persistente más allá de la ejecución del script. Después de la ejecución, PHP elimina automáticamente cualquier archivo temporal restante.

Alerta de seguridad: Los atacantes, conscientes de la ubicación de los archivos temporales, podrían explotar una vulnerabilidad de Inclusión de Archivos Local (LFI) para ejecutar código accediendo al archivo durante la subida.

El desafío para el acceso no autorizado radica en predecir el nombre del archivo temporal, que es intencionalmente aleatorio.

Explotación en Sistemas Windows

En Windows, PHP genera nombres de archivos temporales utilizando la función GetTempFileName, resultando en un patrón como <path>\<pre><uuuu>.TMP. Notablemente:

  • La ruta predeterminada es típicamente C:\Windows\Temp.

  • El prefijo suele ser "php".

  • El <uuuu> representa un valor hexadecimal único. Crucialmente, debido a la limitación de la función, solo se utilizan los 16 bits inferiores, permitiendo un máximo de 65,535 nombres únicos con ruta y prefijo constantes, lo que hace que el ataque por fuerza bruta sea factible.

Además, el proceso de explotación se simplifica en sistemas Windows. Una peculiaridad en la función FindFirstFile permite el uso de comodines en las rutas de Inclusión de Archivos Local (LFI). Esto permite crear una ruta de inclusión como la siguiente para localizar el archivo temporal:

http://site/vuln.php?inc=c:\windows\temp\php<<

En ciertas situaciones, puede ser necesaria una máscara más específica (como php1<< o phpA<<). Se pueden probar sistemáticamente estas máscaras para descubrir el archivo temporal subido.

Explotación en Sistemas GNU/Linux

Para sistemas GNU/Linux, la aleatoriedad en la nomenclatura de archivos temporales es robusta, lo que hace que los nombres no sean predecibles ni susceptibles a ataques de fuerza bruta. Se pueden encontrar más detalles en la documentación referenciada.

Support HackTricks

Last updated