LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS

Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Βασικές πληροφορίες

Εάν βρήκατε μια Τοπική Ενσωμάτωση Αρχείου (LFI) ακόμα κι αν δεν έχετε μια συνεδρία και η session.auto_start είναι Off. Εάν το session.upload_progress.enabled είναι On και παρέχετε το PHP_SESSION_UPLOAD_PROGRESS στα δεδομένα multipart POST, η 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 shell).

Παρόλο που οι περισσότεροι οδηγοί στο Διαδίκτυο σας συνιστούν να ορίσετε το session.upload_progress.cleanup σε Off για λόγους αποσφαλμάτωσης. Η προεπιλεγμένη τιμή του session.upload_progress.cleanup στο PHP είναι ακόμα On. Αυτό σημαίνει ότι η πρόοδος της μεταφόρτωσης στη συνεδρία θα καθαρίζεται το συντομότερο δυνατόν. Έτσι αυτό θα είναι Race Condition.

Το CTF

Στο αρχικό CTF όπου σχολιάζεται αυτή η τεχνική, δεν ήταν αρκετό να εκμεταλλευτείτε την Race Condition, αλλά το φορτωμένο περιεχόμενο έπρεπε να ξεκινάει επίσης με τον χαρακτήρα @<?php.

Λόγω της προεπιλεγμένης ρύθμισης του session.upload_progress.prefix, το αρχείο SESSION μας θα ξεκινάει με ένα ενοχλητικό πρόθεμα upload_progress_ Όπως για παράδειγμα: upload_progress_controlledcontentbyattacker

Το κόλπο για να αφαιρέσετε το αρχικό πρόθεμα ήταν να κωδικοποιήσετε το φορτίο με base64 3 φορές και στη συνέχεια να το αποκωδικοποιήσετε μέσω των φίλτρων convert.base64-decode, αυτό γίνεται επειδή όταν αποκωδικοποιείτε το base64, το PHP θα αφαιρέσει τους περίεργους χαρακτήρες, έτσι μετά από 3 φορές μόνο το φορτίο που στέλνεται από τον επιτιθέμενο θα παραμείνει (και έπειτα ο επιτιθέμενος μπορεί να ελέγχει το αρχικό μέρος).

Περισσότερες πληροφορίες στο αρχικό writeup 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 Ένα άλλο writeup στο https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/

Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated