# PIE {{#include ../../../banners/hacktricks-training.md}} ## Grundinformationen 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, müssen Sie nur eine Adresse leaken**, typischerweise vom **Stack** unter Verwendung von Schwachstellen wie Format-String-Angriffen. Sobald Sie eine Adresse haben, können Sie 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 Sie können dies für Ihren Exploit verwenden: Wenn Sie leaken, dass eine Adresse bei **`0x649e1024`** liegt, wissen Sie, dass die **Basisadresse `0x649e1000` ist** und von dort aus können Sie einfach die **Offsets** von Funktionen und Standorten berechnen. ## Umgehungen 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. - **Gegeben** werden die Leckage (häufig in einfachen CTF-Herausforderungen, [**prüfen Sie dieses Beispiel**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit)) - **Brute-Force EBP- und EIP-Werte** im Stack, bis Sie die richtigen leaken: {{#ref}} bypassing-canary-and-pie.md {{#endref}} - Verwenden Sie eine **willkürliche Lese**-Schwachstelle wie [**Format-String**](../../format-strings/index.html), 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. [**Hier ein Beispiel finden**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass). ## Referenzen - [https://ir0nstone.gitbook.io/notes/types/stack/pie](https://ir0nstone.gitbook.io/notes/types/stack/pie) {{#include ../../../banners/hacktricks-training.md}}