Basic Stack Binary Exploitation Methodology
Βασικές Πληροφορίες ELF
Πριν αρχίσετε να εκμεταλλεύεστε οτιδήποτε, είναι ενδιαφέρον να κατανοήσετε μέρος της δομής ενός δυαδικού ELF:
ELF Basic InformationΕργαλεία Εκμετάλλευσης
Exploiting ToolsΜεθοδολογία Υπερχείλισης Στοίβας
Με τόσες τεχνικές, είναι καλό να έχετε ένα σχέδιο όταν κάθε τεχνική θα είναι χρήσιμη. Σημειώστε ότι οι ίδιες προστασίες θα επηρεάσουν διαφορετικές τεχνικές. Μπορείτε να βρείτε τρόπους να παρακάμψετε τις προστασίες σε κάθε ενότητα προστασίας, αλλά όχι σε αυτήν τη μεθοδολογία.
Έλεγχος της Ροής
Υπάρχουν διαφορετικοί τρόποι με τους οποίους μπορείτε να ελέγξετε τη ροή ενός προγράμματος:
Υπερχείλιση Στοίβας αντικαθιστώντας το δείκτη επιστροφής από τη στοίβα ή το EBP -> ESP -> EIP.
Ίσως χρειαστεί να εκμεταλλευτείτε ένα Ακέραιο Υπερχείλισης για να προκαλέσετε την υπερχείλιση
Ή μέσω Αυθαίρετων Εγγραφών + Γράψε Τι Πού στην Εκτέλεση
Συμβολοσειρές Μορφοποίησης: Εκμεταλλευτείτε το
printf
για να γράψετε αυθαίρετο περιεχόμενο σε αυθαίρετες διευθύνσεις.Δείκτες Πίνακα: Εκμεταλλευτείτε έναν κακά σχεδιασμένο δείκτη για να μπορείτε να ελέγχετε ορισμένους πίνακες και να λάβετε μια αυθαίρετη εγγραφή.
Ίσως χρειαστεί να εκμεταλλευτείτε ένα Ακέραιο Υπερχείλισης για να προκαλέσετε την υπερχείλιση
bof σε WWW μέσω ROP: Εκμεταλλευτείτε μια υπερχείλιση buffer για να κατασκευάσετε ένα ROP και να μπορείτε να λάβετε ένα WWW.
Μπορείτε να βρείτε τις τεχνικές Γράψε Τι Πού στην Εκτέλεση στο:
https://github.com/HackTricks-wiki/hacktricks/blob/gr/binary-exploitation/arbitrary-write-2-exec/README.mdΑιώνιοι Βρόχοι
Κάτι που πρέπει να ληφθεί υπόψη είναι ότι συνήθως μια εκμετάλλευση ενός ευπαθούς σημείου ενδέχεται να μην είναι αρκετή για να εκτελέσετε με επιτυχία μια εκμετάλλευση, ειδικά αν χρειάζεται να παρακαμφθούν κάποιες προστασίες. Επομένως, είναι ενδιαφέρον να συζητήσετε κάποιες επιλογές για να καταστήσετε μια μόνο ευπαθήτητα εκμεταλλεύσιμη πολλές φορές κατά την ίδια εκτέλεση του δυαδικού:
Γράψτε σε μια αλυσίδα ROP τη διεύθυνση της συνάρτησης
main
ή στη διεύθυνση όπου συμβαίνει η ευπαθήτητα.Ελέγχοντας μια κατάλληλη αλυσίδα ROP, μπορείτε να εκτελέσετε όλες τις ενέργειες σε αυτήν την αλυσίδα
Γράψτε στη διεύθυνση
exit
στο GOT (ή οποιαδήποτε άλλη συνάρτηση που χρησιμοποιείται από το δυαδικό πριν τη λήξη) τη διεύθυνση για να πάτε πίσω στην ευπαθήτηταΌπως εξηγείται στο .fini_array, αποθηκεύστε 2 συναρτήσεις εδώ, μία για να καλέσετε ξανά την ευπαθήτητα και μία για να καλέσετε την**
__libc_csu_fini
** που θα καλέσει ξανά τη συνάρτηση από το.fini_array
.
Στόχοι Εκμετάλλευσης
Στόχος: Κλήση Υπάρχουσας Συνάρτησης
ret2win: Υπάρχει μια συνάρτηση στον κώδικα που πρέπει να καλέσετε (ίσως με κάποιες συγκεκριμένες παραμέτρους) για να λάβετε τη σημαία.
Σε ένα bof με PIE, θα πρέπει να το παρακάμψετε
Σε ένα bof με canary, θα πρέπει να το παρακάμψετε
Αν χρειάζεστε να ορίσετε αρκετές παραμέτρους για να καλέσετε σωστά τη συνάρτηση ret2win μπορείτε να χρησιμοποιήσετε:
Μια ROP αλυσίδα αν υπάρχουν αρκετά gadgets για να προετοιμάσετε όλες τις παραμέτρους
SROP (σε περίπτωση που μπορείτε να καλέσετε αυτήν τη συνάρτηση συστήματος) για να ελέγξετε πολλούς καταχωρητές
Μέσω ενός Γράψε Τι Πού στην Εκτέλεση μπορείτε να εκμεταλλευτείτε άλλες ευπαθότητες (όχι bof) για να καλέσετε τη συνάρτηση
win
.Ανακατεύθυνση Δεικτών: Σε περίπτωση που η στοίβα περιέχει δείκτες προς μια συνάρτηση που θα κληθεί ή προς μια συμβολοσειρά που θα χρησιμοποιηθεί από μια ενδιαφέρουσα συνάρτηση (system ή printf), είναι δυνατό να αντικαταστήσετε αυτήν τη διεύθυνση.
[**Μη Αρχικοποιημένες μ
Μέσω κλήσεων συστήματος
Ret2syscall: Χρήσιμο για να καλέσετε την
execve
για να εκτελέσετε τυχαίες εντολές. Πρέπει να μπορείτε να βρείτε τα gadgets για να καλέσετε τη συγκεκριμένη κλήση συστήματος με τις παραμέτρους.Το SROP μπορεί να είναι χρήσιμο για να προετοιμάσετε το ret2execve
Μέσω της libc
Ret2lib: Χρήσιμο για να καλέσετε μια συνάρτηση από μια βιβλιοθήκη (συνήθως από την
libc
) όπως τοsystem
με μερικές προετοιμασμένες παραμέτρους (π.χ.'/bin/sh'
). Χρειάζεστε το δυαδικό αρχείο να φορτώσει τη βιβλιοθήκη με τη συνάρτηση που θα θέλατε να καλέσετε (συνήθως η libc).Εάν είναι στατικά μεταγλωττισμένο και χωρίς PIE, η διεύθυνση του
system
και του/bin/sh
δεν θα αλλάξουν, οπότε είναι δυνατόν να τα χρησιμοποιήσετε στατικά.Χωρίς ASLR και γνωρίζοντας την έκδοση της libc που φορτώθηκε, η διεύθυνση του
system
και του/bin/sh
δεν θα αλλάξουν, οπότε είναι δυνατόν να τα χρησιμοποιήσετε στατικά.Χρησιμοποιήστε το
ret2dlresolve
για να επιλύσετε τη διεύθυνση τουsystem
και να την καλέσετεΑντιμετωπίστε το ASLR και υπολογίστε τη διεύθυνση του
system
και του'/bin/sh'
στη μνήμη.Αντιμετωπίστε το PIE
Βρείτε τη έκδοση της
libc
που χρησιμοποιείται (διαρροή μερικών διευθύνσεων συναρτήσεων)Ελέγξτε τα προηγούμενα σενάρια με ASLR για να συνεχίσετε.
Μέσω EBP/RBP
Stack Pivoting / EBP2Ret / EBP Chaining: Έλεγχος του ESP για να ελέγξετε το RET μέσω του αποθηκευμένου EBP στη στοίβα.
Χρήσιμο για off-by-one stack overflows
Χρήσιμο ως εναλλακτικός τρόπος για τον έλεγχο του EIP ενώ καταχράζεστε το EIP για να κατασκευάσετε το φορτίο στη μνήμη και στη συνέχεια να μεταβείτε σε αυτό μέσω του EBP
Διάφορα
Pointers Redirecting: Σε περίπτωση που η στοίβα περιέχει δείκτες προς μια συνάρτηση που θα κληθεί ή προς ένα string που θα χρησιμοποιηθεί από μια ενδιαφέρουσα συνάρτηση (system ή printf), είναι δυνατόν να αντικαταστήσετε αυτήν τη διεύθυνση.
Τα Μη αρχικοποιημένα μεταβλητά: Δεν ξέρετε ποτέ
Last updated