PIE

Reading time: 3 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks

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)
  • Brute-Force EBP- und EIP-Werte im Stack, bis Sie die richtigen leaken:

BF Addresses in the Stack

  • Verwenden Sie 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. Hier ein Beispiel finden.

Referenzen

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks