Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

फ़ीडसंपर्कगोपनीयता© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
php2shell-deep-dive — PHP2Shell का गहन तकनीकी वॉकथ्रू: आउट-ऑफ-मेमोरी क्रैश और यूज़-आफ्टर-फ्री से लेकर हीप ग्रूमिंग, ASLR लीक और रिमोट कोड एक्ज़िक्यूशन तक दो PHP कोर CVE को चेन करना। | Kitploit
उपकरण/GitHubGitHub/djad04/php2shell-deep-dive
मेमोरी फोरेंसिकभेद्यता विश्लेषणशोषणरिवर्स इंजीनियरिंगवेब एप्लिकेशन शोषणCTFपेपर और शोधलर्निंग और शिक्षाबाइनरी शोषण
GitHubdjad04/php2shell-deep-dive

php2shell-deep-dive

PHP2Shell का गहन तकनीकी वॉकथ्रू: आउट-ऑफ-मेमोरी क्रैश और यूज़-आफ्टर-फ्री से लेकर हीप ग्रूमिंग, ASLR लीक और रिमोट कोड एक्ज़िक्यूशन तक दो PHP कोर CVE को चेन करना।

634 दिन पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें
रिपॉजिटरी देखेंवेबसाइट

मैंने यह शोध 26 अक्टूबर, 2026 को लिखना शुरू किया, और मुझे पूरी तरह से यकीन नहीं है कि मैं इसे कब पूरा करूँगा।

लेखन के समय, PHP2Shell के बारे में अभी भी बहुत कम जानकारी उपलब्ध है, विशेष रूप से जब कमज़ोरियों और शोषण प्रक्रिया के विस्तृत तकनीकी विश्लेषण की बात आती है।

सच कहूँ तो, मैं ऐसी व्याख्याएँ ढूँढते-ढूँढते थक गया था जो केवल ऊपरी तौर पर बात करती थीं और वास्तव में यह नहीं दिखाती थीं कि अंदर क्या हो रहा है। मैं कुछ अलग करना चाहता था: एक उचित, गहन तकनीकी वॉकथ्रू जो पूरी प्रक्रिया का पता लगाए, हर महत्वपूर्ण विवरण की जाँच करे और न केवल यह समझाए कि क्या होता है, बल्कि यह भी कि क्यों और कैसे होता है।

यह शोध PHP स्रोत कोड की मेरी अपनी समझ, मेरे प्रयोगों, और इन कमज़ोरियों को समझने की कोशिश करते समय मेरे द्वारा किए गए जाँचों पर आधारित है। मैं इन सभी टुकड़ों को एक साथ जोड़ना, अपने निष्कर्ष साझा करना, और उम्मीद है कि दूसरों के लिए अंतर्निहित अवधारणाओं में से कुछ को समझना आसान बनाना चाहता था।

मेरे मुख्य लक्ष्यों में से एक था इसे तकनीकी गहराई का त्याग किए बिना सुलभ बनाना। मैं चाहता हूँ कि बुनियादी C ज्ञान और सामान्य प्रोग्रामिंग अनुभव रखने वाला कोई भी व्यक्ति इसे समझ सके, भले ही उसका लो-लेवल मेमोरी शोषण में कोई पूर्व अनुभव न हो।

मुझे यह भी उम्मीद है कि यह शोध उन बातों में से कुछ को स्पष्ट करने में मदद कर सकता है जो वर्तमान में खराब तरीके से समझाई गई हैं या गलत समझी जाती हैं। हालाँकि, मैं पारदर्शी रहना चाहता हूँ: यह कमज़ोरियों की मेरी अपनी तकनीकी समझ है, कोई आधिकारिक विश्लेषण या अचूक संदर्भ नहीं। मैं अभी भी सीख रहा हूँ, जाँच कर रहा हूँ, और स्वयं बिंदुओं को जोड़ रहा हूँ। रास्ते में गलतियाँ, अशुद्धियाँ, या ऐसी बातें हो सकती हैं जिन्हें मैंने गलत समझा हो।

