PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
This is basically a summary of https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/
Η δημιουργία νέων αυθαίρετων αντικειμένων, όπως το new $_GET["a"]($_GET["a"])
, μπορεί να οδηγήσει σε Remote Code Execution (RCE), όπως αναφέρεται σε μια writeup. Αυτό το έγγραφο επισημαίνει διάφορες στρατηγικές για την επίτευξη RCE.
Η σύνταξη new $a($b)
χρησιμοποιείται για την αρχικοποίηση ενός αντικειμένου όπου $a
αντιπροσωπεύει το όνομα της κλάσης και $b
είναι το πρώτο επιχείρημα που περνάει στον κατασκευαστή. Αυτές οι μεταβλητές μπορούν να προέρχονται από εισόδους χρηστών όπως GET/POST, όπου μπορεί να είναι συμβολοσειρές ή πίνακες, ή από JSON, όπου μπορεί να εμφανίζονται ως άλλοι τύποι.
Σκεφτείτε το παρακάτω απόσπασμα κώδικα:
Σε αυτή την περίπτωση, η ρύθμιση του $a
σε App
ή App2
και του $b
σε μια εντολή συστήματος (π.χ., uname -a
) έχει ως αποτέλεσμα την εκτέλεση αυτής της εντολής.
Οι συναρτήσεις αυτόματης φόρτωσης μπορούν να εκμεταλλευτούν αν δεν είναι άμεσα προσβάσιμες τέτοιες κλάσεις. Αυτές οι συναρτήσεις φορτώνουν αυτόματα κλάσεις από αρχεία όταν είναι απαραίτητο και ορίζονται χρησιμοποιώντας spl_autoload_register
ή __autoload
:
Η συμπεριφορά της αυτόματης φόρτωσης διαφέρει ανάλογα με τις εκδόσεις PHP, προσφέροντας διαφορετικές δυνατότητες RCE.
Λείποντας προσαρμοσμένες κλάσεις ή αυτόματους φορτωτές, οι ενσωματωμένες κλάσεις PHP μπορεί να είναι επαρκείς για RCE. Ο αριθμός αυτών των κλάσεων κυμαίνεται μεταξύ 100 και 200, ανάλογα με την έκδοση PHP και τις επεκτάσεις. Μπορούν να καταγραφούν χρησιμοποιώντας get_declared_classes()
.
Οι κατασκευαστές που ενδιαφέρουν μπορούν να εντοπιστούν μέσω του API αντανάκλασης, όπως φαίνεται στο παρακάτω παράδειγμα και στον σύνδεσμο https://3v4l.org/2JEGF.
Η RCE μέσω συγκεκριμένων μεθόδων περιλαμβάνει:
Η κλάση SplFileObject
επιτρέπει SSRF μέσω του κατασκευαστή της, επιτρέποντας συνδέσεις σε οποιοδήποτε URL:
SSRF μπορεί να οδηγήσει σε επιθέσεις αποσυμπίεσης σε εκδόσεις του PHP πριν από την 8.0 χρησιμοποιώντας το πρωτόκολλο Phar.
Ο κατασκευαστής κλάσης PDO επιτρέπει συνδέσεις σε βάσεις δεδομένων μέσω DSN συμβολοσειρών, ενδεχομένως επιτρέποντας τη δημιουργία αρχείων ή άλλες αλληλεπιδράσεις:
Οι εκδόσεις του PHP μέχρι 5.3.22 και 5.4.12 ήταν ευάλωτες σε επιθέσεις XXE μέσω των κατασκευαστών SoapClient
και SimpleXMLElement
, ανάλογα με την έκδοση του libxml2.
Στην ανάλυση των εξαρτήσεων ενός έργου, ανακαλύφθηκε ότι η Imagick θα μπορούσε να αξιοποιηθεί για εκτέλεση εντολών δημιουργώντας νέες αντικείμενα. Αυτό παρουσιάζει μια ευκαιρία για εκμετάλλευση ευπαθειών.
Η δυνατότητα του VID parser να γράφει περιεχόμενο σε οποιαδήποτε καθορισμένη διαδρομή στο σύστημα αρχείων εντοπίστηκε. Αυτό θα μπορούσε να οδηγήσει στην τοποθέτηση ενός PHP shell σε έναν διαδικτυακά προσβάσιμο φάκελο, επιτυγχάνοντας Remote Code Execution (RCE).
Σημειώνεται ότι το PHP αποθηκεύει προσωρινά τα ανεβασμένα αρχεία στο /tmp/phpXXXXXX
. Ο VID parser στην Imagick, χρησιμοποιώντας το πρωτόκολλο msl, μπορεί να χειριστεί χαρακτήρες μπαλαντέρ σε διαδρομές αρχείων, διευκολύνοντας τη μεταφορά του προσωρινού αρχείου σε μια επιλεγμένη τοποθεσία. Αυτή η μέθοδος προσφέρει μια επιπλέον προσέγγιση για την επίτευξη αυθαίρετης εγγραφής αρχείων στο σύστημα αρχείων.
Μια μέθοδος που περιγράφεται στην αρχική ανάλυση περιλαμβάνει την αποστολή αρχείων που προκαλούν μια κατάρρευση του διακομιστή πριν από τη διαγραφή. Με την εκτέλεση brute force στο όνομα του προσωρινού αρχείου, καθίσταται δυνατή η εκτέλεση αυθαίρετου PHP κώδικα από την Imagick. Ωστόσο, αυτή η τεχνική βρέθηκε ότι ήταν αποτελεσματική μόνο σε μια παλιά έκδοση του ImageMagick.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)