House of Einherjar

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

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

Κώδικας

Στόχος

  • Ο στόχος είναι η δέσμευση μνήμης σε σχεδόν οποιαδήποτε συγκεκριμένη διεύθυνση.

Απαιτήσεις

  • Δημιουργία ενός ψεύτικου κομματιού όταν θέλουμε να δεσμεύσουμε ένα κομμάτι:

  • Ορισμός δεικτών να δείχνουν στον εαυτό τους για να παρακάμψουν τους έλεγχους ακεραιότητας

  • Υπερχείλιση ενός byte με ένα μηδενικό byte από ένα κομμάτι στο επόμενο για να τροποποιήσει τη σημαία PREV_INUSE.

  • Να υποδειχθεί στο prev_size του κομματιού που καταχρηστικά υπερβαίνει το μηδενικό byte η διαφορά μεταξύ του ίδιου κομματιού και του ψεύτικου κομματιού

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

  • Για τη δημιουργία αυτών των κομματιών, θα χρειαστείτε μια διαρροή στη στοίβα.

Επίθεση

  • Δημιουργείται ένα ψεύτικο κομμάτι μέσα σε ένα κομμάτι που ελέγχεται από τον επιτιθέμενο δείχνοντας με τους fd και bk στο αρχικό κομμάτι για να παρακάμψει τις προστασίες

  • Δεσμεύονται 2 άλλα κομμάτια (B και C)

  • Χρησιμοποιώντας το off by one στο B, το bit prev in use καθαρίζεται και τα δεδομένα prev_size αντικαθίστανται με τη διαφορά μεταξύ του μέρους όπου δεσμεύεται το κομμάτι C, με το ψεύτικο κομμάτι A που δημιουργήθηκε πριν

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

  • Στη συνέχεια, γεμίζεται το tcache

  • Στη συνέχεια, απελευθερώνεται το C έτσι ώστε να συγχωνευτεί με το Ϩεύτικο κομμάτι A

  • Στη συνέχεια, δημιουργείται ένα νέο κομμάτι D που θα ξεκινά από το Ϩεύτικο κομμάτι A και θα καλύπτει το κομμάτι B

  • Εδώ τελειώνει το house of Einherjar

  • Αυτό μπορεί να συνεχιστεί με μια επίθεση fast bin ή Tcache poisoning:

  • Απελευθερώστε το B για να το προσθέσετε στο fast bin / Tcache

  • Το fd του B αντικαθίσταται καθιστώντας το να δείχνει στην επιθυμητή διεύθυνση καταχρώμενο το κομμάτι D (καθώς περιέχει το B μέσα)

  • Στη συνέχεια, γίνονται 2 mallocs και το δεύτερο θα δεσμεύει την επιθυμητή διεύθυνση

Αναφορές και άλλα παραδείγματα

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

  • Σφάλμα υπερχείλισης μηδενικού byte στο strtok.

  • Χρησιμοποιήστε το House of Einherjar για να πάρετε μια κατάσταση επικάλυψης κομματιών και να τελειώσετε με Tcache poisoning για να πάρετε ένα πρωτεύον γράψιμο.

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

Last updated