PIE

Erfahren Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Grundlegende Informationen

Ein als PIE kompiliertes Binärprogramm, oder Position Independent Executable, bedeutet, dass das Programm bei jeder Ausführung an verschiedenen Speicherorten geladen werden kann, was das Verwenden von fest codierten Adressen verhindert.

Der Trick, um diese Binärdateien auszunutzen, liegt im Ausnutzen der relativen Adressen – die Abstände zwischen den Teilen des Programms bleiben gleich, auch wenn sich die absoluten Positionen ändern. Um PIE zu umgehen, müssen Sie nur eine Adresse leaken, normalerweise vom Stack aus, indem Sie Schwachstellen wie Format-String-Angriffe ausnutzen. Sobald Sie eine Adresse haben, können Sie andere durch ihre festen Abstände berechnen.

Ein hilfreicher Hinweis beim Ausnutzen von PIE-Binärdateien ist, dass ihre Basisadresse normalerweise mit 000 endet, da Speicherseiten die Einheiten der Zufallsverteilung sind, die in 0x1000-Byte-Größen vorliegen. Diese Ausrichtung kann ein kritischer Check sein, wenn ein Exploit nicht wie erwartet funktioniert, und darauf hinweisen, ob die richtige Basisadresse identifiziert wurde. Oder Sie können dies für Ihren Exploit verwenden, wenn Sie leaken, dass eine Adresse sich an 0x649e1024 befindet, wissen Sie, dass die Basisadresse 0x649e1000 ist und von dort aus einfach Offsets von Funktionen und Positionen berechnen können.

Umgehungen

Um PIE zu umgehen, muss eine Adresse des geladenen Binärprogramms geleakt werden. Hierfür gibt es einige Optionen:

  • ASLR deaktiviert: Wenn ASLR deaktiviert ist, wird ein mit PIE kompiliertes Binärprogramm immer an derselben Adresse geladen, daher ist PIE nutzlos, da die Adressen der Objekte immer am selben Ort sein werden.

  • Das Leaken wird bereitgestellt (üblich bei einfachen CTF-Herausforderungen, überprüfen Sie dieses Beispiel)

  • Brute-Force EBP- und EIP-Werte im Stack, bis die richtigen geleakt werden:

pageBF Addresses in the Stack
  • Verwenden Sie eine beliebige Lese-Schwachstelle wie Format-String, um eine Adresse des Binärprogramms zu leaken (z. B. vom Stack, wie bei der vorherigen Technik), um die Basis des Binärprogramms zu erhalten und von dort aus Offsets zu verwenden. Hier finden Sie ein Beispiel.

Referenzen

Erfahren Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated