Array Indexing

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

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

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

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

Ωστόσο, εδώ μπορείτε να βρείτε μερικά ωραία παραδείγματα:

  • Υπάρχουν 2 συγκρουόμενοι πίνακες, ένας για τις διευθύνσεις όπου αποθηκεύονται τα δεδομένα και ένας με τις διαστάσεις αυτών των δεδομένων. Είναι δυνατό να αντικατασταθεί ένας από τον άλλο, επιτρέποντας την εγγραφή μιας αυθαίρετης διεύθυνσης που την δείχνει ως μέγεθος. Αυτό επιτρέπει την εγγραφή της διεύθυνσης της συνάρτησης free στον πίνακα GOT και στη συνέχεια την αντικατάστασή της με τη διεύθυνση του system, και την κλήση της free από μνήμη με /bin/sh.

  • 64 bits, χωρίς nx. Αντικατάσταση μιας διάστασης για να πάρετε ένα είδος υπερχείλισης buffer όπου κάθε πράγμα θα χρησιμοποιηθεί ως διπλός αριθμός και θα ταξινομηθεί από τον μικρότερο στον μεγαλύτερο, επομένως είναι απαραίτητο να δημιουργηθεί ένα shellcode που πληροί αυτήν την απαίτηση, λαμβάνοντας υπόψη ότι το canary δεν πρέπει να μετακινηθεί από τη θέση του και τελικά να αντικατασταθεί το RIP με μια διεύθυνση προς ret, που πληροί τις προηγούμενες απαιτήσεις και τοποθετώντας τη μεγαλύτερη διεύθυνση μια νέα διεύθυνση που δείχνει στην αρχή του stack (διαρροή από το πρόγραμμα) έτσι ώστε να είναι δυνατή η χρήση του ret για να μεταβεί εκεί.

  • 64bits, χωρίς relro, canary, nx, χωρίς pie. Υπάρχει ένα off-by-one σε έναν πίνακα στη στοίβα που επιτρέπει τον έλεγχο ενός δείκτη που χορηγεί WWW (γράφει το άθροισμα όλων των αριθμών του πίνακα στην αντικατασταθείσα διεύθυνση από το off-by-one στον πίνακα). Η στοίβα ελέγχεται έτσι ώστε η διεύθυνση exit του GOT να αντικατασταθεί με pop rdi; ret, και στη στοίβα προστίθεται η διεύθυνση του main (επαναλαμβάνοντας στο main). Χρησιμοποιείται μια αλυσίδα ROP για να διαρρεύσει η διεύθυνση του put στο GOT χρησιμοποιώντας το puts (exit θα κληθεί έτσι θα καλέσει pop rdi; ret εκτελώντας έτσι αυτήν την αλυσίδα στη στοίβα). Τέλος χρησιμοποιείται μια νέα αλυσίδα ROP που εκτελεί ret2lib.

  • 32 bit, χωρίς relro, χωρίς canary, nx, pie. Εκμεταλλευτείτε ένα κακό δείκτη για να διαρρεύσετε διευθύνσεις της libc και της στοίβας από τη στοίβα. Εκμεταλλευτείτε την υπερχείλιση του buffer για να κάνετε ένα ret2lib καλώντας system('/bin/sh') (η διεύθυνση της στοίβας χρειάζεται για να παρακάμψει έναν έλεγχο).

Last updated