Ret2ret & Reo2pop
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.
Ret2ret
Ο κύριος στόχος αυτής της τεχνικής είναι να προσπαθήσει να παρακάμψει το ASLR εκμεταλλευόμενος έναν υπάρχοντα δείκτη στη στοίβα.
Βασικά, οι υπερχειλίσεις της στοίβας προκαλούνται συνήθως από συμβολοσειρές, και οι συμβολοσειρές τελειώνουν με ένα null 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
θα δείχνει στη τέλεια διεύθυνση στη στοίβα χωρίς καμία αλλαγή.
Ακολουθώντας αυτόν τον σύνδεσμο μπορείτε να δείτε ένα παράδειγμα ενός ευάλωτου δυαδικού και σε αυτόν την εκμετάλλευση.
References
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.