
CLI rewrite of the Drupalgeddon2 (CVE-2018-7600) PoC — अधिकृत परीक्षण/शिक्षा के लिए
एक Drupalgeddon2 (CVE-2018-7600) प्रूफ-ऑफ-कॉन्सेप्ट का कमांड-लाइन पुनर्लेखन, जो Hack The Box Academy के Attacking Common Applications मॉड्यूल के माध्यम से काम करते हुए एक अध्ययन अभ्यास के रूप में बनाया गया है।
[!WARNING] केवल अधिकृत सुरक्षा परीक्षण और शिक्षा के लिए। जिन सिस्टमों के आप मालिक नहीं हैं या जिनके लिए आपके पास स्पष्ट लिखित अनुमति नहीं है, उनके खिलाफ इसे चलाना अधिकांश न्यायक्षेत्रों में अवैध है। कानूनी और जिम्मेदार उपयोग देखें।
[!NOTE] AI सहायता से लिखा गया कार्यान्वयन। लेखकत्व पर एक नोट देखें।
Drupal HTB Academy के Attacking Common Applications मॉड्यूल में शामिल "सामान्य अनुप्रयोगों" में से एक है, और CVE-2018-7600 ("Drupalgeddon2") इसके लिए विहित अनप्रमाणित-RCE उदाहरण है। एक बार उपयोग होने वाली स्क्रिप्ट को कॉपी-पेस्ट करके आगे बढ़ने के बजाय, मैं वास्तव में उस Form API इंजेक्शन को समझना चाहता था जो इस बग को काम कराता है — इसलिए मैंने एक सीखने के अभ्यास के रूप में सार्वजनिक PoC को शुरू से फिर से बनाया।
व्यापक रूप से संदर्भित मूल, Vitalii Rudnykh का a2u/CVE-2018-7600, बग को प्रदर्शित करने के लिए बहुत अच्छा है, लेकिन यह अपेक्षा करता है कि आप प्रत्येक रन के लिए पेलोड को स्थान पर संपादित करें। लैब/CTF वर्कफ़्लो में — विभिन्न लक्ष्यों के खिलाफ पुनः चलाना, एक दोहराने योग्य पैर जमाना चाहते हैं — यह थकाऊ हो जाता है। यह संस्करण इसके बजाय इसे एक उचित CLI टूल में बदल देता है:
cmd= दरवाजा न छोड़ेंयह जानबूझकर एक ज्ञात, लंबे समय से पैच की गई कमजोरी (2018 में खुलासा) तक सीमित है। लक्ष्य तकनीक को समझना और एक साफ, दस्तावेजीकृत संदर्भ कार्यान्वयन तैयार करना था — नवीन आक्रामक क्षमता नहीं।
इस रिपॉजिटरी का कोड AI सहायता (Anthropic के Claude) से लिखा गया था जब मैं HTB मॉड्यूल के माध्यम से काम कर रहा था। मैंने डिज़ाइन लक्ष्य और आवश्यकताएँ निर्धारित कीं — CLI एर्गोनॉमिक्स, वेब शेल का ऑटो-डिप्लॉय, इंटरैक्टिव मोड, यादृच्छिक शेल नाम और पैरामीटर — और मैंने परिणाम की समीक्षा और परीक्षण किया। मैं यह इसलिए प्रकट कर रहा हूँ क्योंकि यह ईमानदार काम है, और क्योंकि यहाँ मूल्य हर पंक्ति के लेखकत्व के बजाय समझ और इंजीनियरिंग निर्णयों में है।
--cmd के साथ उस शेल के माध्यम से कमांड चलाने देता है, या --shell के साथ इंटरैक्टिव स्यूडो-शेल में जाने देता है।CVE-2018-7600 प्रभावित करता है:
यह कार्यान्वयन Drupal 8 Form API वेक्टर (user/register AJAX एंडपॉइंट) को लक्षित करता है। Drupal 7 एक अलग एंडपॉइंट/पेलोड के माध्यम से शोषणीय है और यहाँ हैंडल नहीं किया गया है।
पैच किए गए रिलीज़ (7.58 / 8.5.1 और बाद के) प्रभावित नहीं हैं।
requestspip install requests
# एक बार का कमांड
python3 drupalgeddon2.py -u http://target/ -c id
# इंटरैक्टिव स्यूडो-शेल
python3 drupalgeddon2.py -u http://target/ --shell
# बस शेल लगाएं, कुछ न चलाएं
python3 drupalgeddon2.py -u http://target/ --deploy-only
# Burp के माध्यम से रूट करें, प्रॉक्सी के सेल्फ-साइन किए गए प्रमाणपत्र को अनदेखा करें
python3 drupalgeddon2.py -u http://target/ -c id --proxy http://127.0.0.1:8080 -k
CVE-2018-7600 Drupal के Form API में इनपुट-सैनिटाइज़ेशन विफलता है। Drupal फॉर्मों को नेस्टेड रेंडरेबल ऐरे के रूप में दर्शाता है, और # से शुरू होने वाली ऐरे कुंजियाँ उपयोगकर्ता डेटा के बजाय विशेष रेंडर गुणों के रूप में मानी जाती हैं। पैच (SA-CORE-2018-002) ने उपयोगकर्ता-आपूर्ति किए गए इनपुट से इन #-उपसर्ग कुंजियों को हटाने के लिए सैनिटाइज़ेशन जोड़ा।
पैच से पहले, एक अनप्रमाणित हमलावर एक फॉर्म तत्व में रेंडर गुणों को इंजेक्ट कर सकता था जो Drupal के AJAX हैंडलर द्वारा संसाधित किया जाता है। उदाहरण के लिए, गुण सबमिट करना:
#post_render — Drupal द्वारा रेंडरिंग के बाद लागू किए जाने वाले कॉलबल्स की एक सूची, और#markup — उन्हें पास किया गया तर्कउपयोगकर्ता-पंजीकरण फॉर्म के mail तत्व के विरुद्ध Drupal को रेंडर चरण के दौरान हमलावर-नियंत्रित इनपुट के साथ एक मनमाना PHP फ़ंक्शन (यहाँ exec) कॉल करने का कारण बनता है — अर्थात दूरस्थ कोड निष्पादन, बिना किसी प्रमाणीकरण के।
यह PoC उस प्रिमिटिव का उपयोग करके एक-पंक्ति के PHP शेल को स्थानीय रूप से बेस64-एनकोड करता है, सर्वर से इसे वेबरूट में एक फ़ाइल में डिकोड करवाता है, और फिर सामान्य GET अनुरोधों के माध्यम से उस फ़ाइल के साथ बातचीत करता है।
यदि आप इसके बचाव पक्ष पर हैं:
सुधार
पता लगाने के विचार
#post_render, #markup, #type, #lazy_builder, आदि। वैध फॉर्म सबमिशन में ये नहीं होते।…/user/register?element_parents=…&_wrapper_format=drupal_ajax पर संदिग्ध पैरामीटर ले जाने वाले अनुरोधों को ध्वजांकित करें।.php फ़ाइल पर बाद के GET के साथ सहसंबंधित करें।system($_GET[...]) शेल) पर नज़र रखें।यह उपकरण शिक्षा और अधिकृत सुरक्षा परीक्षण के लिए प्रकाशित किया गया है — आपके अपने लैब वातावरण, HTB/CTF लक्ष्य, या ऐसे सिस्टम जिनके आकलन के लिए आपके पास स्पष्ट लिखित अनुमति है। कंप्यूटर सिस्टम में अनधिकृत पहुँच यूके कंप्यूटर मिसयूज़ एक्ट 1990, यूएस कंप्यूटर फ्रॉड एंड अब्यूज़ एक्ट, और अन्यत्र समकक्ष कानूनों के तहत एक अपराध है। इसका उपयोग कैसे किया जाता है, इसके लिए आप पूरी तरह से जिम्मेदार हैं। लेखक दुरुपयोग या किसी भी हुई क्षति के लिए कोई दायित्व स्वीकार नहीं करता है।
MIT
| फ़्लैग | विवरण |
|---|
-u, --url | (आवश्यक) लक्ष्य का आधार URL, जैसे http://target/ |
-c, --cmd | लक्ष्य पर चलाने के लिए एकल कमांड |
--shell | इंटरैक्टिव स्यूडो-शेल में जाएँ |
--deploy-only | केवल वेब शेल लगाएं, कुछ न चलाएं |
--shell-name | लगाए गए शेल के लिए फ़ाइल नाम (डिफ़ॉल्ट: यादृच्छिक .php) |
--param | शेल के लिए GET पैरामीटर का नाम (डिफ़ॉल्ट: यादृच्छिक md5) |
--proxy | प्रॉक्सी URL, जैसे http://127.0.0.1:8080 |
-k, --insecure | TLS सत्यापन अक्षम करें (सेल्फ-साइन किए गए प्रॉक्सी प्रमाणपत्रों के लिए) |
--timeout | प्रति-अनुरोध टाइमआउट सेकंड में (डिफ़ॉल्ट: 15) |