Ret2syscall
Basic Information
Αυτό είναι παρόμοιο με το Ret2lib, ωστόσο, σε αυτή την περίπτωση δεν θα καλούμε μια συνάρτηση από μια βιβλιοθήκη. Σε αυτή την περίπτωση, όλα θα είναι προετοιμασμένα για να καλέσουμε το syscall sys_execve
με ορισμένα επιχειρήματα για να εκτελέσουμε το /bin/sh
. Αυτή η τεχνική συνήθως εκτελείται σε δυαδικά αρχεία που είναι στατικά μεταγλωττισμένα, οπότε μπορεί να υπάρχουν πολλά gadgets και εντολές syscall.
Για να προετοιμάσουμε την κλήση για το syscall απαιτείται η εξής διαμόρφωση:
rax: 59 Specify sys_execve
rdi: ptr to "/bin/sh" specify file to execute
rsi: 0 specify no arguments passed
rdx: 0 specify no environment variables passed
Έτσι, βασικά χρειάζεται να γράψουμε τη συμβολοσειρά /bin/sh
κάπου και στη συνέχεια να εκτελέσουμε το syscall
(είναι σημαντικό να είμαστε προσεκτικοί με το padding που απαιτείται για τον έλεγχο της στοίβας). Για αυτό, χρειαζόμαστε ένα gadget για να γράψουμε το /bin/sh
σε μια γνωστή περιοχή.
Μια άλλη ενδιαφέρουσα syscall για κλήση είναι η mprotect
που θα επέτρεπε σε έναν επιτιθέμενο να τροποποιήσει τα δικαιώματα μιας σελίδας στη μνήμη. Αυτό μπορεί να συνδυαστεί με ret2shellcode.
Register gadgets
Ας ξεκινήσουμε βρίσκοντας πώς να ελέγξουμε αυτούς τους καταχωρητές:
Με αυτές τις διευθύνσεις είναι δυνατόν να γράψετε το περιεχόμενο στη στοίβα και να το φορτώσετε στους καταχωρητές.
Γράψτε συμβολοσειρά
Γραφική μνήμη
Πρώτα πρέπει να βρείτε ένα γράψιμο μέρος στη μνήμη
Γράψτε συμβολοσειρά στη μνήμη
Τότε πρέπει να βρείτε έναν τρόπο να γράψετε αυθαίρετο περιεχόμενο σε αυτή τη διεύθυνση
Αυτοματοποίηση αλυσίδας ROP
Η παρακάτω εντολή δημιουργεί μια πλήρη αλυσίδα ROP sys_execve
δεδομένου ενός στατικού δυαδικού αρχείου όταν υπάρχουν gadgets write-what-where και εντολές syscall:
32 bits
64 bits
Lacking Gadgets
Αν λείπουν gadgets, για παράδειγμα για να γράψετε /bin/sh
στη μνήμη, μπορείτε να χρησιμοποιήσετε την τεχνική SROP για να ελέγξετε όλες τις τιμές των καταχωρητών (συμπεριλαμβανομένων των RIP και των παραμέτρων καταχωρητών) από τη στοίβα:
Exploit Example
Άλλα Παραδείγματα & Αναφορές
64 bits, no PIE, nx, γράψτε σε κάποια μνήμη ένα ROP για να καλέσετε το
execve
και να μεταβείτε εκεί.64 bits, nx, no PIE, γράψτε σε κάποια μνήμη ένα ROP για να καλέσετε το
execve
και να μεταβείτε εκεί. Για να γράψετε στη στοίβα, εκμεταλλεύεστε μια συνάρτηση που εκτελεί μαθηματικές πράξεις.64 bits, no PIE, nx, BF canary, γράψτε σε κάποια μνήμη ένα ROP για να καλέσετε το
execve
και να μεταβείτε εκεί.
Last updated