Python Internal Read Gadgets

Υποστηρίξτε το HackTricks

Βασικές Πληροφορίες

Διάφορες ευπάθειες όπως τα Python Format Strings ή η Ρύπανση Κλάσεων μπορεί να σας επιτρέψουν να διαβάσετε εσωτερικά δεδομένα της Python αλλά δεν θα σας επιτρέψουν να εκτελέσετε κώδικα. Συνεπώς, ένας pentester θα πρέπει να εκμεταλλευτεί αυτές τις δικαιώματα ανάγνωσης για να αποκτήσει ευαίσθητα προνόμια και να εξελίξει την ευπάθεια.

Flask - Διάβασμα μυστικού κλειδιού

Η κύρια σελίδα μιας εφαρμογής Flask πιθανότατα θα έχει το app παγκόσμιο αντικείμενο όπου αυτό το μυστικό είναι ρυθμισμένο.

app = Flask(__name__, template_folder='templates')
app.secret_key = '(:secret:)'

Σε αυτήν την περίπτωση είναι δυνατή η πρόσβαση σε αυτό το αντικείμενο χρησιμοποιώντας οποιοδήποτε gadget για πρόσβαση σε παγκόσμια αντικείμενα από τη σελίδα Παράκαμψης των αμμοθονών της Python.

Στην περίπτωση όπου η ευπάθεια βρίσκεται σε διαφορετικό αρχείο Python, χρειάζεστε ένα gadget για να διασχίσετε αρχεία και να φτάσετε στο κύριο αρχείο για πρόσβαση στο παγκόσμιο αντικείμενο app.secret_key για να αλλάξετε το μυστικό κλειδί του Flask και να είστε σε θέση να αναβαθμίσετε δικαιώματα γνωρίζοντας αυτό το κλειδί.

Ένα φορτίο όπως αυτό από αυτό το άρθρο:

__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key

Χρησιμοποιήστε αυτό το φορτίο για να αλλάξετε το app.secret_key (το όνομα στην εφαρμογή σας μπορεί να είναι διαφορετικό) ώστε να μπορείτε να υπογράψετε νέα και περισσότερα προνόμια στα cookies του flask.

Werkzeug - machine_id και node uuid

Χρησιμοποιώντας αυτό το φορτίο από αυτήν την ανάλυση θα μπορείτε να έχετε πρόσβαση στο machine_id και το uuid node, τα οποία είναι τα κύρια μυστικά που χρειάζεστε για να δημιουργήσετε το Werkzeug pin που μπορείτε να χρησιμοποιήσετε για να έχετε πρόσβαση στην python κονσόλα στο /console αν η λειτουργία αποσφαλμάτωσης είναι ενεργοποιημένη:

{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug]._machine_id}
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug].uuid._node}

Σημειώστε ότι μπορείτε να λάβετε τη τοπική διαδρομή των διακομιστών προς το app.py δημιουργώντας κάποιο σφάλμα στην ιστοσελίδα που θα σας δώσει τη διαδρομή.

Αν η ευπάθεια βρίσκεται σε διαφορετικό αρχείο Python, ελέγξτε το προηγούμενο κόλπο του Flask για πρόσβαση στα αντικείμενα από το κύριο αρχείο Python.

Υποστηρίξτε το HackTricks

Last updated