Heap Functions Security Checks

Μάθετε & εξασκηθείτε στο Hacking του AWS:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο Hacking του GCP: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)

Υποστηρίξτε το HackTricks

Για περισσότερες πληροφορίες ελέγξτε:

unlink

Αυτό είναι ένα σύνοψη των πραγματοποιημένων ελέγχων:

  • Έλεγχος εάν το καθορισμένο μέγεθος του κομματιού είναι το ίδιο με το prev_size που υποδεικνύεται στο επόμενο κομμάτι

  • Μήνυμα σφάλματος: corrupted size vs. prev_size

  • Έλεγχος επίσης ότι P->fd->bk == P και P->bk->fw == P

  • Μήνυμα σφάλματος: corrupted double-linked list

  • Εάν το κομμάτι δεν είναι μικρό, ελέγξτε ότι P->fd_nextsize->bk_nextsize == P και P->bk_nextsize->fd_nextsize == P

  • Μήνυμα σφάλματος: corrupted double-linked list (not small)

_int_malloc

Για περισσότερες πληροφορίες ελέγξτε:

malloc & sysmalloc
  • Έλεγχοι κατά τη διάρκεια της αναζήτησης fast bin:

  • Εάν το κομμάτι δεν είναι συμμετρικό:

  • Μήνυμα σφάλματος: malloc(): unaligned fastbin chunk detected 2

  • Εάν το επόμενο κομμάτι δεν είναι συμμετρικό:

  • Μήνυμα σφάλματος: malloc(): unaligned fastbin chunk detected

  • Εάν το επιστρεφόμενο κομμάτι έχει μέγεθος που δεν είναι σωστό λόγω της θέσης του στο fast bin:

  • Μήνυμα σφάλματος: malloc(): memory corruption (fast)

  • Εάν οποιοδήποτε κομμάτι που χρησιμοποιείται για να γεμίσει το tcache δεν είναι συμμετρικό:

  • Μήνυμα σφάλματος: malloc(): unaligned fastbin chunk detected 3

  • Έλεγχοι κατά τη διάρκεια της αναζήτησης small bin:

  • Εάν victim->bk->fd != victim:

  • Μήνυμα σφάλματος: malloc(): smallbin double linked list corrupted

  • Έλεγχοι κατά τη συγχώνευση που πραγματοποιούνται για κάθε κομμάτι fast bin:

  • Εάν το κομμάτι δεν είναι συμμετρικό:

  • Μήνυμα σφάλματος: malloc_consolidate(): unaligned fastbin chunk detected

  • Εάν το κομμάτι έχει διαφορετικό μέγεθος από αυτό που θα έπρεπε λόγω της θέσης του:

  • Μήνυμα σφάλματος: malloc_consolidate(): invalid chunk size

  • Εάν το προηγούμενο κομμάτι δεν είναι σε χρήση και το προηγούμενο κομμάτι έχει διαφορετικό μέγεθος από αυτό που υποδεικνύεται από το prev_chunk:

  • Μήνυμα σφάλματος: corrupted size vs. prev_size in fastbins

  • Έλεγχοι κατά τη διάρκεια της αναζήτησης unsorted bin:

  • Εάν το μέγεθος του κομματιού είναι παράξενο (πολύ μικρό ή πολύ μεγάλο):

  • Μήνυμα σφάλματος: malloc(): invalid size (unsorted)

  • Εάν το μέγεθος του επόμενου κομματιού είναι παράξενο (πολύ μικρό ή πολύ μεγάλο):

  • Μήνυμα σφάλματος: malloc(): invalid next size (unsorted)

  • Εάν το προηγούμενο μέγεθος που υποδεικνύεται από το επόμενο κομμάτι διαφέρει από το μέγεθος του κομματιού:

  • Μήνυμα σφάλματος: malloc(): mismatching next->prev_size (unsorted)

  • Εάν δεν ισχύει victim->bck->fd == victim ή δεν ισχύει victim->fd == av (arena):

  • Μήνυμα σφάλματος: malloc(): unsorted double linked list corrupted

  • Καθώς ελέγχουμε πάντα το τελευταίο, το fd του πρέπει να δείχνει πάντα στη δομή arena.

  • Εάν το επόμενο κομμάτι δεν υποδεικνύει ότι το προηγούμενο είναι σε χρήση:

  • Μήνυμα σφάλματος: malloc(): invalid next->prev_inuse (unsorted)

  • Εάν fwd->bk_nextsize->fd_nextsize != fwd:

  • Μήνυμα σφάλματος: malloc(): largebin double linked list corrupted (nextsize)

  • Εάν fwd->bk->fd != fwd:

  • Μήνυμα σφάλματος: malloc(): largebin double linked list corrupted (bk)

  • Έλεγχοι κατά τη διάρκεια της αναζήτησης large bin (με βάση το ευρετήριο):

  • bck->fd-> bk != bck:

  • Μήνυμα σφάλματος: malloc(): corrupted unsorted chunks

  • Έλεγχοι κατά τη διάρκεια της αναζήτησης large bin (επόμενο μεγαλύτερο):

  • bck->fd-> bk != bck:

  • Μήνυμα σφάλματος: malloc(): corrupted unsorted chunks2

  • Έλεγχοι κατά τη διάρκεια της χρήσης Top chunk:

  • chunksize(av->top) > av->system_mem:

  • Μήνυμα σφάλματος: malloc(): corrupted top size

tcache_get_n

  • Έλεγχοι στο tcache_get_n:

  • Εάν το κομμάτι δεν είναι συμμετρικό:

  • Μήνυμα σφάλματος: malloc(): unaligned tcache chunk detected

tcache_thread_shutdown

  • Έλεγχοι στο tcache_thread_shutdown:

  • Εάν το κομμάτι δεν είναι συμμετρικό:

  • Μήνυμα σφάλματος: tcache_thread_shutdown(): unaligned tcache chunk detected

__libc_realloc

  • Έλεγχοι στο __libc_realloc:

  • Εάν το παλιό δείκτης δεν είναι συμμετρικός ή το μέγεθος ήταν εσφαλμένο:

  • Μήνυμα σφάλματος: realloc(): invalid pointer

_int_free

Για περισσότερες πληροφορίες ελέγξτε:

free
  • Έλεγχοι κατά την έναρξη του _int_free:

  • Ο δείκτης είναι συμμετρικός:

  • Μήνυμα σφάλματος: free(): invalid pointer

  • Μέγεθος μεγαλύτερο από το MINSIZE και επίσης συμμετρικό:

  • Μήνυμα σφάλματος: free(): invalid size

  • Έλεγχοι στο _int_free tcache:

  • Εάν υπάρχουν περισσότερες καταχωρήσεις από το mp_.tcache_count:

  • Μήνυμα σφάλματος: free(): too many chunks detected in tcache

  • Εάν η καταχώρηση δεν είναι συμμετρική:

  • Μήνυμα σφάλματος: free(): unaligned chunk detected in tcache 2

  • Εάν το απελευθερωμένο κομμάτι είχε ήδη απελευθερωθεί και υπάρχει ως κομμάτι στο tcache:

  • Μήνυμα σφάλματος: free(): double free detected in tcache 2

  • Έλεγχοι στο _int_free fast bin:

  • Εάν το μέγεθος του κομματιού είναι μη έγκυρο (πολύ μεγάλο ή μικρό) ενεργοποίηση:

  • Μήνυμα σφάλματος: free(): invalid next size (fast)

  • Εάν το προστιθέμενο κομμάτι ήταν ήδη στην κορυφή του fast bin:

  • Μήνυμα σφάλματος: double free or corruption (fasttop)

  • Εάν το μέγεθος του κομματιού στην κορυφή έχει διαφορετικό μέγεθος από το κομμάτι που προσθέτουμε:

  • Μήνυμα σφάλματος: invalid fastbin entry (free)

_int_free_merge_chunk

  • Έλεγχοι στο _int_free_merge_chunk:

  • Αν το κομμάτι είναι το κορυφαίο κομμάτι:

  • Μήνυμα σφάλματος: double free or corruption (top)

  • Αν το επόμενο κομμάτι βρίσκεται έξω από τα όρια της αρένας:

  • Μήνυμα σφάλματος: double free or corruption (out)

  • Αν το κομμάτι δεν είναι σημασιοδοτημένο ως χρησιμοποιημένο (στο prev_inuse από το επόμενο κομμάτι):

  • Μήνυμα σφάλματος: double free or corruption (!prev)

  • Αν το επόμενο κομμάτι έχει πολύ μικρό ή πολύ μεγάλο μέγεθος:

  • Μήνυμα σφάλματος: free(): invalid next size (normal)

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

  • Μήνυμα σφάλματος: corrupted size vs. prev_size while consolidating

_int_free_create_chunk

  • Έλεγχοι στο _int_free_create_chunk:

  • Προσθήκη ενός κομματιού στον μη ταξινομημένο κάδο, ελέγξτε αν unsorted_chunks(av)->fd->bk == unsorted_chunks(av):

  • Μήνυμα σφάλματος: free(): corrupted unsorted chunks

do_check_malloc_state

  • Έλεγχοι στο do_check_malloc_state:

  • Αν το fast bin chunk δεν είναι σωστά ευθυγραμμισμένο:

  • Μήνυμα σφάλματος: do_check_malloc_state(): unaligned fastbin chunk detected

malloc_consolidate

  • Έλεγχοι στο malloc_consolidate:

  • Αν το fast bin chunk δεν είναι σωστά ευθυγραμμισμένο:

  • Μήνυμα σφάλματος: malloc_consolidate(): unaligned fastbin chunk detected

  • Αν το μέγεθος του fast bin chunk δεν είναι σωστό:

  • Μήνυμα σφάλματος: malloc_consolidate(): invalid chunk size

_int_realloc

  • Έλεγχοι στο _int_realloc:

  • Το μέγεθος είναι πολύ μεγάλο ή πολύ μικρό:

  • Μήνυμα σφάλματος: realloc(): invalid old size

  • Το μέγεθος του επόμενου κομματιού είναι πολύ μεγάλο ή πολύ μικρό:

  • Μήνυμα σφάλματος: realloc(): invalid next size

Last updated