Werkzeug / Flask Debug
Last updated
Last updated
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Αποκτήστε την προοπτική ενός hacker για τις εφαρμογές σας, το δίκτυο και το cloud
Βρείτε και αναφέρετε κρίσιμες, εκμεταλλεύσιμες ευπάθειες με πραγματικό επιχειρηματικό αντίκτυπο. Χρησιμοποιήστε τα 20+ προσαρμοσμένα εργαλεία μας για να χαρτογραφήσετε την επιφάνεια επίθεσης, να βρείτε ζητήματα ασφαλείας που σας επιτρέπουν να κλιμακώσετε τα προνόμια και να χρησιμοποιήσετε αυτοματοποιημένα exploits για να συλλέξετε βασικά αποδεικτικά στοιχεία, μετατρέποντας τη σκληρή δουλειά σας σε πειστικές αναφορές.
Εάν η αποσφαλμάτωση είναι ενεργή, μπορείτε να προσπαθήσετε να αποκτήσετε πρόσβαση στο /console
και να αποκτήσετε RCE.
Υπάρχουν επίσης αρκετά exploits στο διαδίκτυο όπως αυτό ή ένα στο metasploit.
Σε ορισμένες περιπτώσεις, το /console
endpoint θα είναι προστατευμένο με ένα pin. Εάν έχετε μια ευπάθεια διαδρομής αρχείου, μπορείτε να διαρρεύσετε όλες τις απαραίτητες πληροφορίες για να δημιουργήσετε αυτό το pin.
Επιβάλετε μια σελίδα σφάλματος αποσφαλμάτωσης στην εφαρμογή για να δείτε αυτό:
Ένα μήνυμα σχετικά με το σενάριο "κλειδωμένη κονσόλα" συναντάται όταν προσπαθείτε να αποκτήσετε πρόσβαση στη διεπαφή αποσφαλμάτωσης του Werkzeug, υποδεικνύοντας την απαίτηση για έναν κωδικό PIN για να ξεκλειδώσετε την κονσόλα. Προτείνεται να εκμεταλλευτείτε τον κωδικό PIN της κονσόλας αναλύοντας τον αλγόριθμο δημιουργίας PIN στο αρχείο αρχικοποίησης αποσφαλμάτωσης του Werkzeug (__init__.py
). Μηχανισμός δημιουργίας PIN μπορεί να μελετηθεί από το Werkzeug source code repository, αν και συνιστάται να αποκτήσετε τον πραγματικό κωδικό του διακομιστή μέσω μιας ευπάθειας διαδρομής αρχείου λόγω πιθανών διαφορών έκδοσης.
Για να εκμεταλλευτείτε τον κωδικό PIN της κονσόλας, απαιτούνται δύο σύνολα μεταβλητών, probably_public_bits
και private_bits
:
probably_public_bits
username
: Αναφέρεται στον χρήστη που ξεκίνησε τη συνεδρία Flask.
modname
: Συνήθως ορίζεται ως flask.app
.
getattr(app, '__name__', getattr(app.__class__, '__name__'))
: Γενικά επιλύεται σε Flask.
getattr(mod, '__file__', None)
: Αντιπροσωπεύει την πλήρη διαδρομή προς το app.py
εντός του καταλόγου Flask (π.χ., /usr/local/lib/python3.5/dist-packages/flask/app.py
). Αν το app.py
δεν είναι εφαρμόσιμο, δοκιμάστε το app.pyc
.
private_bits
uuid.getnode()
: Ανακτά τη διεύθυνση MAC της τρέχουσας μηχανής, με το str(uuid.getnode())
να την μετατρέπει σε δεκαδική μορφή.
Για να καθορίσετε τη διεύθυνση MAC του διακομιστή, πρέπει να προσδιορίσετε τη δραστήρια δικτυακή διεπαφή που χρησιμοποιείται από την εφαρμογή (π.χ., ens3
). Σε περιπτώσεις αβεβαιότητας, διαρρεύστε το /proc/net/arp
για να βρείτε το ID της συσκευής, στη συνέχεια εξάγετε τη διεύθυνση MAC από /sys/class/net/<device id>/address
.
Η μετατροπή μιας δεκαεξαδικής διεύθυνσης MAC σε δεκαδική μπορεί να πραγματοποιηθεί όπως φαίνεται παρακάτω:
get_machine_id()
: Συνενώνει δεδομένα από το /etc/machine-id
ή το /proc/sys/kernel/random/boot_id
με την πρώτη γραμμή του /proc/self/cgroup
μετά την τελευταία κάθετο (/
).
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)