PIE

Reading time: 3 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

Ένα δυαδικό αρχείο που έχει μεταγλωττιστεί ως PIE, ή Position Independent Executable, σημαίνει ότι το πρόγραμμα μπορεί να φορτωθεί σε διαφορετικές διευθύνσεις μνήμης κάθε φορά που εκτελείται, αποτρέποντας τις σκληροκωδικοποιημένες διευθύνσεις.

Το κόλπο για να εκμεταλλευτείτε αυτά τα δυαδικά αρχεία έγκειται στην εκμετάλλευση των σχετικών διευθύνσεων—οι αποστάσεις μεταξύ των μερών του προγράμματος παραμένουν οι ίδιες ακόμη και αν οι απόλυτες τοποθεσίες αλλάξουν. Για να παρακάμψετε το PIE, χρειάζεται μόνο να διαρρεύσετε μία διεύθυνση, συνήθως από τη στοίβα χρησιμοποιώντας ευπάθειες όπως οι επιθέσεις μορφοποίησης συμβολοσειρών. Μόλις έχετε μια διεύθυνση, μπορείτε να υπολογίσετε άλλες με βάση τις σταθερές αποστάσεις τους.

Μια χρήσιμη ένδειξη στην εκμετάλλευση δυαδικών αρχείων PIE είναι ότι η βάση τους συνήθως τελειώνει σε 000 λόγω των σελίδων μνήμης που είναι οι μονάδες τυχαίας κατανομής, με μέγεθος 0x1000 bytes. Αυτή η ευθυγράμμιση μπορεί να είναι μια κρίσιμη έλεγχος αν μια εκμετάλλευση δεν λειτουργεί όπως αναμένεται, υποδεικνύοντας αν έχει προσδιοριστεί η σωστή βάση διεύθυνσης.
Ή μπορείτε να το χρησιμοποιήσετε για την εκμετάλλευσή σας, αν διαρρεύσετε ότι μια διεύθυνση βρίσκεται στη 0x649e1024 γνωρίζετε ότι η βάση είναι 0x649e1000 και από εκεί μπορείτε απλά να υπολογίσετε τις αποστάσεις των συναρτήσεων και των τοποθεσιών.

Bypasses

Για να παρακάμψετε το PIE χρειάζεται να διαρρεύσετε κάποια διεύθυνση του φορτωμένου δυαδικού αρχείου, υπάρχουν μερικές επιλογές για αυτό:

  • Απενεργοποιημένο ASLR: Αν το ASLR είναι απενεργοποιημένο, ένα δυαδικό αρχείο που έχει μεταγλωττιστεί με PIE θα φορτωθεί πάντα στην ίδια διεύθυνση, επομένως το PIE θα είναι άχρηστο καθώς οι διευθύνσεις των αντικειμένων θα είναι πάντα στο ίδιο μέρος.
  • Να δοθεί η διαρροή (συνηθισμένο σε εύκολες προκλήσεις CTF, ελέγξτε αυτό το παράδειγμα)
  • Brute-force EBP και EIP τιμές στη στοίβα μέχρι να διαρρεύσετε τις σωστές:

BF Addresses in the Stack

  • Χρησιμοποιήστε μια τυχαία ανάγνωση ευπάθεια όπως format string για να διαρρεύσετε μια διεύθυνση του δυαδικού αρχείου (π.χ. από τη στοίβα, όπως στην προηγούμενη τεχνική) για να αποκτήσετε τη βάση του δυαδικού και να χρησιμοποιήσετε αποστάσεις από εκεί. Βρείτε ένα παράδειγμα εδώ.

References

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