Δημιουργήστε το buffer . Ακολουθήστε αυτό το παράδειγμα :
# include int main ( ) { char χρήστη login_name [ 20 ] ? Printf ( " Πληκτρολογήστε το login : " ) ? scanf ( "% s " , όνομα χρήστη login_name ) ? printf ( " υπερχείλισης buffer ")? } Αυτό το βασικό κώδικα δημιουργεί μια σειρά χαρακτήρων ( μια λέξη , ουσιαστικά ) που ονομάζεται " όνομα χρήστη login_name " που θα κρατήσει την είσοδο του χρήστη . Παρατηρήστε ότι « χρήστη login_name " είναι μόνο 20 χαρακτήρες . Το πρόγραμμα ζητά στη συνέχεια για την είσοδο του χρήστη , και αποθηκεύει τις πληροφορίες σε " χρήστη login_name . " 2 προκαλέσει την υπερχείλιση του buffer . Η μεταγλώττιση του προγράμματος , και να το εκτελέσετε . Όταν η ζητηθεί , εισαγάγετε ένα όνομα χρήστη που υπερβαίνει τους 20 χαρακτήρες . Για παράδειγμα : Πληκτρολόγησε το όνομα : αυτό είναι μια μεγάλη πρόταση που θα ανατρέψουν το διαθέσιμο χώρο κατά τον ΕΙΣΟΔΟΣ Κυμαινόμενου Hit . " Enter". Το μήνυμα εξόδου θα εκτυπώσει και το πρόγραμμα θα τερματιστεί . Η μεταβλητή έχει υπερβεί το διαθέσιμο χώρο buffer στο " όνομα χρήστη login_name " μεταβλητή . Το ερώτημα είναι , τι συνέβη ; Κατανοήστε πώς λειτουργεί η μνήμη του υπολογιστή . Δεδομένου ότι η είσοδος του χρήστη αποθηκεύεται σε " χρήστη login_name , " η περίσσεια ενημέρωσης (με κάθε χαρακτήρα πέραν των 20 χαρακτήρες ) γράφτηκε στη μνήμη πέρα από τα όρια της μεταβλητής . Αυτά τα δεδομένα πρέπει να αποθηκεύονται κάπου . Στην περίπτωση αυτή , αποθηκεύεται στη μνήμη αμέσως γειτονικά προς όπου το " όνομα χρήστη login_name " μεταβλητή που βρίσκεται. Με πηγαίνει πέρα από τα όρια της μεταβλητής σύνδεσης , τα επιπλέον δεδομένα ( σκόπιμα ή όχι) αναμορφώνοντας τα δεδομένα αμέσως μαζί με τη μεταβλητή . Αυτό σημαίνει ότι ο χάκερ θα μπορούσε να ξαναγράψει βασικά κώδικα , και να αλλάξει το πώς λειτουργεί ο κώδικας , κατ 'ουσίαν, την ιδιοκτησία του συστήματος . Συνειδητοποιήστε τα τρωτά σημεία του Linux . Το Linux είναι γραμμένος σε C /C + + , και πολλά από τη βασική λειτουργικότητα του απαιτεί τη χειραγώγηση των στοιχειοσειρών χαρακτήρων . Ωστόσο , πολλές σύγχρονες διανομές Linux προστατεύουν από περιπτώσεις υπερχείλισης στα σημεία όπου απαιτείται εισόδου του χρήστη , είτε μέσω της προστασίας καπνοδόχου ή δυναμικά αλλαγή μεγέθους συστοιχίες χαρακτήρα . Εξακολουθούν να υπάρχουν τρωτά σημεία : το buffer overflow exploit USB ανακαλύφθηκε το 2011 είναι ένα παράδειγμα . Στην περίπτωση USB , ένα πολύ μακρύ ID USB μπορεί να υπερχειλίσει μια μεταβλητή συστήματος Linux .
εικόνων 3
Η 4
Η
εικόνων
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα