LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS
मूल जानकारी
अगर आपने स्थानीय फ़ाइल समावेशन पाया है भले ही आपके पास कोई सत्र न हो और session.auto_start
ऑफ
है। अगर session.upload_progress.enabled
ऑन
है और आप मल्टीपार्ट POST डेटा में PHP_SESSION_UPLOAD_PROGRESS
प्रदान करते हैं, तो PHP आपके लिए सत्र सक्षम कर देगा।
सावधान रहें कि 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