LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS

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

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

मूल जानकारी

अगर आपने स्थानीय फ़ाइल समावेशन पाया है भले ही आपके पास कोई सत्र न हो और session.auto_start ऑफ है। अगर session.upload_progress.enabled ऑन है और आप मल्टीपार्ट 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 शैलकोड)।

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

CTF

मूल 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/

Last updated