6.8 KiB
LFI2RCE μέσω PHP_SESSION_UPLOAD_PROGRESS
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο Hacking του GCP: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε 💬 στην ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα χάκερ κάνοντας υποβολή PRs στα αποθετήρια HackTricks και HackTricks Cloud στο GitHub.
Βασικές Πληροφορίες
Αν βρήκατε μια Ενσωμάτωση Τοπικού Αρχείου (LFI) ακόμα κι αν δεν έχετε μια συνεδρία και το session.auto_start
είναι Off
. Αν το session.upload_progress.enabled
είναι On
και παρέχετε το PHP_SESSION_UPLOAD_PROGRESS
στα δεδομένα POST multipart, το PHP θα ενεργοποιήσει τη συνεδρία για εσάς.
$ 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 για παράδειγμα).
{% hint style="info" %}
Αν και τα περισσότερα εγχειρίδια στο Διαδίκτυο σας συνιστούν να ορίσετε το session.upload_progress.cleanup
σε Off
για σκοπούς εντοπισμού σφαλμάτων. Η προεπιλεγμένη τιμή του session.upload_progress.cleanup
στο PHP παραμένει On
. Αυτό σημαίνει ότι το πρόοδος μεταφόρτωσης στη συνεδρία θα καθαριστεί το συντομότερο δυνατό. Έτσι αυτό θα είναι Συνθήκη Αγώνα.
{% endhint %}
Το CTF
Στο πρωτότυπο CTF όπου σχολιάζεται αυτή η τεχνική, δεν ήταν αρκετό να εκμεταλλευτείτε τη Συνθήκη Αγώνα, αλλά το περιεχόμενο που φορτώθηκε έπρεπε επίσης να ξεκινήσει με τη συμβολοσειρά @<?php
.
Λόγω της προεπιλεγμένης ρύθμισης του session.upload_progress.prefix
, το αρχείο ΣΥΝΕΔΡΙΑΣ θα ξεκινήσει με ένα ενοχλητικό πρόθεμα upload_progress_
Όπως: upload_progress_controlledcontentbyattacker
Το κόλπο για αφαίρεση του αρχικού προθέματος ήταν να κωδικοποιήσετε το φορτίο με base64 τρεις φορές και στη συνέχεια να το αποκωδικοποιήσετε μέσω φίλτρων convert.base64-decode
, αυτό γίνεται επειδή όταν αποκωδικοποιείτε το base64 το PHP θα αφαιρέσει τους περίεργους χαρακτήρες, έτσι μετά από τρεις φορές μόνο το φορτίο που στέλνεται από τον επιτιθέμενο θα παραμείνει (και στη συνέχεια ο επιτιθέμενος μπορεί να ελέγξει το αρχικό τμήμα).
Περισσότερες πληροφορίες στο πρωτότυπο άρθρο https://blog.orange.tw/2018/10/ και το τελικό exploit 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/
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Χάκινγκ του AWS:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο Χάκινγκ του GCP: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε 💬 στην ομάδα Discord ή στην ομάδα τηλεγράφου ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε χάκινγκ τεχνικές υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια στο GitHub.