mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
38 lines
4.1 KiB
Markdown
38 lines
4.1 KiB
Markdown
# 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}}
|