hacktricks/binary-exploitation/basic-stack-binary-exploitation-methodology
2024-06-18 11:48:19 +00:00
..
tools Translated ['binary-exploitation/basic-stack-binary-exploitation-methodo 2024-06-18 11:48:19 +00:00
elf-tricks.md Translated ['binary-exploitation/basic-stack-binary-exploitation-methodo 2024-06-18 11:48:19 +00:00
README.md Translated ['binary-exploitation/basic-stack-binary-exploitation-methodo 2024-06-18 11:48:19 +00:00

Βασική Μεθοδολογία Εκμετάλλευσης Δυαδικών Αρχείων

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

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

Βασικές Πληροφορίες ELF

Πριν αρχίσετε να εκμεταλλεύεστε οτιδήποτε, είναι ενδιαφέρον να κατανοήσετε μέρος της δομής ενός δυαδικού ELF αρχείου:

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

Εργαλεία Εκμετάλλευσης

{% content-ref url="tools/" %} εργαλεία {% endcontent-ref %}

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

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

Έλεγχος της Ροής

Υπάρχουν διαφορετικοί τρόποι με τους οποίους μπορείτε να ελέγξετε τη ροή ενός προγράμματος:

  • Υπερχείλιση Στοίβας αντικαθιστώντας το δείκτη επιστροφής από τη στοίβα ή το EBP -> ESP -> EIP.
  • Ίσως χρειαστεί να εκμεταλλευτείτε ένα Υπερχείλιση Ακεραίων για να προκαλέσετε την υπερχείλιση
  • Ή μέσω Αυθαίρετων Εγγραφών + Γράψε Τι Πού στην Εκτέλεση
  • Συμβολοσειρές μορφοποίησης: Εκμεταλλευτείτε το printf για να γράψετε αυθαίρετο περιεχόμενο σε αυθαίρετες διευθύνσεις.
  • Δείκτες Πίνακα: Εκμεταλλευτείτε έναν κακά σχεδιασμένο δείκτη για να μπορείτε να ελέγχετε ορισμένους πίνακες και να λάβετε μια αυθαίρετη εγγραφή.
  • Ίσως χρειαστεί να εκμεταλλευτείτε ένα Υπερχείλιση Ακεραίων για να προκαλέσετε την υπερχείλιση
  • bof σε WWW μέσω ROP: Εκμεταλλευτείτε μια υπερχείλιση buffer για να κατασκευάσετε ένα ROP και να μπορείτε να λάβετε ένα WWW.

Μπορείτε να βρείτε τις τεχνικές Γράψε Τι Πού στην Εκτέλεση στο:

{% content-ref url="../arbitrary-write-2-exec/" %} arbitrary-write-2-exec {% endcontent-ref %}

Αιώνιοι Βρόχοι

Κάτι που πρέπει να ληφθεί υπόψη είναι ότι συνήθως μια εκμετάλλευση ενός ευπαθούς σημείου ενδέχεται να μην είναι αρκετή για να εκτελέσετε μια επιτυχημένη εκμετάλλευση, ειδικά αν χρειάζεται να παρακαμφθούν κάποιες προστασίες. Επομένως, είναι ενδιαφέρον να συζητηθούν κάποιες επιλογές για το κάνετε ένα ευπαθές σημείο εκμετάλλευσης αρκετές φορές στην ίδια εκτέλεση του δυαδικού:

  • Γράψτε σε μια αλυσίδα ROP τη διεύθυνση της συνάρτησης main ή στη διεύθυνση όπου συμβαίνει η ευπαθής σημείο.
  • Ελέγχοντας μια κατάλληλη αλυσίδα ROP, μπορείτε να εκτελέσετε όλες τις ενέργειες σε αυτή την αλυσίδα
  • Γράψτε στη διεύθυνση exit στο GOT (ή οποιαδήποτε άλλη συνάρτηση που χρησιμοποιείται από το δυαδικό πριν το τέλος) τη διεύθυνση για να πάτε πίσω στο ευπαθές σημείο
  • Όπως εξηγείται στο .fini_array, αποθηκεύστε 2 συναρτήσεις εδώ, μία για να καλέσετε ξανά το ευπαθές σημείο και μία για να καλέσετε την**__libc_csu_fini** που θα καλέσει ξανά τη συνάρτηση από το .fini_array.

Στόχοι Εκμετάλλευσης

Στόχος: Κάλεσε μια Υπάρχουσα συνάρτηση

  • ret2win: Υπάρχει μια συνάρτηση στον κώδικα που πρέπει να καλέσετε (ίσως με κάποιες συγκεκριμένες παραμέτρους) για να λάβετε τη σημαία.
  • Σε ένα κανονικό bof χωρίς PIE και canary, απλά χρειάζεται να γράψετε τη διεύθυνση στη διεύθυνση επιστροφής που αποθηκεύεται στη στοίβα.
  • Σε ένα bof με PIE, θα χρειαστεί να το παρακάμψετε
  • Σε ένα bof με canary, θα χρειαστεί να το παρακάμψετε
  • Αν χρειάζεστε να ορίσετε αρκετές παραμέτρους για να καλέσετε σωστά τη συνάρτηση ret2win μπορείτε να χρησιμοποιήσετε:
  • Μια ROP αλυσίδα αν υπάρχουν αρκετά gadgets για να προετοιμάσετε όλες τις παραμέτρους
  • SROP (σε περίπτωση που μπορείτε να καλέσετε αυτή τη συνάρτηση συστήματος) για να ελέγξετε πολλούς καταχωρητές
  • Gadgets από ret2csu και ret2vdso για να ελέγξετε πολλούς καταχωρητές
  • Μέσω ενός Γράψε Τι Πού στην Εκτέλεση μπορείτε να εκμεταλλευτείτε άλλες ευπαθείς σημεία (όχι bof) για να καλέσετε τη συνάρτηση win.
  • Ανακατευτήρες Δεικτών: Σε περίπτωση που η στοίβα περιέχει δείκτες προς μια συνάρτηση που θα κληθεί ή προς μια συμβολοσειρά που θα χρησιμοποιηθεί από μια εν

Μέσω κλήσεων συστήματος

  • Ret2syscall: Χρήσιμο για να καλέσετε την execve για να εκτελέσετε τυχαίες εντολές. Πρέπει να μπορείτε να βρείτε τα gadgets για να καλέσετε τη συγκεκριμένη κλήση συστήματος με τις παραμέτρους.
  • Εάν το ASLR ή το PIE είναι ενεργοποιημένα, θα πρέπει να τα ξεπεράσετε για να χρησιμοποιήσετε ROP gadgets από το δυαδικό αρχείο ή τις βιβλιοθήκες.
  • Το SROP μπορεί να είναι χρήσιμο για να προετοιμάσετε το ret2execve
  • Gadgets από το ret2csu και το ret2vdso για τον έλεγχο πολλών καταχωρητών

Μέσω της libc

  • Ret2lib: Χρήσιμο για να καλέσετε μια συνάρτηση από μια βιβλιοθήκη (συνήθως από την libc) όπως το system με μερικές προετοιμασμένες παραμέτρους (π.χ. '/bin/sh'). Χρειάζεστε το δυαδικό αρχείο να φορτώσει τη βιβλιοθήκη με τη συνάρτηση που θα θέλατε να καλέσετε (συνήθως η libc).
  • Εάν είναι στατικά μεταγλωττισμένο και χωρίς PIE, η διεύθυνση του system και του /bin/sh δεν θα αλλάξουν, οπότε είναι δυνατόν να τα χρησιμοποιήσετε στατικά.
  • Χωρίς ASLR και γνωρίζοντας την έκδοση της libc που φορτώθηκε, η διεύθυνση του system και του /bin/sh δεν θα αλλάξουν, οπότε είναι δυνατόν να τα χρησιμοποιήσετε στατικά.
  • Με ASLR αλλά χωρίς PIE, γνωρίζοντας την libc και με το δυαδικό αρχείο να χρησιμοποιεί τη λειτουργία system είναι δυνατόν να ret στη διεύθυνση του συστήματος στο GOT με τη διεύθυνση του '/bin/sh' στην παράμετρο (θα πρέπει να το ανακαλύψετε).
  • Με ASLR αλλά χωρίς PIE, γνωρίζοντας την libc και χωρίς το δυαδικό αρχείο να χρησιμοποιεί τη λειτουργία system:
  • Χρησιμοποιήστε το ret2dlresolve για να επιλύσετε τη διεύθυνση του system και να την καλέσετε
  • Ξεπεράστε το ASLR και υπολογίστε τη διεύθυνση του system και του '/bin/sh' στη μνήμη.
  • Με ASLR και PIE και χωρίς γνώση της libc: Χρειάζεστε:
  • Ξεπεράστε το PIE
  • Βρείτε τη έκδοση της libc που χρησιμοποιείται (διαρροή μερικών διευθύνσεων συναρτήσεων)
  • Ελέγξτε τα προηγούμενα σενάρια με ASLR για να συνεχίσετε.

Μέσω EBP/RBP

  • Stack Pivoting / EBP2Ret / EBP Chaining: Έλεγχος του ESP για τον έλεγχο του RET μέσω του αποθηκευμένου EBP στη στοίβα.
  • Χρήσιμο για off-by-one stack overflows
  • Χρήσιμο ως εναλλακτικός τρόπος για τον έλεγχο του EIP ενώ καταχράζεστε το EIP για την κατασκευή του φορτίου στη μνήμη και στη συνέχεια να μεταβείτε σε αυτό μέσω του EBP

Διάφορα

  • Ανακατεύοντας δείκτες: Σε περίπτωση που η στοίβα περιέχει δείκτες προς μια συνάρτηση που θα κληθεί ή προς ένα συμβολοσειρά που θα χρησιμοποιηθεί από μια ενδιαφέρουσα συνάρτηση (system ή printf), είναι δυνατόν να αντικαταστήσετε αυτήν τη διεύθυνση.
  • Το ASLR ή το PIE μπορεί να επηρεάσουν τις διευθύνσεις.
  • Μη αρχικοποιημένες μεταβλητές: Δεν ξέρετε ποτέ