LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS
Βασικές Πληροφορίες
Αν βρήκατε μια Ενσωμάτωση Τοπικού Αρχείου (LFI) ακόμα κι αν δεν έχετε μια συνεδρία και το session.auto_start
είναι Off
. Αν το session.upload_progress.enabled
είναι On
και παρέχετε το PHP_SESSION_UPLOAD_PROGRESS
στα δεδομένα POST multipart, το PHP θα ενεργοποιήσει τη συνεδρία για εσάς.
Σημειώστε ότι με το PHP_SESSION_UPLOAD_PROGRESS
μπορείτε να ελέγξετε τα δεδομένα μέσα στη συνεδρία, οπότε αν συμπεριλάβετε το αρχείο συνεδρίας σας μπορείτε να συμπεριλάβετε ένα τμήμα που ελέγχετε (έναν κωδικό κέλυφους php για παράδειγμα).
Αν και τα περισσότερα εγχειρίδια στο Διαδίκτυο σας συνιστούν να ορίσετε το session.upload_progress.cleanup
σε Off
για σκοπούς εντοπισμού σφαλμάτων. Η προεπιλεγμένη τιμή του session.upload_progress.cleanup
στο PHP παραμένει On
. Αυτό σημαίνει ότι το πρόοδος μεταφόρτωσης στη συνεδρία θα καθαριστεί το συντομότερο δυνατό. Έτσι αυτό θα είναι Συνθήκη Αγώνα.
Το 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/
Last updated