Ret2esp / Ret2reg
Rest2esp
Parce que l'ESP (pointeur de pile) pointe toujours vers le sommet de la pile, cette technique consiste à remplacer l'EIP (pointeur d'instruction) par l'adresse d'une instruction jmp esp
ou call esp
. En faisant cela, le shellcode est placé juste après l'EIP écrasé. Lorsque l'instruction ret
s'exécute, ESP pointe vers l'adresse suivante, précisément là où le shellcode est stocké.
Si la Randomisation de l'Espace d'Adressage (ASLR) n'est pas activée dans Windows ou Linux, il est possible d'utiliser les instructions jmp esp
ou call esp
trouvées dans les bibliothèques partagées. Cependant, avec ASLR activé, il peut être nécessaire de rechercher ces instructions à l'intérieur du programme vulnérable lui-même (et il peut être nécessaire de contourner PIE).
De plus, pouvoir placer le shellcode après la corruption de l'EIP, plutôt qu'au milieu de la pile, garantit que les instructions push
ou pop
exécutées pendant le fonctionnement de la fonction n'interfèrent pas avec le shellcode. Cette interférence pourrait se produire si le shellcode était placé au milieu de la pile de la fonction.
Manque d'espace
Si vous manquez d'espace pour écrire après avoir écrasé RIP (peut-être juste quelques octets), écrivez un shellcode jmp
initial comme suit :
Et écrivez le shellcode tôt dans la pile.
Exemple
Vous pouvez trouver un exemple de cette technique dans https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp avec un exploit final comme suit:
Ret2reg
De même, si nous savons qu'une fonction renvoie l'adresse où le shellcode est stocké, nous pouvons exploiter les instructions call eax
ou jmp eax
(connues sous le nom de technique ret2eax), offrant une autre méthode pour exécuter notre shellcode. Tout comme eax, n'importe quel autre registre contenant une adresse intéressante pourrait être utilisé (ret2reg).
Exemple
Vous pouvez trouver un exemple ici : https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/ret2reg/using-ret2reg
Protections
NX: Si la pile n'est pas exécutable, cela ne nous aidera pas car nous devons placer le shellcode dans la pile et sauter pour l'exécuter.
Références
Last updated