Εκτύπωση Stack Canary
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.
Μεγέθυνση εκτυπωμένου stack
Φανταστείτε μια κατάσταση όπου ένα πρόγραμμα ευάλωτο σε stack overflow μπορεί να εκτελέσει μια puts λειτουργία δείχνοντας σε μέρος του stack overflow. Ο επιτιθέμενος γνωρίζει ότι το πρώτο byte του canary είναι ένα null byte (\x00
) και τα υπόλοιπα bytes του canary είναι τυχαία bytes. Στη συνέχεια, ο επιτιθέμενος μπορεί να δημιουργήσει μια υπερχείλιση που επικαλύπτει το stack μέχρι το πρώτο byte του canary.
Στη συνέχεια, ο επιτιθέμενος καλεί τη λειτουργία puts στη μέση του payload που θα εκτυπώσει όλα τα canary (εκτός από το πρώτο null byte).
Με αυτές τις πληροφορίες, ο επιτιθέμενος μπορεί να δημιουργήσει και να στείλει μια νέα επίθεση γνωρίζοντας το canary (στην ίδια συνεδρία προγράμματος).
Προφανώς, αυτή η τακτική είναι πολύ περιορισμένη καθώς ο επιτιθέμενος πρέπει να είναι σε θέση να εκτυπώσει το περιεχόμενο του payload του για να εξάγει το canary και στη συνέχεια να είναι σε θέση να δημιουργήσει ένα νέο payload (στην ίδια συνεδρία προγράμματος) και να στείλει την πραγματική υπερχείλιση buffer.
Παραδείγματα CTF:
- https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html
- 64 bit, ASLR ενεργοποιημένο αλλά χωρίς PIE, το πρώτο βήμα είναι να γεμίσει μια υπερχείλιση μέχρι το byte 0x00 του canary για να καλέσει στη συνέχεια το puts και να το διαρρεύσει. Με το canary δημιουργείται ένα ROP gadget για να καλέσει το puts για να διαρρεύσει τη διεύθυνση του puts από το GOT και ένα ROP gadget για να καλέσει το
system('/bin/sh')
- https://guyinatuxedo.github.io/14-ret_2_system/hxp18_poorCanary/index.html
- 32 bit, ARM, χωρίς relro, canary, nx, χωρίς pie. Υπερχείλιση με μια κλήση στο puts για να διαρρεύσει το canary + ret2lib καλώντας το
system
με μια ROP αλυσίδα για να pop r0 (arg/bin/sh
) και pc (διεύθυνση του system)
Αυθαίρετη Ανάγνωση
Με μια αυθαίρετη ανάγνωση όπως αυτή που παρέχεται από τις μορφές strings μπορεί να είναι δυνατό να διαρρεύσει το canary. Ελέγξτε αυτό το παράδειγμα: https://ir0nstone.gitbook.io/notes/types/stack/canaries και μπορείτε να διαβάσετε για την κακή χρήση των μορφών strings για να διαβάσετε αυθαίρετες διευθύνσεις μνήμης σε:
- https://guyinatuxedo.github.io/14-ret_2_system/asis17_marymorton/index.html
- Αυτή η πρόκληση εκμεταλλεύεται με πολύ απλό τρόπο μια μορφή string για να διαβάσει το canary από το stack
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.