mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-16 14:08:26 +00:00
Translated ['reversing-and-exploiting/linux-exploiting-basic-esp/arbitra
This commit is contained in:
parent
25a3cd4cef
commit
bdbbdab881
1 changed files with 6 additions and 6 deletions
|
@ -18,15 +18,15 @@ Autres façons de soutenir HackTricks :
|
|||
|
||||
### **GOT : Global Offset Table**
|
||||
|
||||
La **Table des décalages globale (GOT)** est un mécanisme utilisé dans les binaires liés de manière dynamique pour gérer les **adresses des fonctions externes**. Comme ces **adresses ne sont pas connues avant l'exécution** (en raison du lien dynamique), la GOT fournit un moyen de **mettre à jour dynamiquement les adresses de ces symboles externes** une fois qu'elles sont résolues.
|
||||
La **Table des décalages globaux (GOT)** est un mécanisme utilisé dans les binaires liés de manière dynamique pour gérer les **adresses des fonctions externes**. Comme ces **adresses ne sont pas connues avant l'exécution** (en raison du lien dynamique), la GOT fournit un moyen de **mettre à jour dynamiquement les adresses de ces symboles externes** une fois qu'elles sont résolues.
|
||||
|
||||
Chaque entrée dans la GOT correspond à un symbole dans les bibliothèques externes que le binaire peut appeler. Lorsqu'une **fonction est appelée pour la première fois, son adresse réelle est résolue par le lien dynamique et stockée dans la GOT**. Les appels ultérieurs à la même fonction utilisent l'adresse stockée dans la GOT, évitant ainsi le surcoût de la résolution de l'adresse à nouveau.
|
||||
Chaque entrée dans la GOT correspond à un symbole dans les bibliothèques externes que le binaire peut appeler. Lorsqu'une **fonction est appelée pour la première fois, son adresse réelle est résolue par le lien dynamique et stockée dans la GOT**. Les appels ultérieurs à la même fonction utilisent l'adresse stockée dans la GOT, évitant ainsi les frais généraux de résolution de l'adresse à nouveau.
|
||||
|
||||
### **PLT : Procedure Linkage Table**
|
||||
|
||||
La **Table de liaison de procédure (PLT)** fonctionne en étroite collaboration avec la GOT et sert de trampoline pour gérer les appels aux fonctions externes. Lorsqu'un binaire **appelle une fonction externe pour la première fois, le contrôle est passé à une entrée dans le PLT associée à cette fonction**. Cette entrée PLT est responsable d'inviter le lien dynamique à résoudre l'adresse de la fonction si elle n'a pas déjà été résolue. Après la résolution de l'adresse, elle est stockée dans la GOT.
|
||||
|
||||
**Par conséquent,** les entrées de la GOT sont utilisées directement une fois que l'adresse d'une fonction ou d'une variable externe est résolue. **Les entrées PLT sont utilisées pour faciliter la résolution initiale** de ces adresses via le lien dynamique.
|
||||
**Par conséquent,** les entrées de la GOT sont utilisées directement une fois que l'adresse d'une fonction ou d'une variable externe est résolue. Les entrées PLT sont utilisées pour faciliter la résolution initiale de ces adresses via le lien dynamique.
|
||||
|
||||
## Obtenir l'exécution
|
||||
|
||||
|
@ -36,7 +36,7 @@ Obtenez l'adresse de la table GOT avec : **`objdump -s -j .got ./exec`**
|
|||
|
||||
![](<../../../.gitbook/assets/image (619).png>)
|
||||
|
||||
Observez comment après le **chargement** de l'**exécutable** dans GEF, vous pouvez **voir** les **fonctions** qui sont dans la **GOT** : `gef➤ x/20x 0xDIR_GOT`
|
||||
Remarquez comment après le **chargement** de l'**exécutable** dans GEF, vous pouvez **voir** les **fonctions** qui sont dans la **GOT** : `gef➤ x/20x 0xADDR_GOT`
|
||||
|
||||
![](<../../../.gitbook/assets/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (5).png>)
|
||||
|
||||
|
@ -50,7 +50,7 @@ Dans un binaire, la GOT contient les **adresses des fonctions ou** de la **secti
|
|||
|
||||
Idéalement, vous **remplacerez** la **GOT** d'une **fonction** qui va être appelée avec des paramètres contrôlés par vous (vous pourrez ainsi contrôler les paramètres envoyés à la fonction système).
|
||||
|
||||
Si **`system`** n'est **pas utilisé** par le script, la fonction système **n'aura pas d'entrée dans le PLT**. Dans ce scénario, vous devrez **d'abord divulguer l'adresse** de la fonction `system` puis écraser la GOT pour pointer vers cette adresse.
|
||||
Si **`system`** **n'est pas utilisé** par le script, la fonction système **n'aura pas d'entrée dans le PLT**. Dans ce scénario, vous devrez **d'abord divulguer l'adresse** de la fonction `system` puis écraser la GOT pour pointer vers cette adresse.
|
||||
|
||||
Vous pouvez voir les adresses PLT avec **`objdump -j .plt -d ./vuln_binary`**
|
||||
|
||||
|
@ -62,7 +62,7 @@ Vous pouvez voir les adresses PLT avec **`objdump -j .plt -d ./vuln_binary`**
|
|||
|
||||
## **Protections**
|
||||
|
||||
La protection **FullRELRO** vise à protéger contre ce type de technique en résolvant toutes les adresses des fonctions lorsque le binaire est démarré et en rendant la **table GOT en lecture seule** après cela :
|
||||
La protection **Full RELRO** vise à protéger contre ce type de technique en résolvant toutes les adresses des fonctions lorsque le binaire est démarré et en rendant la **table GOT en lecture seule** après cela :
|
||||
|
||||
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
|
||||
[relro.md](../common-binary-protections-and-bypasses/relro.md)
|
||||
|
|
Loading…
Add table
Reference in a new issue