House of Einherjar

Reading time: 4 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

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

Basic Information

Code

Goal

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

Requirements

  • Δημιουργήστε ένα ψεύτικο chunk όταν θέλουμε να δεσμεύσουμε ένα chunk:
  • Ρυθμίστε δείκτες να δείχνουν στον εαυτό τους για να παρακάμψουν τους ελέγχους εγκυρότητας
  • Μία-byte overflow με ένα null byte από ένα chunk στο επόμενο για να τροποποιήσετε τη σημαία PREV_INUSE.
  • Υποδείξτε στο prev_size του chunk που έχει κακοποιηθεί με off-by-null τη διαφορά μεταξύ του εαυτού του και του ψεύτικου chunk
  • Το μέγεθος του ψεύτικου chunk πρέπει επίσης να έχει ρυθμιστεί στο ίδιο μέγεθος για να παρακάμψει τους ελέγχους εγκυρότητας
  • Για την κατασκευή αυτών των chunks, θα χρειαστείτε ένα heap leak.

Attack

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

References and other examples

  • https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
  • CTF https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad
  • Μετά την απελευθέρωση των δεικτών τους δεν μηδενίζονται, οπότε είναι ακόμα δυνατή η πρόσβαση στα δεδομένα τους. Επομένως, ένα chunk τοποθετείται στο unsorted bin και διαρρέει τους δείκτες που περιέχει (libc leak) και στη συνέχεια μια νέα heap τοποθετείται στο unsorted bin και διαρρέει μια διεύθυνση heap από τον δείκτη που αποκτά.
  • baby-talk. DiceCTF 2024
  • Null-byte overflow bug στο strtok.
  • Χρησιμοποιήστε το House of Einherjar για να αποκτήσετε μια κατάσταση επικαλυπτόμενων chunks και να τελειώσετε με Tcache poisoning για να αποκτήσετε μια αυθαίρετη γραφή primitive.

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

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