Apache
Executable PHP extensions
चेक करें कि कौन सी एक्सटेंशन Apache सर्वर को निष्पादित कर रही है। उन्हें खोजने के लिए आप निष्पादित कर सकते हैं:
इसके अलावा, कुछ स्थान जहाँ आप इस कॉन्फ़िगरेशन को पा सकते हैं:
CVE-2021-41773
Confusion Attack
इन प्रकार के हमलों को Orange द्वारा इस ब्लॉग पोस्ट में पेश किया गया है और निम्नलिखित एक सारांश है। "confusion" हमला मूल रूप से इस बात का लाभ उठाता है कि कई मॉड्यूल जो एक साथ काम करते हैं, Apache बनाने के लिए, पूरी तरह से समन्वयित नहीं होते हैं और उनमें से कुछ द्वारा कुछ अप्रत्याशित डेटा को संशोधित करने से बाद के मॉड्यूल में एक भेद्यता उत्पन्न हो सकती है।
Filename Confusion
Truncation
mod_rewrite
r->filename
की सामग्री को ?
के बाद ट्रिम करेगा (modules/mappers/mod_rewrite.c#L4141). यह पूरी तरह से गलत नहीं है क्योंकि अधिकांश मॉड्यूल r->filename
को एक URL के रूप में मानते हैं। लेकिन अन्य अवसरों पर इसे फ़ाइल पथ के रूप में माना जाएगा, जो एक समस्या उत्पन्न करेगा।
Path Truncation
mod_rewrite
का दुरुपयोग करना संभव है जैसे कि निम्नलिखित नियम उदाहरण में फ़ाइल सिस्टम के अंदर अन्य फ़ाइलों तक पहुँचने के लिए, अपेक्षित पथ के अंतिम भाग को हटाकर बस एक ?
जोड़ना:
गलत दिशा में RewriteFlag असाइनमेंट
निम्नलिखित री-राइट नियम में, जब तक URL .php पर समाप्त होता है, इसे php के रूप में माना जाएगा और निष्पादित किया जाएगा। इसलिए, यह संभव है कि ?
चर के बाद .php पर समाप्त होने वाला एक URL भेजा जाए जबकि पथ में एक अलग प्रकार की फ़ाइल (जैसे कि एक छवि) को लोड किया जाए जिसमें दुर्भावनापूर्ण php कोड हो:
ACL Bypass
यह संभव है कि उपयोगकर्ता उन फ़ाइलों तक पहुँच सके जिन्हें उसे पहुँचने की अनुमति नहीं होनी चाहिए, भले ही पहुँच को इन कॉन्फ़िगरेशन के साथ अस्वीकृत किया जाना चाहिए:
यह इस कारण है कि डिफ़ॉल्ट रूप से PHP-FPM उन URL को प्राप्त करेगा जो .php
पर समाप्त होते हैं, जैसे http://server/admin.php%3Fooo.php
और क्योंकि PHP-FPM ?
के बाद की किसी भी चीज़ को हटा देगा, पूर्व का URL /admin.php
को लोड करने की अनुमति देगा, भले ही पूर्व का नियम इसे प्रतिबंधित करता हो।
DocumentRoot Confusion
एक मजेदार तथ्य यह है कि Apache का पिछला पुनर्लेखन फ़ाइल को documentRoot और root दोनों से एक्सेस करने की कोशिश करेगा। इसलिए, https://server/abouth.html
के लिए एक अनुरोध फ़ाइल को फ़ाइल सिस्टम में /var/www/html/about.html
और /about.html
में चेक करेगा। जिसे मूल रूप से फ़ाइल सिस्टम में फ़ाइलों को एक्सेस करने के लिए दुरुपयोग किया जा सकता है।
सर्वर-साइड स्रोत कोड का खुलासा
CGI स्रोत कोड का खुलासा करें
केवल अंत में %3F जोड़ना cgi मॉड्यूल के स्रोत कोड को लीक करने के लिए पर्याप्त है:
PHP स्रोत कोड का खुलासा करें
यदि एक सर्वर में विभिन्न डोमेन हैं, जिनमें से एक स्थिर डोमेन है, तो इसका दुरुपयोग करके फ़ाइल प्रणाली को पार किया जा सकता है और php कोड लीक किया जा सकता है:
स्थानीय गैजेट्स हेरफेर
पिछले हमले की मुख्य समस्या यह है कि डिफ़ॉल्ट रूप से फ़ाइल सिस्टम पर अधिकांश पहुँच को अस्वीकृत कर दिया जाएगा जैसा कि Apache HTTP Server के कॉन्फ़िगरेशन टेम्पलेट में है:
हालांकि, Debian/Ubuntu ऑपरेटिंग सिस्टम डिफ़ॉल्ट रूप से /usr/share
की अनुमति देते हैं:
Therefore, it would be possible to फाइलों का दुरुपयोग करना /usr/share
में इन वितरणों के अंदर।
स्थानीय गैजेट से जानकारी का खुलासा
Apache HTTP Server के साथ websocketd dump-env.php स्क्रिप्ट को /usr/share/doc/websocketd/examples/php/ पर उजागर कर सकता है, जो संवेदनशील वातावरण चर लीक कर सकता है।
Nginx या Jetty वाले सर्वर अपने डिफ़ॉल्ट वेब रूट के माध्यम से संवेदनशील वेब एप्लिकेशन जानकारी (जैसे, web.xml) उजागर कर सकते हैं जो /usr/share के तहत रखे गए हैं:
/usr/share/nginx/html/
/usr/share/jetty9/etc/
/usr/share/jetty9/webapps/
स्थानीय गैजेट से XSS
LibreOffice स्थापित Ubuntu डेस्कटॉप पर, सहायता फ़ाइलों की भाषा स्विच सुविधा का दुरुपयोग Cross-Site Scripting (XSS) का कारण बन सकता है। /usr/share/libreoffice/help/help.html पर URL को बदलने से दुर्भावनापूर्ण पृष्ठों या पुराने संस्करणों पर पुनर्निर्देशित किया जा सकता है unsafe RewriteRule के माध्यम से।
स्थानीय गैजेट से LFI
यदि PHP या कुछ फ्रंट-एंड पैकेज जैसे JpGraph या jQuery-jFeed स्थापित हैं, तो उनकी फ़ाइलों का दुरुपयोग संवेदनशील फ़ाइलों को पढ़ने के लिए किया जा सकता है जैसे /etc/passwd:
/usr/share/doc/libphp-jpgraph-examples/examples/show-source.php
/usr/share/javascript/jquery-jfeed/proxy.php
/usr/share/moodle/mod/assignment/type/wims/getcsv.php
स्थानीय गैजेट से SSRF
MagpieRSS's magpie_debug.php का उपयोग करते हुए /usr/share/php/magpierss/scripts/magpie_debug.php पर, एक SSRF भेद्यता आसानी से बनाई जा सकती है, जो आगे के शोषण के लिए एक गेटवे प्रदान करती है।
स्थानीय गैजेट से RCE
Remote Code Execution (RCE) के लिए अवसर विशाल हैं, जैसे कि एक पुराना PHPUnit या phpLiteAdmin। इनका दुरुपयोग मनमाने कोड को निष्पादित करने के लिए किया जा सकता है, जो स्थानीय गैजेट्स के हेरफेर की व्यापक संभावनाओं को प्रदर्शित करता है।
स्थानीय गैजेट्स से जेलब्रेक
यह भी संभव है कि अनुमति प्राप्त फ़ोल्डरों से जेलब्रेक किया जाए, उन फ़ोल्डरों में स्थापित सॉफ़्टवेयर द्वारा उत्पन्न सिमलिंक का पालन करके, जैसे:
Cacti Log:
/usr/share/cacti/site/
->/var/log/cacti/
Solr Data:
/usr/share/solr/data/
->/var/lib/solr/data
Solr Config:
/usr/share/solr/conf/
->/etc/solr/conf/
MediaWiki Config:
/usr/share/mediawiki/config/
->/var/lib/mediawiki/config/
SimpleSAMLphp Config:
/usr/share/simplesamlphp/config/
->/etc/simplesamlphp/
इसके अलावा, सिमलिंक का दुरुपयोग करते हुए Redmine में RCE प्राप्त करना संभव था।
हैंडलर भ्रम
यह हमला AddHandler
और AddType
निर्देशों के बीच कार्यक्षमता के ओवरलैप का लाभ उठाता है, जिन्हें PHP प्रोसेसिंग सक्षम करने के लिए उपयोग किया जा सकता है। मूल रूप से, ये निर्देश सर्वर की आंतरिक संरचना में विभिन्न क्षेत्रों (r->handler
और r->content_type
क्रमशः) को प्रभावित करते थे। हालाँकि, विरासत कोड के कारण, Apache इन निर्देशों को कुछ स्थितियों के तहत परस्पर संभालता है, यदि पूर्व निर्धारित है और बाद वाला नहीं है तो r->content_type
को r->handler
में परिवर्तित करता है।
इसके अलावा, Apache HTTP Server (server/config.c#L420
) में, यदि r->handler
ap_run_handler()
को निष्पादित करने से पहले खाली है, तो सर्वर r->content_type
को हैंडलर के रूप में उपयोग करता है, प्रभावी रूप से AddType
और AddHandler
को प्रभाव में समान बना देता है।
PHP स्रोत कोड का खुलासा करने के लिए हैंडलर को ओवरराइट करें
इस वार्ता में एक भेद्यता प्रस्तुत की गई थी जहां एक गलत Content-Length
जो क्लाइंट द्वारा भेजा गया था, Apache को गलती से PHP स्रोत कोड लौटाने का कारण बन सकता है। यह ModSecurity और Apache Portable Runtime (APR) के साथ एक त्रुटि हैंडलिंग समस्या के कारण था, जहां एक डबल प्रतिक्रिया r->content_type
को text/html
पर ओवरराइट करने का कारण बनती है।
क्योंकि ModSecurity सही तरीके से लौटाए गए मानों को संभाल नहीं करता है, यह PHP कोड लौटाएगा और इसे व्याख्या नहीं करेगा।
XXXX के लिए हैंडलर को ओवरराइट करें
TODO: Orange ने अभी तक इस भेद्यता का खुलासा नहीं किया है
मनमाने हैंडलर्स को सक्रिय करें
यदि एक हमलावर सर्वर प्रतिक्रिया में Content-Type
हेडर को नियंत्रित करने में सक्षम है, तो वह मनमाने मॉड्यूल हैंडलर्स को सक्रिय करने में सक्षम होगा। हालाँकि, जब हमलावर इसे नियंत्रित करता है, तो अधिकांश अनुरोध की प्रक्रिया पूरी हो चुकी होगी। हालाँकि, यह संभव है कि Location
हेडर का दुरुपयोग करके अनुरोध प्रक्रिया को फिर से शुरू किया जाए क्योंकि यदि r द्वारा लौटाया गया Status
200 है और Location
हेडर /
से शुरू होता है, तो प्रतिक्रिया को सर्वर-साइड रीडायरेक्शन के रूप में माना जाता है और इसे संसाधित किया जाना चाहिए।
RFC 3875 (CGI के बारे में विनिर्देश) के अनुसार धारा 6.2.2 एक स्थानीय रीडायरेक्ट प्रतिक्रिया व्यवहार को परिभाषित करता है:
CGI स्क्रिप्ट एक स्थान हेडर फ़ील्ड में एक URI पथ और क्वेरी-स्ट्रींग (‘local-pathquery’) लौटा सकती है। यह सर्वर को यह संकेत देता है कि इसे निर्दिष्ट पथ का उपयोग करके अनुरोध को फिर से संसाधित करना चाहिए।
इसलिए, इस हमले को करने के लिए निम्नलिखित में से एक भेद्यता की आवश्यकता है:
CGI प्रतिक्रिया हेडर में CRLF इंजेक्शन
प्रतिक्रिया हेडर के पूर्ण नियंत्रण के साथ SSRF
जानकारी के खुलासे के लिए मनमाना हैंडलर
उदाहरण के लिए /server-status
केवल स्थानीय रूप से सुलभ होना चाहिए:
यह संभव है कि Content-Type
को server-status
पर सेट करके और Location हेडर को /
से शुरू करके इसे एक्सेस किया जा सके।
मनमाने हैंडलर से पूर्ण SSRF
किसी भी URL पर किसी भी प्रोटोकॉल तक पहुँचने के लिए mod_proxy
पर रीडायरेक्ट करना:
हालांकि, X-Forwarded-For
हेडर जोड़ा गया है जो क्लाउड मेटाडेटा एंडपॉइंट्स तक पहुंच को रोकता है।
स्थानीय यूनिक्स डोमेन सॉकेट तक पहुंच के लिए मनमाना हैंडलर
PHP-FPM के स्थानीय यूनिक्स डोमेन सॉकेट तक पहुंच प्राप्त करें ताकि /tmp/
में स्थित PHP बैकडोर को निष्पादित किया जा सके:
मनमाने हैंडलर से RCE
आधिकारिक PHP Docker इमेज में PEAR (Pearcmd.php
) शामिल है, जो एक कमांड-लाइन PHP पैकेज प्रबंधन उपकरण है, जिसका दुरुपयोग RCE प्राप्त करने के लिए किया जा सकता है:
Check Docker PHP LFI Summary, written by Phith0n for the details of this technique.
References
Last updated