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