LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS

Reading time: 3 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें

Basic Info

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

bash
$ 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 शेलकोड)।

note

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

CTF

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

session.upload_progress.prefix की डिफ़ॉल्ट सेटिंग के कारण, हमारी SESSION फ़ाइल एक परेशान करने वाले उपसर्ग 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/ में।

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें