hacktricks/binary-exploitation/common-binary-protections-and-bypasses/pie/README.md

58 lines
4.9 KiB
Markdown

# PIE
{% hint style="success" %}
Lernen Sie AWS-Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Lernen Sie GCP-Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Unterstützen Sie HackTricks</summary>
* Überprüfen Sie die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Teilen Sie Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositorys senden.
</details>
{% endhint %}
## 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, 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.
## 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 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**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
* **Brute-Force EBP- und EIP-Werte** im Stack, bis Sie die richtigen leaken:
{% content-ref url="bypassing-canary-and-pie.md" %}
[bypassing-canary-and-pie.md](bypassing-canary-and-pie.md)
{% endcontent-ref %}
* Verwenden Sie eine **beliebige Lese**-Schwachstelle wie [**Format-String**](../../format-strings/), 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**](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)
{% hint style="success" %}
Lernen Sie AWS-Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Lernen Sie GCP-Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Unterstützen Sie HackTricks</summary>
* Überprüfen Sie die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Teilen Sie Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositorys senden.
</details>
{% endhint %}