PIE
Last updated
Last updated
Lernen Sie AWS-Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen Sie GCP-Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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, besteht darin, die relativen Adressen auszunutzen - 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 bei 0x649e1024
befindet, wissen Sie, dass die Basisadresse 0x649e1000
ist und von dort aus einfach Offsets von Funktionen und Positionen berechnen können.
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 der gleichen Adresse geladen, daher ist PIE nutzlos, da die Adressen der Objekte immer am gleichen Ort sein werden.
Den Leak erhalten (üblich bei einfachen CTF-Herausforderungen, überprüfen Sie dieses Beispiel)
Brute-Force EBP- und EIP-Werte im Stack, bis Sie die richtigen leaken:
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. Finden Sie hier ein Beispiel.
Lernen Sie AWS-Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen Sie GCP-Hacking: HackTricks Training GCP Red Team Expert (GRTE)