# LFI2RCE μέσω PHP_SESSION_UPLOAD_PROGRESS {{#include ../../banners/hacktricks-training.md}} ## Βασικές Πληροφορίες Αν βρείτε μια **Τοπική Συμπερίληψη Αρχείου** ακόμα και αν **δεν έχετε συνεδρία** και `session.auto_start` είναι `Off`. Αν **`session.upload_progress.enabled`** είναι **`On`** και παρέχετε το **`PHP_SESSION_UPLOAD_PROGRESS`** σε **multipart POST** δεδομένα, το PHP θα **ενεργοποιήσει τη συνεδρία για εσάς**. ```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 ``` Σημειώστε ότι με το **`PHP_SESSION_UPLOAD_PROGRESS`** μπορείτε να **ελέγξετε δεδομένα μέσα στη συνεδρία**, οπότε αν συμπεριλάβετε το αρχείο συνεδρίας σας, μπορείτε να συμπεριλάβετε ένα μέρος που ελέγχετε (ένα php shellcode για παράδειγμα). > [!NOTE] > Αν και οι περισσότερες οδηγίες στο Διαδίκτυο σας προτείνουν να ορίσετε το `session.upload_progress.cleanup` σε `Off` για σκοπούς αποσφαλμάτωσης. Η προεπιλεγμένη ρύθμιση `session.upload_progress.cleanup` στο PHP είναι ακόμα `On`. Αυτό σημαίνει ότι η πρόοδος της μεταφόρτωσης σας στη συνεδρία θα καθαριστεί το συντομότερο δυνατό. Έτσι, αυτό θα είναι **Race Condition**. ### Το CTF Στο [**αρχικό CTF**](https://blog.orange.tw/2018/10/) όπου σχολιάζεται αυτή η τεχνική, δεν ήταν αρκετό να εκμεταλλευτείτε το Race Condition, αλλά το περιεχόμενο που φορτώθηκε έπρεπε επίσης να ξεκινά με τη συμβολοσειρά `@