Ret2ret & Reo2pop

Υποστηρίξτε το HackTricks

Ret2ret

Ο κύριος στόχος αυτής της τεχνικής είναι να προσπαθήσει να παρακάμψει το ASLR εκμεταλλευόμενος έναν υπάρχοντα δείκτη στη στοίβα.

Βασικά, οι υπερχείλισεις στη στοίβα προκαλούνται συνήθως από συμβολοσειρές, και οι συμβολοσειρές τελειώνουν με ένα μηδενικό byte στο τέλος στη μνήμη. Αυτό επιτρέπει να προσπαθήσουμε να μειώσουμε τον τόπο που δείχνει ήδη ένας υπάρχον δείκτης στη στοίβα. Έτσι, αν η στοίβα περιείχε 0xbfffffdd, αυτή η υπερχείλιση θα μπορούσε να τη μετατρέψει σε 0xbfffff00 (σημειώστε το τελευταίο μηδενισμένο byte).

Αν αυτή η διεύθυνση δείχνει στο shellcode μας στη στοίβα, είναι δυνατόν να κάνουμε τη ροή να φτάσει σε αυτή τη διεύθυνση με το προσθήκη διευθύνσεων στην εντολή ret μέχρι να φτάσουμε σε αυτήν.

Έτσι η επίθεση θα ήταν ως εξής:

  • NOP sled

  • Shellcode

  • Αντικατάσταση της στοίβας από το EIP με διευθύνσεις προς την ret εντολή (RET sled)

  • 0x00 προστίθεται από τη συμβολοσειρά τροποποιώντας μια διεύθυνση από τη στοίβα καθιστώντας τη να δείχνει στο NOP sled

Ακολουθώντας αυτόν το σύνδεσμο μπορείτε να δείτε ένα παράδειγμα ενός ευάλωτου δυαδικού και σε αυτόν την εκμετάλλευση.

Ret2pop

Σε περίπτωση που μπορείτε να βρείτε έναν τέλειο δείκτη στη στοίβα που δεν θέλετε να τροποποιήσετε (στο ret2ret αλλάξαμε το τελικό χαμηλότερο byte σε 0x00), μπορείτε να εκτελέσετε την ίδια επίθεση ret2ret, αλλά το μήκος του RET sled πρέπει να είναι μικρότερο κατά 1 (ώστε το τελικό 0x00 να αντικαθιστά τα δεδομένα ακριβώς πριν τον τέλειο δείκτη), και η τελευταία διεύθυνση του RET sled πρέπει να δείχνει σε pop <reg>; ret. Με αυτόν τον τρόπο, τα δεδομένα πριν τον τέλειο δείκτη θα αφαιρεθούν από τη στοίβα (αυτά είναι τα δεδομένα που επηρεάζονται από το 0x00) και το τελικό ret θα δείχνει στην τέλεια διεύθυνση στη στοίβα χωρίς καμία αλλαγή.

Ακολουθώντας αυτόν το σύνδεσμο μπορείτε να δείτε ένα παράδειγμα ενός ευάλωτου δυαδικού και σε αυτόν την εκμετάλλευση.

Αναφορές

Υποστηρίξτε το HackTricks

Last updated