hacktricks/binary-exploitation/common-binary-protections-and-bypasses/pie
2024-07-18 17:36:49 +00:00
..
bypassing-canary-and-pie.md Translated ['README.md', 'backdoors/salseo.md', 'binary-exploitation/arb 2024-07-18 17:36:49 +00:00
README.md Translated ['README.md', 'backdoors/salseo.md', 'binary-exploitation/arb 2024-07-18 17:36:49 +00:00

PIE

{% hint style="success" %} Apprenez et pratiquez le piratage AWS :Formation HackTricks AWS Red Team Expert (ARTE)
Apprenez et pratiquez le piratage GCP : Formation HackTricks GCP Red Team Expert (GRTE)

Soutenez HackTricks
{% endhint %}

Informations de base

Un binaire compilé en tant que PIE, ou Exécutable à Adresse Indépendante, signifie que le programme peut se charger à différentes adresses mémoire à chaque exécution, empêchant les adresses codées en dur.

La technique pour exploiter ces binaires réside dans l'exploitation des adresses relatives - les décalages entre les parties du programme restent les mêmes même si les emplacements absolus changent. Pour contourner le PIE, vous avez seulement besoin de divulguer une adresse, généralement à partir de la pile en utilisant des vulnérabilités telles que les attaques par chaîne de format. Une fois que vous avez une adresse, vous pouvez calculer les autres en fonction de leurs décalages fixes.

Un indice utile pour exploiter les binaires PIE est que leur adresse de base se termine généralement en 000 en raison des pages mémoire étant les unités de randomisation, de taille 0x1000 octets. Cet alignement peut être une vérification critique si un exploit ne fonctionne pas comme prévu, indiquant si la bonne adresse de base a été identifiée.
Ou vous pouvez utiliser cela pour votre exploit, si vous divulguez qu'une adresse est située à 0x649e1024 vous savez que la adresse de base est 0x649e1000 et à partir de là vous pouvez simplement calculer les décalages des fonctions et des emplacements.

Contournements

Pour contourner le PIE, il est nécessaire de divulguer une adresse du binaire chargé, il existe quelques options pour cela :

  • ASLR désactivé : Si l'ASLR est désactivé, un binaire compilé avec PIE est toujours chargé à la même adresse, donc le PIE sera inutile car les adresses des objets seront toujours au même endroit.
  • Se voir attribuer la fuite (courant dans les défis CTF faciles, consultez cet exemple)
  • Forcer les valeurs EBP et EIP dans la pile jusqu'à ce que vous divulguiez les bonnes :

{% content-ref url="bypassing-canary-and-pie.md" %} bypassing-canary-and-pie.md {% endcontent-ref %}

  • Utilisez une vulnérabilité de lecture arbitraire telle que les chaînes de format pour divulguer une adresse du binaire (par exemple à partir de la pile, comme dans la technique précédente) pour obtenir la base du binaire et utiliser des décalages à partir de là. Trouvez un exemple ici.

Références

{% hint style="success" %} Apprenez et pratiquez le piratage AWS :Formation HackTricks AWS Red Team Expert (ARTE)
Apprenez et pratiquez le piratage GCP : Formation HackTricks GCP Red Team Expert (GRTE)

Soutenez HackTricks
{% endhint %}