hacktricks/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow
2024-04-01 23:13:18 +00:00
..
ret2lib Translated ['exploiting/linux-exploiting-basic-esp/README.md', 'reversin 2024-03-31 10:11:40 +00:00
README.md Translated ['reversing-and-exploiting/linux-exploiting-basic-esp/arbitra 2024-03-30 23:49:19 +00:00
ret2csu.md Translated ['reversing-and-exploiting/linux-exploiting-basic-esp/common- 2024-03-31 17:53:18 +00:00
ret2dlresolve.md Translated ['reversing-and-exploiting/linux-exploiting-basic-esp/common- 2024-03-31 17:53:18 +00:00
ret2esp-ret2reg.md Translated ['exploiting/linux-exploiting-basic-esp/README.md', 'reversin 2024-03-31 10:11:40 +00:00
ret2shellcode.md Translated ['exploiting/linux-exploiting-basic-esp/README.md', 'reversin 2024-03-29 12:58:27 +00:00
ret2win.md Translated ['reversing-and-exploiting/linux-exploiting-basic-esp/stack-o 2024-04-01 23:13:18 +00:00
rop-return-oriented-programing.md Translated ['reversing-and-exploiting/linux-exploiting-basic-esp/common- 2024-03-31 17:53:18 +00:00
rop-syscall-execv.md Translated ['reversing-and-exploiting/linux-exploiting-basic-esp/common- 2024-03-31 17:53:18 +00:00
srop-sigreturn-oriented-programming.md Translated ['reversing-and-exploiting/linux-exploiting-basic-esp/common- 2024-03-31 17:53:18 +00:00
stack-pivoting-ebp2ret-ebp-chaining.md Translated ['reversing-and-exploiting/linux-exploiting-basic-esp/common- 2024-03-31 17:53:18 +00:00
stack-shellcode.md Translated ['reversing-and-exploiting/linux-exploiting-basic-esp/arbitra 2024-03-30 23:49:19 +00:00

Υπερχείλιση Στοίβας

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Red Team του HackTricks AWS)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Τι είναι μια Υπερχείλιση Στοίβας

Η υπερχείλιση στοίβας είναι μια ευπάθεια που συμβαίνει όταν ένα πρόγραμμα γράφει περισσότερα δεδομένα στη στοίβα από ό,τι έχει εκχωρηθεί για να κρατήσει. Αυτά τα περισσότερα δεδομένα θα αντικαταστήσουν τον δίπλα μνημονικό χώρο, οδηγώντας στη διαφθορά των έγκυρων δεδομένων, στη διαταραχή της ροής ελέγχου και ενδεχομένως στην εκτέλεση κακόβουλου κώδικα. Αυτό το πρόβλημα προκύπτει συχνά λόγω της χρήσης μη ασφαλών συναρτήσεων που δεν πραγματοποιούν έλεγχο ορίων στην είσοδο.

Το κύριο πρόβλημα αυτής της υπερχείλισης είναι ότι οι δείκτες EIP και EBP για την επιστροφή στην προηγούμενη συνάρτηση αποθηκεύονται στη στοίβα. Επομένως, ένας επιτιθέμενος θα μπορούσε να αντικαταστήσει αυτούς και να ελέγξει τη ροή εκτέλεσης του προγράμματος.

Η ευπάθεια συνήθως προκύπτει επειδή μια συνάρτηση αντιγράφει μέσα στη στοίβα περισσότερα bytes από την ποσότητα που έχει εκχωρηθεί γι' αυτήν, επομένως είναι δυνατόν να αντικαταστήσει άλλα μέρη της στοίβας.
Κάποιες συνήθεις συναρτήσεις ευάλωτες σε αυτό είναι: strcpy, strcat, sprintf, gets, fgets...

Για παράδειγμα, οι ακόλουθες συναρτήσεις θα μπορούσαν να είναι ευάλωτες:

void vulnerable() {
char buffer[128];
printf("Enter some text: ");
gets(buffer); // This is where the vulnerability lies
printf("You entered: %s\n", buffer);
}

Εντοπισμός Υπερχείλισης Στοίβας

Ο πιο συνηθισμένος τρόπος για να βρείτε υπερχείλιση στη στοίβα είναι να δώσετε ένα πολύ μεγάλο είσοδο από As (π.χ. python3 -c 'print("A"*1000)') και να περιμένετε ένα Segmentation Fault που υποδηλώνει ότι η διεύθυνση 0x41414141 προσπαθήθηκε να προσπελαστεί.

Επιπλέον, αφού εντοπίσετε ότι υπάρχει ευπάθεια στη στοίβα, θα χρειαστεί να βρείτε τη μετατόπιση μέχρι να είναι δυνατή η αντικατάσταση του δείκτη EIP, για αυτό συνήθως χρησιμοποιείται μια ακολουθία De Bruijn. Η οποία για ένα δεδομένο αλφάβητο μεγέθους k και υποακολουθίες μήκους n είναι μια κυκλική ακολουθία στην οποία κάθε δυνατή υποακολουθία μήκους n εμφανίζεται ακριβώς μία φορά ως μια συνεχής υποακολουθία.

Με αυτόν τον τρόπο, αντί να χρειάζεται να καθορίσετε με το χέρι ποια μετατόπιση αντικαθιστά το EIP, είναι δυνατό να χρησιμοποιηθεί μια από αυτές τις ακολουθίες ως πλήρωμα και στη συνέχεια να βρεθεί η μετατόπιση των bytes που τελείωσαν με την αντικατάστασή του.

Είναι δυνατό να χρησιμοποιηθεί το pwntools γι' αυτό:

from pwn import *

# Generate a De Bruijn sequence of length 1000 with an alphabet size of 256 (byte values)
pattern = cyclic(1000)

# This is an example value that you'd have found in the EIP/IP register upon crash
eip_value = p32(0x6161616c)
offset = cyclic_find(eip_value)  # Finds the offset of the sequence in the De Bruijn pattern
print(f"The offset is: {offset}")

ή GEF:

#Patterns
pattern create 200 #Generate length 200 pattern
pattern search "avaaawaa" #Search for the offset of that substring
pattern search $rsp #Search the offset given the content of $rsp

Εκμετάλλευση Υπερχείλισης Στοίβας

Κατά τη διάρκεια μιας υπερχείλισης (υποθέτοντας ότι το μέγεθος της υπερχείλισης είναι αρκετά μεγάλο) θα μπορείτε να αντικαταστήσετε τιμές άλλων μεταβλητών μέσα στη στοίβα μέχρι να φτάσετε το EBP και το EIP (ή ακόμα περισσότερο).
Ο πιο συνηθισμένος τρόπος να εκμεταλλευτείτε αυτόν τον τύπο ευπαθειών είναι με το τροποποίηση του δείκτη EIP έτσι ώστε όταν η συνάρτηση τελειώσει, η ροή ελέγχου θα ανακατευθυνθεί όπου ο χρήστης καθόρισε σε αυτόν τον δείκτη.

Ωστόσο, σε άλλα σενάρια, ίσως απλά η αντικατάσταση μερικών τιμών μεταβλητών στη στοίβα είναι αρκετή για την εκμετάλλευση (όπως σε εύκολες προκλήσεις CTF).

Ret2win

Σε αυτού του τύπου τις προκλήσεις CTF, υπάρχει μια συνάρτηση μέσα στο δυαδικό που ποτέ δεν καλείται και πρέπει να καλέσετε για να κερδίσετε. Για αυτές τις προκλήσεις απλά πρέπει να βρείτε τη μετατόπιση για την αντικατάσταση του EIP και να βρείτε τη διεύθυνση της συνάρτησης που πρέπει να καλέσετε (συνήθως το ASLR θα είναι απενεργοποιημένο) έτσι ώστε όταν η ευάλωτη συνάρτηση επιστρέψει, η κρυφή συνάρτηση θα κληθεί:

{% content-ref url="ret2win.md" %} ret2win.md {% endcontent-ref %}

Shellcode Στοίβας

Σε αυτό το σενάριο, ο επιτιθέμενος μπορεί να τοποθετήσει ένα shellcode στη στοίβα και να εκμεταλλευτεί τον ελεγχόμενο EIP για να μεταβεί στο shellcode και να εκτελέσει τον κώδικα του επιτιθέμενου:

{% content-ref url="stack-shellcode.md" %} stack-shellcode.md {% endcontent-ref %}

ROP

Αυτή η τεχνική είναι το θεμέλιο πλαίσιο για να παρακάμψετε την κύρια προστασία στην προηγούμενη τεχνική: Μη εκτελέσιμη στοίβα. Και επιτρέπει την εκτέλεση πολλών άλλων τεχνικών (ret2lib, ret2syscall...) που θα οδηγήσουν στην εκτέλεση αυθαίρετων εντολών με την κατάχρηση υπαρχόντων οδηγιών στο δυαδικό:

{% content-ref url="rop-return-oriented-programing.md" %} rop-return-oriented-programing.md {% endcontent-ref %}

Τύποι προστασιών

Υπάρχουν πολλές προστασίες που προσπαθούν να αποτρέψουν την εκμετάλλευση των ευπαθειών, ελέγξτε τις στο:

{% content-ref url="../common-binary-protections-and-bypasses/" %} common-binary-protections-and-bypasses {% endcontent-ref %}

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks: