PIE

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

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 comme 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 de 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 l'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 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 donner 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 :

  • Utilisez une vulnérabilité de lecture arbitraire telle que chaîne 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

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Last updated