Pointer courant. gdb b xf Breakpoint at xf file func. gdb run Starting program
/home/deimos/memory/func Breakpoint . avec linstruction leave qui correspond un mov
ebp.c printfquotd.esp x ltmaingt x ltmaingt x ltmaingt x ltmaingt push mov push sub ebp esp.
esp . nbr. esp le processus rserve yy octets sur la pile afin dy stocker les variables locales.
Voici le prologue en question x ltfoobargt push ebp x ltfoobargt mov esp. Puis avec un sub
xyy. nbr at func. nbr. Il sert rcuprer les arguments passs la fonction ainsi qu rtablir
lenvironnement de dpart en fin de fonction.ebp x ltfoobargt sub x. Linstruction ret quant elle
est lquivalent de pop eip.esp En fin. line . pop ebp. d n xd ltFRAMEENDgt .c. de fonction. xf
in foobar nbr. gdb p esp void xbfba gdb x/xw esp xbfba xc x x gdb x/c xc xc ltIOstdinusedgt d
.
La commande x/xw esp affiche mots longs double words en hexadcimal au sommet de la
pile.En plaant un breapoint sur le call de notre fonction printf. . et nos deux valeurs. et x/c xc
affiche octets en ASCII ladresse mise en paramtre. on peut vrifier que le registre ESP pointe
bien vers les trois arguments ladresse de la chane de caractres pour le format daffichage.
patch sur gcc tels que StackShield / PaX. Prsentation dun cas de stack overflow Un stack
overflow. ceci provoquant lcrasement de donnes sensibles. Comme son nom lindique.. ou
dpassement de pile. deimosltbx/stackoverflow cat gtvuln.hgt void fooconst char buf char
buffer. puis le crash de lapplication. . buf. Cette vulnrabilit est redoutable tant donn que
lattaquant lexploite en injectant en mmoire du code que lapplication excute. compilateur
StackGuard. Dans la plupart des cas de stack overflow. ce bug reprsente une faille de scurit
qui peut tre exploite soit en local. Exploitation basique de stack overflow .. Toutefois elle
reste assez complexe mettre en uvre car les protections contre ce type de failles se
multiplient protection antidpassement de tampon depuis gcc . return .c // A compiler avec
fnostackprotector a partir de gcc . il sagit dun bug dans un excutable laissant lutilisateur la
possibilit de stocker dans la pile plus doctets que prvu.. soit distance on parle dexploitation
en remote. Ce dysfonctionnement est d le plus souvent une inattention durant la phase de
programmation du binaire par les dveloppeurs. int mainint argc. strcpybuffer. include ltstring.
est un cas spcifique de buffer overflow dpassement de tampon. flag /GS sous Microsoft
Visual C. . char argv ifargc gt fooargv.
/vuln
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AA AAAAAAAAA. qui va contenir ESP prologue de la fonction foo deimosltbx/stackoverflow
gcc ggdb o vuln vuln. si lutilisateur entre un argument dont la taille est suprieure caractres un
caractre ASCII quivaut un octet. dont la taille nest pas vrifie. En effet. Program terminated
with signal . Comme expliqu deux paragraphes plus tt. la fonction void fooconst char buf
recopie dans buffer qui fait octets la chane de caractres passe en paramtre. cestdire return .c
deimosltbx/stackoverflow . qui pointe sur linstruction suivante. Dans cet excutable./vuln
deimosltbx/stackoverflow ulimit c deimosltbx/stackoverflow ./vuln core Core was generated
by . cest le er argument du programme qui est recopi dans buffer. on constate que les
variables locales dune fonction sont prcdes de EBP puis de la sauvegarde de EIP sur
laquelle le programme doit retourner lors de linstruction RET de la fonction./vuln perl e print
quotAquotx.Le programme prcdent est un des exemples les plus basiques de stack overflow.
des donnes seront crases dans mmoire. Segmentation fault. x in gdb p ebp void x gdb p eip
void x gdb x/x esp xbfa x x x x xbfa x x x x xbfa x x gdb quit . Erreur de segmentation core
dumped deimosltbx/stackoverflow gdb . Quelles seront ces octets de la pile sur lesquels
lutilisateur va crire Si lon revient au schma de la mmoire prsent dans le chapitre prcdent.