Wargame
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDhL2h%2FbtrLTB8jQpx%2FELVKolROgzJKdqKIHNvaG1%2Fimg.png)
[lob] darkelf -> orge
1. intro 2. code 및 분석 2.1 C code /* 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], ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FduPPAs%2FbtrLSuhagbe%2FwKZGOVzIXBudBGAM41mZW1%2Fimg.png)
[lob] wolfman -> darkelf
1. intro 2. code 및 분석 2.1 C code /* 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] != '\..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbY8vec%2FbtrLTBfE9IC%2FAsaK21H5Pp8q8HFlbYtxQ1%2Fimg.png)
[lob] orc -> wolfman
1. intro 2. code 및 분석 2.1 C code /* 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 s..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4RXDO%2FbtrLStB4GLZ%2FJVC6B7ACEQ4WK9FMQAXTwK%2Fimg.png)
[lob] goblin -> orc
1. intro 2. code 및 분석 2.1 C code /* 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"..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXoTMb%2FbtrLSu8MSwj%2FxXEqPw8RPlJqHjdRsIzV6K%2Fimg.png)
[lob] cobolt -> goblin
1. intro 2. code 및 분석 2.1 C code /* 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); } 2.3. 분석 2.3.1. assembler code (중요 부분) ... 0x80483fe :lea 0xfffffff0(%ebp),%eax 0x8048401 :push %eax 0x8048402 :call 0x804830c ... 이번에는 gets 함수로 ebp-0x10 위치에 값을 받아들인다. 3. 취약점 확인 및 공격 준비 3.1 취약점 gets 함수로 값을 받아들일..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvRLNP%2FbtrLLWyTOD3%2FjCkwZZzzoix1bEadL4tn10%2Fimg.png)
[lob] gremlin -> cobolt
1. intro 2. code 및 분석 2.1 C code /* 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); } 2.3. 분석 2.3.1. assembler code (중요 부분) ... 0x8048453 :mov 0xc(%ebp),%eax #ebp+0xc의 값을 eax에 넣고 0x8048456 :add $0x4,%eax #eax + 0x4 주소를 ea..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbenuWm%2FbtrLE1TVfLr%2Feas6hZWkRaMZl9KjKsLZh1%2Fimg.png)
[lob] gate -> gremlin
1. intro 사실 옛날옛적, 그러니까 십 몇여년 전에 대부분의 문제를 풀었었다. 다시 해킹 공부를 하기로 마음먹은 뒤에는 일반적인 방법으로 풀고 싶지 않았고, 조금이라도 나에게 도움이 되는 방법으로 풀고 싶었다. 그래서 코드 파일을 보지 않고 gdb를 통한 어셈블러 코드만 보고 문제를 풀었었고, 이 write up 들도 모두 그렇게 글을 써내려갈 예정이다. 물론 시스템이, 컴파일러가 바뀌면서 지금의 어셈블러 코드와 다른 부분이 다소 있긴 하지만, 핸드레이에 도움이 된 것은 확실하다. 누군가 이 글을 본다면 비슷한 방법으로 도전해보는 것도 좋을 것 같다. 2. code 및 분석 2.1 C code /* The Lord of the BOF : The Fellowship of the BOF - gremli..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0QV2o%2FbtrLEbvSojQ%2FrzANVNerLVFkq3ox8JkczK%2Fimg.png)
[lob] 들어가기 전에 - shellcode 제작.
1. intro 문제를 풀기 전에 shellcode 제작부터 조금 알아보자. 물론 이미 인터넷에는 많은 shellcode가 올라와있고, pwntools에서는 무려 자동으로 만들어주기까지 한다. 하지만 이를 이해하면 어셈블리어 공부와 더불어 다른 shellcode 작성을 위한 기초가 된다. 이 글에서는 lob만을 위한 shellcode를 작성할 예정이다. 2. shellcode란 보통 shell을 실행시켜주기 위한 기계어의 집합을 이야기한다고 생각할 수 있는데, 단순히 shell만 실행시켜주는 것이 아닌 특정 동작을 하기 위한 모든 code라고 이해하는 것이 좋다. 그 이유는 간혹 문제에서 shell을 따는 것이 아닌 flag를 바로 읽어야하거나, 바인드 / 리모트 셀과 같이 포트를 열어주는 동작 등을 해..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzGrj6%2FbtrLFzoQsLk%2F7kdVyN1Ay98f6T20jzgMW1%2Fimg.png)
[lob] the Lord Of Buffer overflow를 시작하며
hackerschool에서 제공하는 buffer overflow 모의 해킹 시스팀이다. +해커스쿨 커뮤니티+ by HACKERSCHOOL.org www.hackerschool.org 만들어진지 오래 되었으며, 32 bit 환경인 구버전 os로 만들어졌기 때문에 최근의 문제들과는 많이 다르다. 그래서 사실 buffer overflow를 이미 접해보았다면 풀지 않아도 무방한 수준이다. 그래도 만일 누군가 buffer overflow를 시작한다면 망설임 없이 추천해줄 수 있는 시스템 중 하나이다. 개인적으로 이미 모든 문제를 푼 지 오래 됐고 다시 정리하는 수준에서 글을 쓰려 한다. 서두에 작성한 것 처럼 os 버전도 많이 낮고, 지금은 거의 사용되지 않는 32 bit 환경이기에 굳이 다시 봐야하나 라는 생각..