Consider the following program (vul.c
) with buffer overflow vulnerability.
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char buf[10];
strcpy(buf, argv[1]);
printf("%s\n", buf);
return 0;
}
Above program compiled using gcc -o vul vul.c
and executed on arch linux - linux 4.4.16-1-lts x86-64
gave following output when executed in terminal with ./vul $(perl -e 'print "A"x100')
command:
AAAAAAAAAAA...A
Segmentation fault (core dumped)
Then checking the program status using echo $?
command gave 139
output.
Following program (exp.c
) (for crashing the above program)
#include <stdlib.h>
int main(void)
{
printf("%d\n", system("./vul $(perl -e 'print \"A\"x100')"));
return 0;
}
compiled using gcc -o exp exp.c
when executed with ./exp
command on same system gave following output:
AAAAAAAAAAAA...A
139
I have two questions:
- Why no error message was generated by 2nd program? and,
- I need to compile the program with
-fstack-protector
flag to enable the*** stack smashing detected ***
error messages inarch linux
but not inUbuntu
. InUbuntu
, it might be that this flag is include by default ingcc
or is there any other reason?