SYSTEM/bof

LEVEL6 (wolfman -> darkelf) : check length of argv[1] + egghunter + bufferhunter

Notchicken 2013. 7. 19. 13:25

darkelf.c

#include <stdio.h>

#include <stdlib.h>

 

extern char **environ;

 

main(int argc, char *argv[])

{

char buffer[40];

int i;

 

if(argc < 2){

printf("argv error\n");

exit(0);

}

 

// egghunter

for(i=0; environ[i]; i++)

memset(environ[i], 0, strlen(environ[i]));

 

if(argv[1][47] != '\xbf')

{

printf("stack is still your friend.\n");

exit(0);

}

 

// check the length of argument

if(strlen(argv[1]) > 48){

printf("argument is too long!\n");

exit(0);

}

 

strcpy(buffer, argv[1]);

printf("%s\n", buffer);

 

// buffer hunter

memset(buffer, 0, 40);

}

 

darkelfargv[1]의 길이가 48이하여야 했다.

어차피 지금까지 argv[1]의 길이가 48이 넘은적이 없으므로 똑같이 공격을 했다.

 

wolfman.c 때와 똑같이 공격했다.

우선 argv[2]의 주소를 찾고,

bufferSFP\x90으로 채우고 retargv[2]의 주소를 넣은 후, argv[2]에 쉘코드를 넣어 공격했다.