4.1 KiB
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 θα ενεργοποιήσει τη συνεδρία για εσάς.
$ 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 όπου σχολιάζεται αυτή η τεχνική, δεν ήταν αρκετό να εκμεταλλευτείτε το 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://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/
{{#include ../../banners/hacktricks-training.md}}