hacktricks/pentesting-web/file-inclusion/via-php_session_upload_progress.md
Translator workflow 75e8745ba3 Translated to Hindi
2023-11-06 08:38:02 +00:00

8.9 KiB

LFI2RCE द्वारा PHP_SESSION_UPLOAD_PROGRESS

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

मूलभूत जानकारी

यदि आपने स्थानीय फ़ाइल सम्मिलन पाया है, तो यदि आपके पास एक सत्र नहीं है और session.auto_start Off है। यदि session.upload_progress.enabled On है और आप मल्टीपार्ट POST डेटा में PHP_SESSION_UPLOAD_PROGRESS प्रदान करते हैं, तो 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

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

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

प्रारंभिक प्रिफ़िक्स को हटाने के लिए चालाकी यह थी कि पेलोड को 3 बार base64encode किया जाता है और फिर convert.base64-decode फ़िल्टर के माध्यम से इसे डिकोड किया जाता है, इसलिए जब PHP बेस64 डिकोड करता है तो अजीब वर्ण हटा देता है, इसलिए 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/

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