hacktricks/src/pentesting-web/file-inclusion/via-php_session_upload_progress.md

38 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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, αλλά το περιεχόμενο που φορτώθηκε έπρεπε επίσης να ξεκινά με τη συμβολοσειρά `@<?php`.
Λόγω της προεπιλεγμένης ρύθμισης του `session.upload_progress.prefix`, το **ΑΡΧΕΙΟ ΣΥΝΕΔΡΙΑΣ μας θα ξεκινά με ένα ενοχλητικό πρόθεμα** `upload_progress_` Όπως: `upload_progress_controlledcontentbyattacker`
Το κόλπο για **να αφαιρέσετε το αρχικό πρόθεμα** ήταν να **base64encode το payload 3 φορές** και στη συνέχεια να το αποκωδικοποιήσετε μέσω φίλτρων `convert.base64-decode`, αυτό συμβαίνει επειδή όταν **αποκωδικοποιείτε το base64, το PHP θα αφαιρέσει τους περίεργους χαρακτήρες**, οπότε μετά από 3 φορές **μόνο** το **payload** **που στάλθηκε** από τον επιτιθέμενο θα **παραμείνει** (και στη συνέχεια ο επιτιθέμενος μπορεί να ελέγξει το αρχικό μέρος).
Περισσότερες πληροφορίες στην αρχική ανάρτηση [https://blog.orange.tw/2018/10/](https://blog.orange.tw/2018/10/) και τελική εκμετάλλευση [https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py](https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py)\
Μια άλλη ανάρτηση στο [https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/](https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/)
{{#include ../../banners/hacktricks-training.md}}