House of Force
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Αυτή η τεχνική έχει διορθωθεί (εδώ) και παράγει αυτό το σφάλμα: malloc(): corrupted top size
Μπορείτε να δοκιμάσετε τον κώδικα από εδώ αν θέλετε.
Ο στόχος αυτής της επίθεσης είναι να μπορέσετε να εκχωρήσετε ένα κομμάτι σε μια συγκεκριμένη διεύθυνση.
Μια υπερχείλιση που επιτρέπει την επαναγραφή του μεγέθους του κεφαλίδας του κορυφαίου κομματιού (π.χ. -1).
Να μπορείτε να ελέγξετε το μέγεθος της εκχώρησης σωρού.
Αν ένας επιτιθέμενος θέλει να εκχωρήσει ένα κομμάτι στη διεύθυνση P για να επαναγράψει μια τιμή εδώ. Ξεκινάει επαναγράφοντας το μέγεθος του κορυφαίου κομματιού με -1
(ίσως με μια υπερχείλιση). Αυτό διασφαλίζει ότι το malloc δεν θα χρησιμοποιεί mmap για καμία εκχώρηση καθώς το κορυφαίο κομμάτι θα έχει πάντα αρκετό χώρο.
Στη συνέχεια, υπολογίστε την απόσταση μεταξύ της διεύθυνσης του κορυφαίου κομματιού και του στοχευμένου χώρου για εκχώρηση. Αυτό συμβαίνει επειδή μια malloc με αυτό το μέγεθος θα εκτελείται προκειμένου να μετακινήσει το κορυφαίο κομμάτι σε αυτή τη θέση. Έτσι υπολογίζεται εύκολα η διαφορά/μέγεθος:
Λοιπόν, η κατανομή ενός μεγέθους target - old_top - 4*sizeof(long)
(τα 4 longs είναι λόγω των μεταδεδομένων του top chunk και του νέου chunk όταν κατανεμηθεί) θα μετακινήσει το top chunk στη διεύθυνση που θέλουμε να επαναγράψουμε.
Στη συνέχεια, κάντε άλλη μια malloc για να αποκτήσετε ένα chunk στη διεύθυνση στόχο.
Ο στόχος αυτού του σεναρίου είναι ένα ret2win όπου πρέπει να τροποποιήσουμε τη διεύθυνση μιας συνάρτησης που πρόκειται να κληθεί από τη διεύθυνση της συνάρτησης ret2win
Το δυαδικό έχει μια υπερχείλιση που μπορεί να εκμεταλλευτεί για να τροποποιήσει το μέγεθος του top chunk, το οποίο τροποποιείται σε -1 ή p64(0xffffffffffffffff)
Στη συνέχεια, υπολογίζεται η διεύθυνση στο σημείο όπου υπάρχει ο δείκτης προς επαναγραφή, και η διαφορά από τη τρέχουσα θέση του top chunk εκεί είναι κατανεμημένη με malloc
Τέλος, ένα νέο chunk κατανεμήθηκε το οποίο θα περιέχει αυτόν τον επιθυμητό στόχο μέσα στον οποίο επαναγράφεται από τη συνάρτηση ret2win
Στο Input your name:
υπάρχει μια αρχική ευπάθεια που επιτρέπει να διαρρεύσει μια διεύθυνση από τη heap
Στη συνέχεια, στη λειτουργία Org:
και Host:
είναι δυνατόν να συμπληρωθούν τα 64B του δείκτη s
όταν ζητηθεί το όνομα οργανισμού, το οποίο στη στοίβα ακολουθείται από τη διεύθυνση του v2, η οποία ακολουθείται από το υποδεικνυόμενο όνομα κεντρικού υπολογιστή. Καθώς τότε, η strcpy θα αντιγράφει τα περιεχόμενα του s σε ένα chunk μεγέθους 64B, είναι δυνατόν να επανεγγραφεί το μέγεθος του top chunk με τα δεδομένα που τοποθετήθηκαν μέσα στο όνομα κεντρικού υπολογιστή.
Τώρα που είναι δυνατή η αυθαίρετη εγγραφή, το GOT του atoi
επαναγράφηκε στη διεύθυνση του printf. ήταν δυνατό να διαρρεύσει η διεύθυνση του IO_2_1_stderr
με %24$p
. Και με αυτή τη διαρροή libc ήταν δυνατό να επαναγραφεί ξανά το GOT του atoi
με τη διεύθυνση του system
και να το καλέσει περνώντας ως παράμετρο /bin/sh
Μια εναλλακτική μέθοδος προτάθηκε σε αυτή την άλλη αναφορά, είναι να επαναγραφεί το free
με puts
, και στη συνέχεια να προστεθεί η διεύθυνση του atoi@got
, στο δείκτη που θα απελευθερωθεί αργότερα ώστε να διαρρεύσει και με αυτή τη διαρροή να επαναγραφεί ξανά το atoi@got
με το system
και να το καλέσει με /bin/sh
.
Υπάρχει μια UAF που επιτρέπει την επαναχρησιμοποίηση ενός chunk που είχε απελευθερωθεί χωρίς να καθαριστεί ο δείκτης. Επειδή υπάρχουν ορισμένες μέθοδοι ανάγνωσης, είναι δυνατόν να διαρρεύσει μια διεύθυνση libc γράφοντας έναν δείκτη στη συνάρτηση free στο GOT εδώ και στη συνέχεια καλώντας τη συνάρτηση ανάγνωσης.
Στη συνέχεια, χρησιμοποιήθηκε το House of force (καταχρώντας την UAF) για να επαναγράψει το μέγεθος του αριστερού χώρου με -1, να κατανεμηθεί ένα chunk αρκετά μεγάλο για να φτάσει στο free hook, και στη συνέχεια να κατανεμηθεί άλλο ένα chunk το οποίο θα περιέχει το free hook. Στη συνέχεια, γράψτε στο hook τη διεύθυνση του system
, γράψτε σε ένα chunk "/bin/sh"
και τελικά απελευθερώστε το chunk με το περιεχόμενο αυτής της συμβολοσειράς.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)