Εκτύπωση 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

Μεγέθυνση εκτυπωμένου 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 για να διαβάσετε αυθαίρετες διευθύνσεις μνήμης σε:

Format Strings

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