MĂ©thodologie de Base pour lâExploitation Binaire
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- VĂ©rifiez les plans dâabonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
Informations de Base sur ELF
Avant de commencer Ă exploiter quoi que ce soit, il est intĂ©ressant de comprendre une partie de la structure dâun binaire ELF :
Outils dâExploitation
Méthodologie de Débordement de Pile
Avec tant de techniques, il est bon dâavoir un schĂ©ma pour savoir quand chaque technique sera utile. Notez que les mĂȘmes protections affecteront diffĂ©rentes techniques. Vous pouvez trouver des moyens de contourner les protections dans chaque section de protection, mais pas dans cette mĂ©thodologie.
ContrĂŽle du Flux
Il existe diffĂ©rentes maniĂšres de contrĂŽler le flux dâun programme :
- Débordements de Pile en écrasant le pointeur de retour de la pile ou le EBP -> ESP -> EIP.
- Peut nĂ©cessiter dâabuser dâun DĂ©bordement dâEntier pour provoquer le dĂ©bordement.
- Ou via Ăcritures Arbitraires + Ăcrire Quoi OĂč pour lâExĂ©cution.
- ChaĂźnes de Format: Abuser de
printfpour Ă©crire du contenu arbitraire Ă des adresses arbitraires. - Indexation de Tableaux : Abuser dâune indexation mal conçue pour pouvoir contrĂŽler certains tableaux et obtenir une Ă©criture arbitraire.
- Peut nĂ©cessiter dâabuser dâun DĂ©bordement dâEntier pour provoquer le dĂ©bordement.
- bof Ă WWW via ROP : Abuser dâun dĂ©bordement de tampon pour construire un ROP et pouvoir obtenir un WWW.
Vous pouvez trouver les techniques Ăcrire Quoi OĂč pour lâExĂ©cution dans :
Boucles Ăternelles
Un point Ă prendre en compte est que gĂ©nĂ©ralement une seule exploitation dâune vulnĂ©rabilitĂ© peut ne pas suffire Ă exĂ©cuter un exploit rĂ©ussi, surtout certaines protections doivent ĂȘtre contournĂ©es. Par consĂ©quent, il est intĂ©ressant de discuter de certaines options pour rendre une seule vulnĂ©rabilitĂ© exploitable plusieurs fois dans la mĂȘme exĂ©cution du binaire :
- Ăcrire dans une chaĂźne ROP lâadresse de la fonction
mainou lâadresse oĂč la vulnĂ©rabilitĂ© se produit. - En contrĂŽlant une chaĂźne ROP appropriĂ©e, vous pourriez ĂȘtre en mesure dâeffectuer toutes les actions dans cette chaĂźne.
- Ăcrire Ă lâadresse
exitdans le GOT (ou toute autre fonction utilisĂ©e par le binaire avant de se terminer) lâadresse pour revenir Ă la vulnĂ©rabilitĂ©. - Comme expliquĂ© dans .fini_array, stocker 2 fonctions ici, une pour rappeler la vulnĂ©rabilitĂ© et une autre pour appeler
__libc_csu_finiqui rappellera Ă nouveau la fonction de.fini_array.
Objectifs dâExploitation
Objectif : Appeler une Fonction Existante
- ret2win : Il y a une fonction dans le code que vous devez appeler (peut-ĂȘtre avec des paramĂštres spĂ©cifiques) afin dâobtenir le drapeau.
- Dans un bof rĂ©gulier sans PIE et canary, vous devez simplement Ă©crire lâadresse dans lâadresse de retour stockĂ©e dans la pile.
- Dans un bof avec PIE, vous devrez le contourner.
- Dans un bof avec canary, vous devrez le contourner.
- Si vous devez définir plusieurs paramÚtres pour appeler correctement la fonction ret2win, vous pouvez utiliser :
- Une chaĂźne ROP sâil y a suffisamment de gadgets pour prĂ©parer tous les paramĂštres.
- SROP (au cas oĂč vous pourriez appeler ce syscall) pour contrĂŽler beaucoup de registres.
- Gadgets de ret2csu et ret2vdso pour contrĂŽler plusieurs registres.
- Via un Ăcrire Quoi OĂč, vous pourriez abuser dâautres vulnĂ©rabilitĂ©s (pas bof) pour appeler la fonction
win. - Redirection de Pointeurs : Dans le cas oĂč la pile contient des pointeurs vers une fonction qui va ĂȘtre appelĂ©e ou vers une chaĂźne qui va ĂȘtre utilisĂ©e par une fonction intĂ©ressante (system ou printf), il est possible dâĂ©craser cette adresse.
- ASLR ou PIE peuvent affecter les adresses.
- Variables Non Initialisées : On ne sait jamais.
Objectif : RCE
Via shellcode, si nx désactivé ou mélangeant shellcode avec ROP :
- (Stack) Shellcode : Cela est utile pour stocker un shellcode dans la pile avant ou aprĂšs avoir Ă©crasĂ© le pointeur de retour et ensuite sauter vers lui pour lâexĂ©cuter :
- Dans tous les cas, sâil y a un canary, dans un bof rĂ©gulier, vous devrez le contourner (leak).
- Sans ASLR et nx, il est possible de sauter Ă lâadresse de la pile car elle ne changera jamais.
- Avec ASLR, vous aurez besoin de techniques telles que ret2esp/ret2reg pour sauter vers elle.
- Avec nx, vous devrez utiliser un ROP pour appeler
memprotectet rendre une pagerwx, afin de pouvoir ensuite stocker le shellcode là -dedans (en appelant read par exemple) et ensuite sauter là -bas. - Cela mélangera le shellcode avec une chaßne ROP.
Via syscalls
- Ret2syscall : Utile pour appeler
execvepour exĂ©cuter des commandes arbitraires. Vous devez ĂȘtre capable de trouver les gadgets pour appeler le syscall spĂ©cifique avec les paramĂštres. - Si ASLR ou PIE sont activĂ©s, vous devrez les contourner afin dâutiliser les gadgets ROP du binaire ou des bibliothĂšques.
- SROP peut ĂȘtre utile pour prĂ©parer le ret2execve.
- Gadgets de ret2csu et ret2vdso pour contrĂŽler plusieurs registres.
Via libc
- Ret2lib : Utile pour appeler une fonction dâune bibliothĂšque (gĂ©nĂ©ralement de
libc) commesystemavec des arguments prĂ©parĂ©s (par exemple,'/bin/sh'). Vous avez besoin que le binaire charge la bibliothĂšque avec la fonction que vous souhaitez appeler (libc gĂ©nĂ©ralement). - Si compilĂ© statiquement et sans PIE, lâadresse de
systemet/bin/shne changera pas, donc il est possible de les utiliser statiquement. - Sans ASLR et en connaissant la version de libc chargĂ©e, lâadresse de
systemet/bin/shne changera pas, donc il est possible de les utiliser statiquement. - Avec ASLR mais sans PIE, en connaissant la libc et avec le binaire utilisant la fonction
system, il est possible deretĂ lâadresse de system dans le GOT avec lâadresse de'/bin/sh'dans le paramĂštre (vous devrez le dĂ©couvrir). - Avec ASLR mais sans PIE, en connaissant la libc et sans que le binaire utilise la fonction
system: - Utilisez
ret2dlresolvepour rĂ©soudre lâadresse desystemet lâappeler. - Contourner ASLR et calculer lâadresse de
systemet'/bin/sh'en mémoire. - Avec ASLR et PIE et sans connaßtre la libc : Vous devez :
- Contourner PIE.
- Trouver la version de
libcutilisée (leak quelques adresses de fonction). - Vérifier les scénarios précédents avec ASLR pour continuer.
Via EBP/RBP
- Pivotement de Pile / EBP2Ret / ChaĂźnage EBP : ContrĂŽler lâESP pour contrĂŽler RET via le EBP stockĂ© dans la pile.
- Utile pour les débordements de pile off-by-one.
- Utile comme une maniĂšre alternative de contrĂŽler EIP tout en abusant dâEIP pour construire la charge utile en mĂ©moire et ensuite sauter vers elle via EBP.
Divers
- Redirection de Pointeurs : Dans le cas oĂč la pile contient des pointeurs vers une fonction qui va ĂȘtre appelĂ©e ou vers une chaĂźne qui va ĂȘtre utilisĂ©e par une fonction intĂ©ressante (system ou printf), il est possible dâĂ©craser cette adresse.
- ASLR ou PIE peuvent affecter les adresses.
- Variables Non Initialisées : On ne sait jamais.
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- VĂ©rifiez les plans dâabonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.


