Ret2lib + Printf leak - arm64
Last updated
Last updated
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Συγκέντρωση χωρίς καναρίδα:
Δημιουργώντας ένα μοτίβο με pattern create 200
, χρησιμοποιώντας το και ελέγχοντας για την απόσταση με pattern search $x30
μπορούμε να δούμε ότι η απόσταση είναι 108
(0x6c).
Ρίχνοντας μια ματιά στη διασπασμένη κύρια συνάρτηση μπορούμε να δούμε ότι θα θέλαμε να πηδήξουμε στην εντολή για να πηδήξουμε απευθείας στο printf
, της οποίας η απόσταση από το σημείο που φορτώνεται το δυαδικό είναι 0x860
:
/bin/sh
Καθώς το ASLR είναι απενεργοποιημένο, οι διευθύνσεις θα είναι πάντα οι ίδιες:
Πρέπει να έχουμε στο x0
τη διεύθυνση της συμβολοσειράς /bin/sh
και να καλέσουμε system
.
Χρησιμοποιώντας το rooper βρέθηκε ένα ενδιαφέρον gadget:
Αυτή η συσκευή θα φορτώσει το x0
από $sp + 0x18
και στη συνέχεια θα φορτώσει τις διευθύνσεις x29 και x30 από το sp και θα πηδήξει στο x30. Έτσι, με αυτή τη συσκευή μπορούμε να ελέγξουμε το πρώτο επιχείρημα και στη συνέχεια να πηδήξουμε στο σύστημα.
Συγκεντρώστε χωρίς καναρίνι:
Γύρος 1:
Διαρροή του PIE από τη στοίβα
Κατάχρηση bof για να επιστρέψουμε στο main
Γύρος 2:
Διαρροή της libc από τη στοίβα
ROP: ret2system
Ρυθμίζοντας ένα breakpoint πριν καλέσουμε το printf, είναι δυνατόν να δούμε ότι υπάρχουν διευθύνσεις για επιστροφή στο δυαδικό στην στοίβα και επίσης διευθύνσεις libc:
Δοκιμάζοντας διαφορετικά offsets, το %21$p
μπορεί να διαρρεύσει μια διεύθυνση δυαδικού (bypass PIE) και το %25$p
μπορεί να διαρρεύσει μια διεύθυνση libc:
Αφαιρώντας τη διαρρεύσουσα διεύθυνση libc από τη βασική διεύθυνση της libc, είναι δυνατόν να δούμε ότι το offset της διαρρεύσουσας διεύθυνσης από τη βάση είναι 0x49c40
.
Δείτε το προηγούμενο παράδειγμα καθώς το bof είναι το ίδιο.
Όπως στο προηγούμενο παράδειγμα, πρέπει να έχουμε στο x0
τη διεύθυνση της συμβολοσειράς /bin/sh
και να καλέσουμε system
.
Χρησιμοποιώντας το rooper, βρέθηκε ένα άλλο ενδιαφέρον gadget:
Αυτή η συσκευή θα φορτώσει το x0
από $sp + 0x78
και στη συνέχεια θα φορτώσει τις διευθύνσεις x29 και x30 από το sp και θα πηδήξει στο x30. Έτσι, με αυτή τη συσκευή μπορούμε να ελέγξουμε το πρώτο επιχείρημα και στη συνέχεια να πηδήξουμε στο system.
Μάθετε & εξασκηθείτε στο Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)