Stack Shellcode
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)
Stack shellcode είναι μια τεχνική που χρησιμοποιείται στην binary exploitation όπου ένας επιτιθέμενος γράφει shellcode στη στοίβα ενός ευάλωτου προγράμματος και στη συνέχεια τροποποιεί τον Instruction Pointer (IP) ή τον Extended Instruction Pointer (EIP) για να δείξει στη θέση αυτού του shellcode, προκαλώντας την εκτέλεσή του. Αυτή είναι μια κλασική μέθοδος που χρησιμοποιείται για να αποκτήσει μη εξουσιοδοτημένη πρόσβαση ή να εκτελέσει αυθαίρετες εντολές σε ένα στοχευμένο σύστημα. Ακολουθεί μια ανάλυση της διαδικασίας, συμπεριλαμβανομένου ενός απλού παραδείγματος C και πώς θα μπορούσατε να γράψετε μια αντίστοιχη εκμετάλλευση χρησιμοποιώντας Python με pwntools.
Ας ξεκινήσουμε με ένα απλό παράδειγμα ενός ευάλωτου προγράμματος C:
Αυτό το πρόγραμμα είναι ευάλωτο σε υπερχείλιση μνήμης λόγω της χρήσης της συνάρτησης gets()
.
Για να συγκεντρώσετε αυτό το πρόγραμμα απενεργοποιώντας διάφορες προστασίες (για να προσομοιώσετε ένα ευάλωτο περιβάλλον), μπορείτε να χρησιμοποιήσετε την παρακάτω εντολή:
-fno-stack-protector
: Απενεργοποιεί την προστασία της στοίβας.
-z execstack
: Κάνει τη στοίβα εκτελέσιμη, κάτι που είναι απαραίτητο για την εκτέλεση του shellcode που είναι αποθηκευμένο στη στοίβα.
-no-pie
: Απενεργοποιεί το Position Independent Executable, διευκολύνοντας την πρόβλεψη της διεύθυνσης μνήμης όπου θα βρίσκεται το shellcode μας.
-m32
: Συμπιέζει το πρόγραμμα ως 32-bit εκτελέσιμο, συχνά χρησιμοποιούμενο για απλότητα στην ανάπτυξη εκμεταλλεύσεων.
Here's how you could write an exploit in Python using pwntools to perform a ret2shellcode attack:
Αυτό το σενάριο κατασκευάζει ένα payload που αποτελείται από μια NOP slide, το shellcode, και στη συνέχεια αντικαθιστά το EIP με τη διεύθυνση που δείχνει στην NOP slide, διασφαλίζοντας ότι το shellcode θα εκτελεστεί.
Η NOP slide (asm('nop')
) χρησιμοποιείται για να αυξήσει την πιθανότητα ότι η εκτέλεση θα "γλιστρήσει" στο shellcode μας ανεξάρτητα από τη ακριβή διεύθυνση. Ρυθμίστε το επιχείρημα p32()
στη διεύθυνση εκκίνησης του buffer σας συν ένα offset για να προσγειωθείτε στην NOP slide.
ASLR θα πρέπει να είναι απενεργοποιημένο για να είναι η διεύθυνση αξιόπιστη σε όλες τις εκτελέσεις ή η διεύθυνση όπου θα αποθηκευτεί η συνάρτηση δεν θα είναι πάντα η ίδια και θα χρειαστείτε κάποια leak για να καταλάβετε πού είναι φορτωμένη η win function.
Stack Canaries θα πρέπει επίσης να είναι απενεργοποιημένα ή η συμβιβασμένη διεύθυνση επιστροφής EIP δεν θα ακολουθηθεί ποτέ.
NX προστασία stack θα αποτρέψει την εκτέλεση του shellcode μέσα στο stack επειδή αυτή η περιοχή δεν θα είναι εκτελέσιμη.
64bit, ASLR με leak διεύθυνσης stack, γράψτε shellcode και πηδήξτε σε αυτό
32 bit, ASLR με leak stack, γράψτε shellcode και πηδήξτε σε αυτό
32 bit, ASLR με leak stack, σύγκριση για να αποτραπεί η κλήση στο exit(), αντικαταστήστε μια μεταβλητή με μια τιμή και γράψτε shellcode και πηδήξτε σε αυτό
arm64, χωρίς ASLR, ROP gadget για να κάνετε το stack εκτελέσιμο και να πηδήξετε στο shellcode στο stack
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)