SROP - Sigreturn-Oriented Programming
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Sigreturn
είναι μια ειδική syscall που χρησιμοποιείται κυρίως για να καθαρίσει μετά την ολοκλήρωση της εκτέλεσης ενός χειριστή σήματος. Τα σήματα είναι διακοπές που αποστέλλονται σε ένα πρόγραμμα από το λειτουργικό σύστημα, συχνά για να υποδείξουν ότι έχει συμβεί κάποια εξαιρετική κατάσταση. Όταν ένα πρόγραμμα λαμβάνει ένα σήμα, σταματά προσωρινά την τρέχουσα εργασία του για να χειριστεί το σήμα με έναν χειριστή σήματος, μια ειδική συνάρτηση σχεδιασμένη να ασχολείται με τα σήματα.
Αφού ο χειριστής σήματος ολοκληρώσει, το πρόγραμμα χρειάζεται να επανέλθει στην προηγούμενη κατάσταση του σαν να μην είχε συμβεί τίποτα. Εδώ έρχεται στο παιχνίδι το sigreturn
. Βοηθά το πρόγραμμα να επιστρέψει από τον χειριστή σήματος και αποκαθιστά την κατάσταση του προγράμματος καθαρίζοντας το πλαίσιο της στοίβας (το τμήμα μνήμης που αποθηκεύει κλήσεις συναρτήσεων και τοπικές μεταβλητές) που χρησιμοποιήθηκε από τον χειριστή σήματος.
Το ενδιαφέρον είναι πώς το sigreturn
αποκαθιστά την κατάσταση του προγράμματος: το κάνει αποθηκεύοντας όλες τις τιμές των καταχωρητών της CPU στη στοίβα. Όταν το σήμα δεν είναι πλέον αποκλεισμένο, το sigreturn
αφαιρεί αυτές τις τιμές από τη στοίβα, επαναφέροντας αποτελεσματικά τους καταχωρητές της CPU στην κατάσταση τους πριν από την επεξεργασία του σήματος. Αυτό περιλαμβάνει τον καταχωρητή δείκτη στοίβας (RSP), ο οποίος δείχνει στην τρέχουσα κορυφή της στοίβας.
Καλώντας τη syscall sigreturn
από μια αλυσίδα ROP και προσθέτοντας τις τιμές των καταχωρητών που θα θέλαμε να φορτώσει στη στοίβα, είναι δυνατό να ελέγξουμε όλες τις τιμές των καταχωρητών και επομένως να καλέσουμε για παράδειγμα τη syscall execve
με /bin/sh
.
Σημειώστε πώς αυτό θα ήταν μια τύπου Ret2syscall που διευκολύνει πολύ τον έλεγχο των παραμέτρων για να καλέσουμε άλλες Ret2syscalls:
Ret2syscallΑν είστε περίεργοι, αυτή είναι η δομή sigcontext που αποθηκεύεται στη στοίβα για να ανακτηθούν αργότερα οι τιμές (διάγραμμα από εδώ):
Για μια καλύτερη εξήγηση ελέγξτε επίσης:
Μπορείτε να βρείτε ένα παράδειγμα εδώ όπου η κλήση στο signeturn κατασκευάζεται μέσω ROP (βάζοντας στο rxa την τιμή 0xf
), αν και αυτό είναι το τελικό exploit από εκεί:
Δείτε επίσης το exploit από εδώ όπου το δυαδικό αρχείο καλούσε ήδη το sigreturn
και επομένως δεν είναι απαραίτητο να το κατασκευάσουμε με ένα ROP:
Assembly binary που επιτρέπει να γραφεί στη στοίβα και στη συνέχεια καλεί το sigreturn
syscall. Είναι δυνατόν να γραφτεί στη στοίβα ένα ret2syscall μέσω μιας δομής sigreturn και να διαβαστεί η σημαία που βρίσκεται μέσα στη μνήμη του binary.
Assembly binary που επιτρέπει να γραφεί στη στοίβα και στη συνέχεια καλεί το sigreturn
syscall. Είναι δυνατόν να γραφτεί στη στοίβα ένα ret2syscall μέσω μιας δομής sigreturn (το binary έχει τη συμβολοσειρά /bin/sh
).
64 bits, χωρίς relro, χωρίς canary, nx, χωρίς pie. Απλή υπερχείλιση buffer που εκμεταλλεύεται τη λειτουργία gets
με έλλειψη gadgets που εκτελεί ένα ret2syscall. Η αλυσίδα ROP γράφει /bin/sh
στο .bss
καλώντας ξανά το gets, εκμεταλλεύεται τη λειτουργία alarm
για να ορίσει το eax σε 0xf
για να καλέσει ένα SROP και να εκτελέσει ένα shell.
64 bits assembly πρόγραμμα, χωρίς relro, χωρίς canary, nx, χωρίς pie. Η ροή επιτρέπει να γραφτεί στη στοίβα, να ελεγχθούν αρκετοί καταχωρητές και να κληθεί ένα syscall και στη συνέχεια καλεί το exit
. Το επιλεγμένο syscall είναι ένα sigreturn
που θα ορίσει τους καταχωρητές και θα μετακινήσει το eip
για να καλέσει μια προηγούμενη εντολή syscall και να εκτελέσει το memprotect
για να ορίσει τον χώρο του binary σε rwx
και να ορίσει το ESP στον χώρο του binary. Ακολουθώντας τη ροή, το πρόγραμμα θα καλέσει ξανά το read intro ESP, αλλά σε αυτή την περίπτωση το ESP θα δείχνει στην επόμενη εντολή, έτσι ώστε η μεταφορά ενός shellcode να το γράψει ως την επόμενη εντολή και να το εκτελέσει.
Το SROP χρησιμοποιείται για να δώσει δικαιώματα εκτέλεσης (memprotect) στο σημείο όπου το shellcode τοποθετήθηκε.
Μάθε & εξάσκησε το AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθε & εξάσκησε το GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)