# LFI2RCE a través de PHP_SESSION_UPLOAD_PROGRESS {{#include ../../banners/hacktricks-training.md}} ## Información Básica Si encontraste una **Inclusión de Archivos Local** incluso si **no tienes una sesión** y `session.auto_start` está `Desactivado`. Si **`session.upload_progress.enabled`** está **`Activado`** y proporcionas el **`PHP_SESSION_UPLOAD_PROGRESS`** en datos **multipart POST**, PHP **activará la sesión para ti**. ```bash $ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange' $ ls -a /var/lib/php/sessions/ . .. $ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange' -d 'PHP_SESSION_UPLOAD_PROGRESS=blahblahblah' $ ls -a /var/lib/php/sessions/ . .. $ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange' -F 'PHP_SESSION_UPLOAD_PROGRESS=blahblahblah' -F 'file=@/etc/passwd' $ ls -a /var/lib/php/sessions/ . .. sess_iamorange In the last example the session will contain the string blahblahblah ``` Nota que con **`PHP_SESSION_UPLOAD_PROGRESS`** puedes **controlar datos dentro de la sesión**, así que si incluyes tu archivo de sesión puedes incluir una parte que controlas (un php shellcode por ejemplo). > [!NOTE] > Aunque la mayoría de los tutoriales en Internet te recomiendan establecer `session.upload_progress.cleanup` en `Off` para fines de depuración. El valor predeterminado de `session.upload_progress.cleanup` en PHP sigue siendo `On`. Esto significa que tu progreso de carga en la sesión será limpiado lo antes posible. Así que esto será **Race Condition**. ### El CTF En el [**CTF original**](https://blog.orange.tw/2018/10/) donde se comenta esta técnica, no era suficiente explotar la Race Condition, sino que el contenido cargado también necesitaba comenzar con la cadena `@