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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
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:
- 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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.