Sh4n3e
우선 문제를 설명하기 앞서 문제의 코드부터 살펴보자. [orge@localhost orge]$ cat troll.c/* The Lord of the BOF : The Fellowship of the BOF - troll - check argc + argv hunter*/ #include #include extern char **environ; main(int argc, char *argv[]){char buffer[40];int i; // here is changedif(argc != 2){printf("argc must be two!\n");exit(0);} // egghunter for(i=0; environ[i]; i++)memset(environ[i], 0, strlen(environ[i])); ..
이번 문제는 이상하게도 생각한 방법대로 실행이 되지 않아 애를 먹었다. 하지만 이번 문제를 해결하는 과정중에 해당 문제를 해결할 수 있는 방법이 2가지가 존재함을 알 수 있었다. 우선 이 문제의 소스부터 보기로 하자. /* The Lord of the BOF : The Fellowship of the BOF - orge - check argv[0] */ #include #include 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(..
이번 문제도 별게 없다. 그냥 조금만 분석해서 저번 문제의 Payload를 수정할 뿐. 소스코드와 어셈블코드, Payload, 결과는 아래와 같다. 소스코드 [wolfman@localhost wolfman]$ ls darkelf darkelf.c [wolfman@localhost wolfman]$ cat darkelf.c /* The Lord of the BOF : The Fellowship of the BOF - darkelf - egghunter + buffer hunter + check length of argv[1] */ #include #include extern char **environ; main(int argc, char *argv[]) { char buffer[40]; int i; if(..