hacktricks/pentesting-web/file-inclusion/via-php_session_upload_progress.md

6.1 KiB

LFI2RCE के माध्यम से PHP_SESSION_UPLOAD_PROGRESS

{% hint style="success" %} AWS हैकिंग सीखें और अभ्यास करें:HackTricks प्रशिक्षण AWS रेड टीम विशेषज्ञ (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks प्रशिक्षण GCP रेड टीम विशेषज्ञ (GRTE)

हैकट्रिक्स का समर्थन करें
{% endhint %}

मूल जानकारी

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

$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange'
$ ls -a /var/lib/php/sessions/
. ..
$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange' -d 'PHP_SESSION_UPLOAD_PROGRESS=blahblahblah'
$ ls -a /var/lib/php/sessions/
. ..
$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange' -F 'PHP_SESSION_UPLOAD_PROGRESS=blahblahblah'  -F 'file=@/etc/passwd'
$ ls -a /var/lib/php/sessions/
. .. sess_iamorange

In the last example the session will contain the string blahblahblah

नोट करें कि PHP_SESSION_UPLOAD_PROGRESS के साथ आप सत्र के अंदर डेटा को नियंत्रित कर सकते हैं, इसलिए अगर आप अपने सत्र फ़ाइल को शामिल करते हैं तो आप एक हिस्सा शामिल कर सकते हैं जिसे आप नियंत्रित करते हैं (उदाहरण के लिए एक PHP शैलकोड)।

{% hint style="info" %} हालांकि इंटरनेट पर अधिकांश ट्यूटोरियल आपको डीबगिंग उद्देश्य के लिए session.upload_progress.cleanup को Off पर सेट करने की सिफारिश करते हैं। PHP में डिफ़ॉल्ट session.upload_progress.cleanup अब भी On है। इसका मतलब है कि आपका सत्र में अपलोड प्रगति को जल्द से जल्द साफ किया जाएगा। इसलिए यह रेस कंडीशन होगा। {% endhint %}

सीटीएफ

मूल CTF में जहां इस तकनीक पर टिप्पणी की गई है, वहां रेस कंडीशन का शोषण करना पर्याप्त नहीं था बल्कि लोड किया गया सामग्री भी @<?php स्ट्रिंग के साथ शुरू होनी चाहिए थी।

session.upload_progress.prefix की डिफ़ॉल्ट सेटिंग के कारण, हमारी सत्र फ़ाइल एक परेशान करने वाला उपसर्ग से शुरू होगी upload_progress_ जैसे: upload_progress_controlledcontentbyattacker

आदि उपसर्ग को हटाने का तरीका पेयलोड को 3 बार base64encode करना था और फिर convert.base64-decode फ़िल्टर के माध्यम से इसे डिकोड करना था, यह इसलिए क्योंकि जब भी base64 डिकोडिंग होगी तो PHP अजीब वर्ण हटा देगा, इसलिए 3 बार के बाद केवल हमें अटैकर द्वारा भेजा गया पेयलोड ही बचेगा (और फिर अटैकर प्रारंभिक हिस्से को नियंत्रित कर सकेगा)।

मूल लेख में अधिक जानकारी https://blog.orange.tw/2018/10/ और अंतिम शोषण https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py
एक और लेख में https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/