यदि आपको कुछ गलत लगे, आपकी कोई अलग व्याख्या हो, या आपको लगे कि किसी बात पर और जाँच की जानी चाहिए, तो कृपया मुझसे संपर्क करने में संकोच न करें। मैं ऐसे सुधारों, चर्चाओं और योगदानों की सचमुच सराहना करूँगा जो इस शोध को अधिक सटीक और सभी के लिए अधिक उपयोगी बनाने में मदद कर सकें।

आखिरकार, इसे साझा करने का पूरा उद्देश्य एक साथ सीखना और अधिक लोगों को यह समझने में मदद करना है कि अंदर ही अंदर वास्तव में क्या हो रहा है।


त्वरित नेविगेशन

बुनियादी बातों से पहले से परिचित हैं?? सीधे उस भाग पर जाएँ जिसकी आपको परवाह है:

  • शुरू करने से पहले: स्टैक बनाम हीप, मेमोरी आवंटन की मूल बातें
  • यह खतरनाक कैसे है?: स्टेल पॉइंटर की कहानी, UAF रीड्स और राइट्स
  • स्टेल पॉइंटर: यह कहाँ से आता है: PHP के सेशन + OOM इंटरैक्शन के अंदर UAF की उत्पत्ति की कहानी
  • हमला अनुरोध बनाना: वह वास्तविक HTTP अनुरोध जो OOM को ट्रिगर करता है
  • लक्ष्य: हमें क्या लीक करना है और क्यों (हीप पॉइंटर + कोड पॉइंटर)
  • लक्ष्य स्ट्रक्चर: zend_string: वह स्ट्रक्चर जिसे PHP सेशन कुकी बनाते समय पढ़ता है
  • मेमोरी को पुनः प्राप्त करना: अनुरोध #2 और लक्ष्य zend_string स्ट्रक्चर
  • हीप ग्रूमिंग की गहराई में: हम कैसे फोर्ज्ड डेटा को ठीक उसी सही मेमोरी स्लॉट में रखते हैं
  • multipart_buffer_read_body का रहस्य: वह छिपा हुआ आवंटन जिसने मेरा दिमाग लगभग खा लिया
  • दो लीक, एक नहीं: क्यों हीप लीक और कोड लीक के लिए अलग-अलग कैलिब्रेशन की आवश्यकता होती है
  • कोड लीक (चरण 3): ASLR को हराने के लिए फंक्शन पॉइंटर लीक करना
  • फिंगरप्रिंटिंग: हमें कैसे पता चलता है कि हमें सही पॉइंटर मिला है
  • हीप लीक को पार्स करना: 256 बाइट्स की अराजकता में चंक बेस खोजना
  • 1+8 पाइपलाइन: दोनों लीक वास्तव में कैसे पहुँचाए जाते हैं
  • स्ट्रक्चर फोर्ज करने के लिए एलोकेटर का पुनः उपयोग: pDestructor हाईजैक का विचार
  • ट्रिगर: PHP गंदा काम यहाँ करता है, वास्तविक zend_hash_destroy कोड
  • एक में तीन स्ट्रक्चर: 384 बाइट्स में ForgedArray + FakeExecuteData + FakeString
  • अंतिम पेलोड (चरण 4): pDestructor को हाईजैक करने और RCE पाने के लिए HashTable फोर्ज करना
  • प्राइमर मेकैनिज़्म: bucket[2] में मुक्त प्राइमर का भूत विनाश श्रृंखला को कैसे ट्रिगर करता है
  • कमांड आउटपुट ट्रिक: /proc में अपना ही TCP सॉकेट खोजना
  • पूरी पाइपलाइन: सभी चार चरण शुरू से अंत तक
  • एक अलग बिल्ड के लिए कैलिब्रेट करना: कैसे हर संख्या किसी विशिष्ट PHP बिल्ड के हीप विश्लेषण से आती है
  • वास्तविक दुनिया की रुकावटें: क्यों यह हमला वास्तविक प्रोडक्शन सर्वर पर कहीं अधिक कठिन है
  • Steal My Bitcoin CTF: वह चुनौती जिसने यह सब शुरू किया
  • आभार: श्रेय और संदर्भ

