hacktricks/src/pentesting-web/file-inclusion/via-php_session_upload_progress.md

38 lines
4.4 KiB
Markdown

# LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS
{{#include ../../banners/hacktricks-training.md}}
## 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**](https://blog.orange.tw/2018/10/) में जहां इस तकनीक का उल्लेख किया गया है, यह 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://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://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/](https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/) में।
{{#include ../../banners/hacktricks-training.md}}