hacktricks/binary-exploitation/heap/house-of-einherjar.md

6.5 KiB
Raw Blame History

Σπίτι των Einherjar

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

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

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

Κώδικας

Στόχος

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

Απαιτήσεις

  • Δημιουργία ενός ψεύτικου κομματιού όταν θέλουμε να δεσμεύσουμε ένα κομμάτι:
  • Ορισμός δεικτών να δείχνουν στον εαυτό τους για να παρακάμψουν τους έλεγχους ακεραιότητας
  • Λάθος κατά ένα από ένα κομμάτι σε άλλο για να τροποποιήσουμε το προηγούμενο σε χρήση
  • Να υποδεικνύεται στο prev_size του κομματιού που καταχράστηκε το λάθος κατά ένα τη διαφορά μεταξύ του ίδιου και του ψεύτικου κομματιού
  • Το μέγεθος του ψεύτικου κομματιού πρέπει επίσης να έχει οριστεί στο ίδιο μέγεθος για να παρακάμψει τους έλεγχους ακεραιότητας
  • Για τη δημιουργία αυτών των κομματιών, θα χρειαστείτε μια διαρροή στο σωρό.

Επίθεση

  • Δημιουργείται ένα ψεύτικο κομμάτι μέσα σε ένα κομμάτι που ελέγχεται από τον επιτιθέμενο δείχνοντας με τους fd και bk στο αρχικό κομμάτι για να παρακάμψει τις προστασίες
  • Δεσμεύονται 2 άλλα κομμάτια (B και C)
  • Κατάχρηση του λάθους κατά ένα στο B όπου το bit prev in use καθαρίζεται και τα δεδομένα prev_size αντικαθίστανται με τη διαφορά μεταξύ του μέρους όπου δεσμεύεται το κομμάτι C, με το ψεύτικο κομμάτι A που δημιουργήθηκε πριν
  • Αυτό το prev_size και το μέγεθος στο ψεύτικο κομμάτι A πρέπει να είναι το ίδιο για να παρακάμψουν τους ελέγχους.
  • Στη συνέχεια, γεμίζεται το tcache
  • Στη συνέχεια, το C ελευθερώνεται έτσι ώστε να συγχωνευτεί με το ψεύτικο κομμάτι A
  • Στη συνέχεια, δημιουργείται ένα νέο κομμάτι D που θα ξεκινά από το ψεύτικο κομμάτι A και θα καλύπτει το κομμάτι B
  • Το σπίτι των Einherjar τελειώνει εδώ
  • Αυτό μπορεί να συνεχιστεί με μια επίθεση fast bin:
  • Απελευθερώστε το B για να το προσθέσετε στο fast bin
  • Το fd του B αντικαθίσταται καθιστώντας το να δείχνει στην επιθυμητή διεύθυνση καταχρώμενο το κομμάτι D (καθώς περιέχει το B μέσα)
  • Στη συνέχεια, γίνονται 2 mallocs και το δεύτερο θα δεσμεύει την επιθυμητή διεύθυνση

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