यदि आप हीप एक्सप्लॉइटेशन में नए हैं या पूरा अनुभव चाहते हैं, तो बस स्क्रॉल करते रहें। मैंने इसे शुरू से अंत तक पढ़ने के लिए लिखा है।


शुरू करने से पहले

शुरू करने से पहले कुछ बातें सभी को ध्यान में रखनी चाहिए। जैसे-जैसे हम इस शोध में आगे बढ़ेंगे, ये विशेष रूप से उपयोगी साबित होंगी। जैसा कि मैंने पहले उल्लेख किया, मैं चाहता हूँ कि यह वॉकथ्रू सभी के लिए सुलभ हो, इसलिए मैं और भी बुनियादी अवधारणाओं को समझाने के लिए समय लूँगा। यदि आप पहले से ही इनसे परिचित हैं, तो बेझिझक आगे बढ़ें!

स्टैक बनाम हीप

एक सामान्य प्रोग्राम में, मेमोरी को विभिन्न क्षेत्रों में व्यवस्थित किया जाता है, जिनमें स्टैक और हीप शामिल हैं।

उदाहरण के लिए, C++ में:

int main() {
    int a = 30;       // Typically stored on the stack
    int* b = new int(30);  // b is typically on the stack,
                           // but the integer it points to is on the heap
}

यहाँ, a एक स्थानीय चर है जिसमें मान 30 है। सूचक b भी एक स्थानीय चर है, लेकिन इसमें हीप पर आवंटित एक पूर्णांक का पता है।

मेमोरी आवंटन कैसे काम करता है

PHP मुख्य रूप से C में लिखा गया है, इसलिए हमें यह समझना होगा कि मेमोरी आवंटन कैसे काम करता है।

OS एक प्रक्रिया को उसका अपना वर्चुअल एड्रेस स्पेस प्रदान करता है। फिर प्रक्रिया का मेमोरी आवंटक उसके लिए उपलब्ध मेमोरी के भीतर आवंटन का प्रबंधन करता है।

उदाहरण के लिए, C++ में, हमारे पास मेमोरी आवंटित करने के लिए new, malloc(), और अन्य तरीके हैं।

आवंटक अक्सर हर बार OS से नई मेमोरी का अनुरोध करने के बजाय मुक्त की गई मेमोरी का पुनः उपयोग करने का प्रयास करते हैं।

साथ ही, जब किसी ऑब्जेक्ट का जीवनकाल समाप्त होता है, तो उसकी मेमोरी में संग्रहीत डेटा जरूरी नहीं कि तुरंत मिटा दिया जाए। उस मेमोरी को बस पुनः उपयोग के लिए उपलब्ध के रूप में चिह्नित किया जा सकता है।


इसे बेहतर ढंग से समझने के लिए, आइए निम्नलिखित कोड पर एक संक्षिप्त नज़र डालें:

#include <cstdlib>
#include <iostream>

int main() {
    void* a = malloc(64);

    free(a);

    void* b = malloc(64);

    std::cout << a << "\n" << b << std::endl;

    free(b);
    return 0;
}

यहाँ, जब हम a और b प्रिंट करते हैं, तो हम पा सकते हैं कि उनमें समान संख्यात्मक मेमोरी पता है।

क्यों? क्योंकि free(a) कॉल करने के बाद malloc() पहले a को आवंटित मेमोरी का पुनः उपयोग कर सकता है, जिससे मेमोरी का एक और ब्लॉक प्राप्त करने की आवश्यकता टल जाती है।

यह हर बार होने की गारंटी नहीं है, लेकिन यह एक सामान्य व्यवहार है।

टूल डाउनलोड करें