# LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS {{#include ../../banners/hacktricks-training.md}} ## Informations de base Si vous avez trouvé une **inclusion de fichier local** même si vous **n'avez pas de session** et que `session.auto_start` est `Off`. Si **`session.upload_progress.enabled`** est **`On`** et que vous fournissez le **`PHP_SESSION_UPLOAD_PROGRESS`** dans les données **POST multipart**, PHP **activera la session pour vous**. ```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 ``` Notez qu'avec **`PHP_SESSION_UPLOAD_PROGRESS`** vous pouvez **contrôler les données à l'intérieur de la session**, donc si vous incluez votre fichier de session, vous pouvez inclure une partie que vous contrôlez (un shellcode php par exemple). > [!NOTE] > Bien que la plupart des tutoriels sur Internet vous recommandent de définir `session.upload_progress.cleanup` sur `Off` à des fins de débogage. La valeur par défaut de `session.upload_progress.cleanup` dans PHP est toujours `On`. Cela signifie que votre progression de téléchargement dans la session sera nettoyée dès que possible. Donc, cela sera **Race Condition**. ### Le CTF Dans le [**CTF original**](https://blog.orange.tw/2018/10/) où cette technique est commentée, il n'était pas suffisant d'exploiter la Race Condition, mais le contenu chargé devait également commencer par la chaîne `@