PIE
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)
Ένα δυαδικό αρχείο που έχει μεταγλωττιστεί ως PIE, ή Position Independent Executable, σημαίνει ότι το πρόγραμμα μπορεί να φορτωθεί σε διαφορετικές τοποθεσίες μνήμης κάθε φορά που εκτελείται, αποτρέποντας τις σκληροκωδικοποιημένες διευθύνσεις.
Το κόλπο για να εκμεταλλευτείτε αυτά τα δυαδικά αρχεία έγκειται στην εκμετάλλευση των σχετικών διευθύνσεων—οι αποστάσεις μεταξύ των μερών του προγράμματος παραμένουν οι ίδιες ακόμη και αν οι απόλυτες τοποθεσίες αλλάξουν. Για να παρακάμψετε το PIE, χρειάζεστε μόνο να διαρρεύσετε μία διεύθυνση, συνήθως από τη στοίβα χρησιμοποιώντας ευπάθειες όπως οι επιθέσεις μορφής συμβολοσειράς. Μόλις έχετε μια διεύθυνση, μπορείτε να υπολογίσετε άλλες με τις σταθερές αποστάσεις τους.
Μια χρήσιμη ένδειξη στην εκμετάλλευση δυαδικών αρχείων PIE είναι ότι η βάση τους συνήθως τελειώνει σε 000 λόγω των σελίδων μνήμης που είναι οι μονάδες τυχαίας κατανομής, με μέγεθος 0x1000 bytes. Αυτή η ευθυγράμμιση μπορεί να είναι μια κρίσιμη έλεγχος αν μια εκμετάλλευση δεν λειτουργεί όπως αναμένεται, υποδεικνύοντας αν έχει προσδιοριστεί η σωστή βάση διεύθυνσης.
Ή μπορείτε να το χρησιμοποιήσετε για την εκμετάλλευσή σας, αν διαρρεύσετε ότι μια διεύθυνση βρίσκεται στη 0x649e1024
ξέρετε ότι η βάση είναι 0x649e1000
και από εκεί μπορείτε απλά να υπολογίσετε τις αποστάσεις των συναρτήσεων και των τοποθεσιών.
Για να παρακάμψετε το PIE είναι απαραίτητο να διαρρεύσετε κάποια διεύθυνση του φορτωμένου δυαδικού αρχείου, υπάρχουν μερικές επιλογές για αυτό:
Απενεργοποιημένο ASLR: Αν το ASLR είναι απενεργοποιημένο, ένα δυαδικό αρχείο που έχει μεταγλωττιστεί με PIE θα φορτωθεί πάντα στην ίδια διεύθυνση, επομένως το PIE θα είναι άχρηστο καθώς οι διευθύνσεις των αντικειμένων θα είναι πάντα στο ίδιο μέρος.
Να δοθεί η διαρροή (συνηθισμένο σε εύκολες προκλήσεις CTF, ελέγξτε αυτό το παράδειγμα)
Brute-force EBP και EIP τιμές στη στοίβα μέχρι να διαρρεύσετε τις σωστές:
Χρησιμοποιήστε μια τυχαία ανάγνωση ευπάθεια όπως format string για να διαρρεύσετε μια διεύθυνση του δυαδικού αρχείου (π.χ. από τη στοίβα, όπως στην προηγούμενη τεχνική) για να αποκτήσετε τη βάση του δυαδικού και να χρησιμοποιήσετε αποστάσεις από εκεί. Βρείτε ένα παράδειγμα εδώ.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)