PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
यह मूल रूप से https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/ का सारांश है।
नई मनमानी वस्तुओं का निर्माण, जैसे new $_GET["a"]($_GET["a"])
, रिमोट कोड निष्पादन (RCE) की ओर ले जा सकता है, जैसा कि एक writeup में विस्तृत किया गया है। यह दस्तावेज़ RCE प्राप्त करने के लिए विभिन्न रणनीतियों को उजागर करता है।
सिंटैक्स new $a($b)
का उपयोग एक ऑब्जेक्ट को इंस्टेंटिएट करने के लिए किया जाता है जहाँ $a
क्लास नाम का प्रतिनिधित्व करता है और $b
कंस्ट्रक्टर को पास किया गया पहला तर्क है। ये वेरिएबल्स उपयोगकर्ता इनपुट जैसे GET/POST से प्राप्त किए जा सकते हैं, जहाँ वे स्ट्रिंग या एरे हो सकते हैं, या JSON से, जहाँ वे अन्य प्रकार के रूप में प्रस्तुत हो सकते हैं।
नीचे दिए गए कोड स्निपेट पर विचार करें:
इस उदाहरण में, $a
को App
या App2
पर सेट करना और $b
को एक सिस्टम कमांड (जैसे, uname -a
) पर सेट करना उस कमांड के निष्पादन का परिणाम देता है।
ऑटोलोडिंग फ़ंक्शन का लाभ उठाया जा सकता है यदि ऐसी कोई कक्षाएँ सीधे सुलभ नहीं हैं। ये फ़ंक्शन आवश्यकतानुसार फ़ाइलों से कक्षाओं को स्वचालित रूप से लोड करते हैं और इन्हें spl_autoload_register
या __autoload
का उपयोग करके परिभाषित किया जाता है:
PHP संस्करणों के साथ ऑटोलोडिंग का व्यवहार भिन्न होता है, जो विभिन्न RCE संभावनाएँ प्रदान करता है।
कस्टम कक्षाओं या ऑटोलोडर्स की कमी में, अंतर्निहित PHP कक्षाएँ RCE के लिए पर्याप्त हो सकती हैं। इन कक्षाओं की संख्या PHP संस्करण और एक्सटेंशन के आधार पर 100 से 200 के बीच होती है। इन्हें get_declared_classes()
का उपयोग करके सूचीबद्ध किया जा सकता है।
रिफ्लेक्शन API के माध्यम से रुचि के कंस्ट्रक्टर्स की पहचान की जा सकती है, जैसा कि निम्नलिखित उदाहरण और लिंक https://3v4l.org/2JEGF में दिखाया गया है।
विशिष्ट विधियों के माध्यम से RCE में शामिल हैं:
SplFileObject
कक्षा अपने कंस्ट्रक्टर के माध्यम से SSRF को सक्षम बनाती है, जो किसी भी URL से कनेक्शन की अनुमति देती है:
SSRF पुराने PHP संस्करणों में 8.0 से पहले deserialization हमलों का कारण बन सकता है, जो Phar प्रोटोकॉल का उपयोग करता है।
PDO क्लास कंस्ट्रक्टर DSN स्ट्रिंग्स के माध्यम से डेटाबेस से कनेक्शन की अनुमति देता है, जो फ़ाइल निर्माण या अन्य इंटरैक्शन को सक्षम कर सकता है:
PHP के 5.3.22 और 5.4.12 तक के संस्करण SoapClient
और SimpleXMLElement
कंस्ट्रक्टर्स के माध्यम से XXE हमलों के प्रति संवेदनशील थे, जो libxml2 के संस्करण पर निर्भर करते हैं।
एक प्रोजेक्ट की निर्भरताओं के विश्लेषण में, यह पाया गया कि Imagick का उपयोग कमांड निष्पादन के लिए नए ऑब्जेक्ट्स को इंस्टेंटिएट करके किया जा सकता है। यह कमजोरियों का शोषण करने का एक अवसर प्रस्तुत करता है।
फाइल सिस्टम में किसी भी निर्दिष्ट पथ पर सामग्री लिखने की VID parser क्षमता की पहचान की गई। इससे एक वेब-एक्सेसिबल डायरेक्टरी में PHP शेल रखने की संभावना बनती है, जिससे Remote Code Execution (RCE) प्राप्त होता है।
यह noted किया गया है कि PHP अस्थायी रूप से अपलोड की गई फ़ाइलों को /tmp/phpXXXXXX
में संग्रहीत करता है। Imagick में VID parser, msl प्रोटोकॉल का उपयोग करते हुए, फ़ाइल पथ में वाइल्डकार्ड को संभाल सकता है, जिससे अस्थायी फ़ाइल को चुने हुए स्थान पर स्थानांतरित करना संभव होता है। यह विधि फाइल सिस्टम के भीतर मनमाने फ़ाइल लेखन को प्राप्त करने के लिए एक अतिरिक्त दृष्टिकोण प्रदान करती है।
मूल लेख में वर्णित एक विधि में उन फ़ाइलों को अपलोड करना शामिल है जो हटाने से पहले सर्वर क्रैश को ट्रिगर करती हैं। अस्थायी फ़ाइल के नाम को ब्रूट-फोर्स करके, Imagick के लिए मनमाना PHP कोड निष्पादित करना संभव हो जाता है। हालाँकि, यह तकनीक केवल ImageMagick के एक पुराने संस्करण में प्रभावी पाई गई।
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)