Ret2esp / Ret2reg

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

Autres façons de soutenir HackTricks :

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 :

sub rsp, 0x30
jmp rsp

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:

from pwn import *

elf = context.binary = ELF('./vuln')
p = process()

jmp_rsp = next(elf.search(asm('jmp rsp')))

payload = b'A' * 120
payload += p64(jmp_rsp)
payload += asm('''
sub rsp, 10;
jmp rsp;
''')

pause()
p.sendlineafter('RSP!\n', payload)
p.interactive()

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.

  • ASLR & PIE: Cela peut rendre plus difficile de trouver une instruction pour sauter vers esp ou tout autre registre.

Références

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks :

Dernière mise à jour