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