Wargame 🎮

반응형
Wargame 🎮/🏹 LOB(Lord Of Bof)

[LOB] wolfman

[LOB] wolfman walfman으로 로그인하고 #include #include extern char **environ; main(int argc, char *argv[]) { char buffer[40]; int i; if(argc 48){ pri..

Wargame 🎮/🏹 LOB(Lord Of Bof)

[LOB] orc

[LOB] orc orc로 로그인하고 문제를 확인하면 #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); // buffer hu..

Wargame 🎮/🏹 LOB(Lord Of Bof)

[LOB] goblin

[LOB] goblin goblin으로 로그인한 후 파일을 확인하면, orc, orc.c 파일이 있다. #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("..

Wargame 🎮/🏹 LOB(Lord Of Bof)

[LOB] cobolt

[LOB] cobolt cobolt로 로그인한 후에 문제를 확인하면 다음과 같다. 전의 문제와 다른점은 입력을 main함수 인자로 받은게 아니라 gets함수로 입력하는 것이다. int main() { char buffer[16]; gets(buffer); printf("%s\n", buffer); } 코드를 확인하면. buffer의 크기는 16bytes이지만, gets(buffer);을 보면 길이에 제한이 없기 때문에 이곳에서 bof가 일어난다. gdb로 goblin 파일을 확인해 보면 sub $0x10, %esp을 통해서 변수로 0x10이 할당된다는 것을 알 수 있다. (16진수) 0x10 → (10진수) 16 변수의 크기도 16bytes이기 때문에 buffer와 sfp 사이에는 dummy 값이 없다는..

Wargame 🎮/🏹 LOB(Lord Of Bof)

[LOB] gremlin

[LOB] gremlin gremlin으로 로그인한 후 파일을 확인하면 cobolt와 cobolt.c 파일이 있다는 것을 알 수 있다. cobolt.c 파일을 확인하면, 전 문제(gate)와 비슷하다. 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); } 1. 코드를 확인해 보면, argc < 2 부분을 통해서 인자가 하나라도 주어져야 하고 2. strcpy(buffer, argv[1]); 을 통해서 인자값을 buffer로 입력받는데 입력값에 대한 길이 제한이 없다. ☞ 여기서 bof가 일..

Wargame 🎮/🏹 LOB(Lord Of Bof)

[LOB] gate

[LOB] gate gate / gate로 로그인을 하고 gremlin.c 파일을 확인해 본다. 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); } 1. 코드를 확인해 보면, argc < 2 부분을 통해서 인자가 하나라도 주어져야 하고 *인자에 대한 자세한 설명은 전에 작성했던 글 참고 : 2023.01.31 - [시스템/시스템 해킹] - main 함수 인자 2. strcpy(buffer, argv[1]); 을 통해서 인자값을 buffer로 입력받는데 입력값에 대한 길이 제한이 없다. ..

Wargame 🎮/🏹 LOB(Lord Of Bof)

[LOB] 시작 (로컬 서버 구축하기)

[LOB] 시작 (로컬 서버 구축하기) LOB는 해커스쿨에서 만든 시스템으로 The Lord of The Bufferoverlow의 약자이다. FTZ보다 더 어려운 문제들로 level20까지 구성되어 있다. 링크 주소 : https://www.hackerschool.org/HS_Boards/zboard.php?id=HS_Notice&no=1170881885 https://www.hackerschool.org/HS_Boards/zboard.php?id=HS_Notice&no=1170881885 [BOF-BufferOverflow- 원정대란?] 비교적 쉬운 BOF 공략 환경인 Redhat 6.2에서부터 궁극의 Fedora 14까지 수십개의 레벨을 거쳐가며 BOF 시스템 해킹 실습을 하는 War-Game입니다..

Wargame 🎮/🎡 FTZ

[FTZ] level20

[FTZ] level20 이제 마지막 문제이다. level20으로 로그인을 한 다음 문제를 보면 다음과 같다. 이번에도 코드만 있는데 #include main(int argc,char **argv) { char bleh[80]; setreuid(3101,3101); fgets(bleh,79,stdin); printf(bleh); } 기존 문제들은 입력값 길이를 넘치게 넣을 수 있어, bof 로 문제를 풀 수 있었는데 이번 문제는 char bleh[80];에 따라 bleh는 80bytes이고 fgets(bleh,79,stdin);으로 79bytes까지만 입력이 가능하기에 bof 공격이 불가능하다. 대신에 printf(bleh); 이부분에서 입력값에 대한 형식(포맷)을 지정해 주지 않았기 때문에 포맷스트링 ..

반응형
제나나
'Wargame 🎮' 카테고리의 글 목록 (5 Page)