char small[30];
gets (small);
printf("%sn", small);
}
main() {
lame ();
return 0;
}
ocigledno obican program ..... ni malo komplikovan ali vrlo lagano exploitable.
# ./blah
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx <- vas input
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# ./blah
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx <- vas input
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Segmentation fault (core dumped)
greska segmentacije se desi kada funkcija "ret" koja se nalazi na adresi 0x80484d0 zeli da se vrati nazad na funkciju lame(); koja je na adresi 0x80484cb i u tom vremenu gde se desi greska segmentacije bude overwritten sa 0x787878 (0x78 = 'x').
mozda to sve nije bitno .. ali kako mogu da napravim code koji ce da me pusti da promenim adresu "ret" (return) funkcije i da mi omoguci da povecam "char small[30]" na 44 karaktera da mi se vrati nazad na adresu 0x80484cb dakle, da se nedesi greska segmentacije i ako na inputu stavim vise od 30 karaktera pa i vise od 44 karaktera.. neka bude 100.... al da mi se nedesi greska segmentacije ?
izvinjavam se ako je malo teze razumjeti jer nisam bas dobar sa naskim sprskim tehnickim rijecima lakse mi je na engleskom...
(gdb) disas main
Dump of assembler code for function main:
0x80484c8 <main>: pushl %ebp
0x80484c9 <main+1>: movl %esp,%ebp
0x80484cb <main+3>: call 0x80484a0 <lame>
0x80484d0 <main+8>: leave
0x80484d1 <main+9>: ret
{
char email[21]="\x115\x110\x111\x111\x112\x64\x110\x111\x115\x116\x97\x108\x103\x105\x106\x97\x46\x99\x111";
return 0;
}
The important thing is not to stop questioning. Curiosity has its own reason for existing. (Albert Einstein) ;-)