House of Force
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Basic Information
Code
Αυτή η τεχνική έχει διορθωθεί (εδώ) και παράγει αυτό το σφάλμα:
malloc(): corrupted top size
Μπορείτε να δοκιμάσετε τον κώδικα από εδώ αν θέλετε.
Goal
Ο στόχος αυτής της επίθεσης είναι να μπορέσετε να εκχωρήσετε ένα κομμάτι σε μια συγκεκριμένη διεύθυνση.
Requirements
Μια υπερχείλιση που επιτρέπει την επαναγραφή του μεγέθους του κεφαλίδας του κορυφαίου κομματιού (π.χ. -1).
Να μπορείτε να ελέγξετε το μέγεθος της εκχώρησης σωρού.
Attack
Αν ένας επιτιθέμενος θέλει να εκχωρήσει ένα κομμάτι στη διεύθυνση 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)
Last updated