Print Stack Canary
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Φανταστείτε μια κατάσταση όπου ένα πρόγραμμα ευάλωτο σε 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 παραδείγματα:
64 bit, ASLR ενεργοποιημένο αλλά χωρίς PIE, το πρώτο βήμα είναι να γεμίσει μια υπερχείλιση μέχρι το byte 0x00 του canary για να καλέσει στη συνέχεια το puts και να το διαρρεύσει. Με το canary δημιουργείται ένα ROP gadget για να καλέσει το puts για να διαρρεύσει τη διεύθυνση του puts από το GOT και ένα ROP gadget για να καλέσει system('/bin/sh')
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 για να διαβάσετε τυχαίες διευθύνσεις μνήμης σε:
Format StringsΑυτή η πρόκληση εκμεταλλεύεται με πολύ απλό τρόπο μια μορφή string για να διαβάσει το canary από το stack
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)