Print Stack Canary
Last updated
Last updated
Μάθετε & εξασκηθείτε στο Hacking του AWS:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο Hacking του GCP: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)
Φανταστείτε μια κατάσταση όπου ένα πρόγραμμα ευάλωτο στην υπερχείλιση του stack μπορεί να εκτελέσει μια συνάρτηση puts που δείχνει σε ένα μέρος της υπερχείλισης του stack. Ο επιτιθέμενος γνωρίζει ότι το πρώτο byte του canary είναι ένα μηδενικό byte (\x00
) και τα υπόλοιπα bytes του canary είναι τυχαία bytes. Στη συνέχεια, ο επιτιθέμενος μπορεί να δημιουργήσει μια υπερχείλιση που αντικαθιστά το stack μέχρι το πρώτο byte του canary.
Στη συνέχεια, ο επιτιθέμενος καλεί τη λειτουργικότητα puts στη μέση του φορτίου, το οποίο θα εκτυπώσει ολόκληρο το canary (εκτός από το πρώτο μηδενικό byte).
Με αυτές τις πληροφορίες ο επιτιθέμενος μπορεί να σχεδιάσει και να στείλει μια νέα επίθεση γνωρίζοντας το canary (στην ίδια συνεδρία προγράμματος).
Φυσικά, αυτή η τακτική είναι πολύ περιορισμένη, καθώς ο επιτιθέμενος πρέπει να είναι σε θέση να εκτυπώσει το περιεχόμενο του φορτίου του για να εξαγάγει το canary και στη συνέχεια να είναι σε θέση να δημιουργήσει ένα νέο φορτίο (στην ίδια συνεδρία προγράμματος) και να στείλει την πραγματική υπερχείλιση του buffer.
Παραδείγματα CTF:
64 bit, ενεργοποιημένο ASLR αλλά χωρίς PIE, το πρώτο βήμα είναι να γεμίσετε μια υπερχείλιση μέχρι το byte 0x00 του canary και στη συνέχεια να καλέσετε την puts για να διαρρεύσετε το canary. Με το canary δημιουργείται ένα ROP gadget για να καλέσει την puts και να διαρρεύσει τη διεύθυνση της puts από το GOT και ένα ROP gadget για να καλέσει system('/bin/sh')
32 bit, ARM, χωρίς relro, canary, nx, χωρίς pie. Υπερχείλιση με κλήση στην puts για να διαρρεύσει το canary + ret2lib καλώντας το system
με ένα ROP chain για να προκαλέσει το pop r0 (arg /bin/sh
) και pc (διεύθυνση του system)
Με μια αυθαίρετη ανάγνωση όπως αυτή που παρέχεται από τις format strings μπορεί να είναι δυνατόν να διαρρεύσει το canary. Ελέγξτε αυτό το παράδειγμα: https://ir0nstone.gitbook.io/notes/types/stack/canaries και μπορείτε να διαβάσετε για την κατάχρηση των format strings για την ανάγνωση αυθαίρετων διευθύνσεων μνήμης στο:
Format StringsΑυτή η πρόκληση καταχράζεται με έναν πολύ απλό τρόπο μια format string για να διαβάσει το canary από το stack
Μάθετε & εξασκηθείτε στο Hacking του AWS:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο Hacking του GCP: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)