PIE
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Eine als PIE kompilierte Binärdatei, oder Position Independent Executable, bedeutet, dass das Programm bei jedem Ausführen an unterschiedlichen Speicherorten geladen werden kann, wodurch hartcodierte Adressen verhindert werden.
Der Trick, um diese Binärdateien auszunutzen, besteht darin, die relativen Adressen auszunutzen – die Offsets zwischen den Teilen des Programms bleiben gleich, auch wenn sich die absoluten Standorte ändern. Um PIE zu umgehen, musst du nur eine Adresse leaken, typischerweise vom Stack unter Verwendung von Schwachstellen wie Format-String-Angriffen. Sobald du eine Adresse hast, kannst du andere anhand ihrer festen Offsets berechnen.
Ein hilfreicher Hinweis beim Ausnutzen von PIE-Binärdateien ist, dass ihre Basisadresse typischerweise auf 000 endet, da Speicherseiten die Einheiten der Randomisierung sind, die eine Größe von 0x1000 Bytes haben. Diese Ausrichtung kann eine kritische Überprüfung sein, wenn ein Exploit nicht wie erwartet funktioniert, um anzuzeigen, ob die richtige Basisadresse identifiziert wurde.
Oder du kannst dies für deinen Exploit verwenden, wenn du leaken kannst, dass eine Adresse bei 0x649e1024
liegt, weißt du, dass die Basisadresse 0x649e1000
ist und von dort aus kannst du einfach die Offsets von Funktionen und Standorten berechnen.
Um PIE zu umgehen, ist es notwendig, eine Adresse der geladenen Binärdatei zu leaken, es gibt einige Optionen dafür:
Deaktiviertes ASLR: Wenn ASLR deaktiviert ist, wird eine mit PIE kompilierte Binärdatei immer an derselben Adresse geladen, daher wird PIE nutzlos sein, da die Adressen der Objekte immer am selben Ort sein werden.
Die Leckage erhalten (häufig in einfachen CTF-Herausforderungen, überprüfe dieses Beispiel)
Brute-Force EBP- und EIP-Werte im Stack, bis du die richtigen leaken kannst:
Verwende eine willkürliche Lese-Schwachstelle wie Format-String, um eine Adresse der Binärdatei zu leaken (z. B. vom Stack, wie in der vorherigen Technik), um die Basis der Binärdatei zu erhalten und von dort aus Offsets zu verwenden. Finde hier ein Beispiel.
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)