6.1 KiB
LFI2RCE के माध्यम से PHP_SESSION_UPLOAD_PROGRESS
{% hint style="success" %}
AWS हैकिंग सीखें और अभ्यास करें:HackTricks प्रशिक्षण AWS रेड टीम विशेषज्ञ (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks प्रशिक्षण GCP रेड टीम विशेषज्ञ (GRTE)
हैकट्रिक्स का समर्थन करें
- सदस्यता योजनाएं की जाँच करें!
- 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह में शामिल हों या हमें ट्विटर 🐦 @hacktricks_live** पर फॉलो** करें।
- HackTricks और HackTricks Cloud github रेपो में पीआर सबमिट करके हैकिंग ट्रिक्स साझा करें।
मूल जानकारी
अगर आपने स्थानीय फ़ाइल समावेशन पाया है भले ही आपके पास कोई सत्र न हो और 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/