본문 바로가기

Pwnable/LOB

(12)
[ProjectH4C] 해커스쿨 LOB(BOF 원정대) Level4 goblin에 로그인하면 역시나 소스 코드와 실행 파일이 하나 보인다. #include #include 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); } strcpy(buffer, argv[1]); printf("%s\n", buffer); } ..
[ProjectH4C] 해커스쿨 LOB(BOF 원정대) Level3 cobolt에 로그인하자마자 역시 실행 파일과 소스코드가 보인다. 소스 코드부터 보았다. [cobolt@localhost cobolt]$ cat goblin.c /* The Lord of the BOF : The Fellowship of the BOF - goblin - small buffer + stdin */ int main() { char buffer[16]; gets(buffer); printf("%s\n", buffer); } LEVEL 1, 2와는 다르게 gets를 이용해 입력을 받는다. gets도 strcpy와 같이 입력 받은 문자열의 길이를 확인하지 않아서 오버플로우 취약점이 존재하는 함수이다. [cobolt@localhost cobolt]$ ./goblin AAAAAAAAAAAAAAAAA..
[ProjectH4C] 해커스쿨 LOB(BOF 원정대) Level2 로그인 하자마자 홈 디렉토리에 cobolt 실행파일과 cobolt.c 소스 파일이 보인다. 소스 파일을 먼저 확인해보았다. [gremlin@localhost gremlin]$ cat cobolt.c /* The Lord of the BOF : The Fellowship of the BOF - cobolt - small buffer */ int main(int argc, char *argv[]) { char buffer[16]; if(argc < 2){ printf("argv error\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); } 이번에도 argv 값을 buffer에 복사하는데 strcpy 함수를 이용한다. 이번엔 버퍼가 16바이트..
[ProjectH4C] 해커스쿨 LOB(BOF 원정대) Level1 LOB란 Lord Of Buffer overflow의 약자로, 1단계부터 20단계까지 있으며, 버퍼 오버플로우 관련 문제들을 모아놓은 것이라고 한다. 우선 시작하기 전에 root 계정으로 로그인 후 /etc/passwd에서 :%s/bash/bash2/를 입력해서 bash를 모두 bash2로 바꾸어주어야 한다. bash는 \xFF를 NULL로 인식하기 때문이라고 한다. 첫 단계의 id/pw 는 gate/gate이다. FTZ와 동일하게 my-pass 명령어가 존재하는데, 로그인 한 계정의 패스워드를 출력해주는 명령어라고 한다. 텔넷을 통해 로그인 한 뒤에 ls를 입력해보았다. 소스 파일 하나와 실행파일이 보인다. gremlin을 실행해보았다. argv 에러가 출력된다. 입력 값이 무언가 있어야 하는 것 같다..