목록Wargame (39)
Sh4n3e
이번 문제는 이상하게도 생각한 방법대로 실행이 되지 않아 애를 먹었다. 하지만 이번 문제를 해결하는 과정중에 해당 문제를 해결할 수 있는 방법이 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(..
우선 코드부터 살펴보자. wolfman wolfman.c [orc@localhost orc]$ cat wolfman.c /* 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][4..
이번 문제는 어쩔 수 없이 ShellCode를 사용해야하는 문제다. 그 이유는 소스코드를 보며 설명하겠다. [goblin@localhost goblin]$ cat orc.c /* 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..
해당 문제도 이전에 사용했던 RTL Payload를 그대로 사용한다. 문제를 파악해보자. /* 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); } 해당 문제는 이전 문제와는 다르게 표준입출력을 통해 입력을 받는 것을 확인할 수 있다. (표준입출력(stdin) : getsh) 따라서 이전과는 다른 방식으로 페이로드를 넘겨줘야만 한다. 그 전에 어셈블 코드를 한번 살펴보자 [cobolt@localhost cobolt]$ gdb -q g (gdb) set disassembly-flavor i..
Gremlin이 제공하는 문제인 cobolt는 레벨1인 gate문제를 RTL로 풀었다면 너무 간단한 문제다. 사용한 페이로드만 약간만 수정해서 사용하면 된다. [gremlin@localhost gremlin]$ ls 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", ..
해당 문제는 기본 BOF문제이다. 하지만 여기서 나는 쉘코드를 이용하기 귀찮았기에 RTL기법을 사용하여 gremlin의 권한을 획득하였다. 풀이는 다음과 같다. [gate@localhost gate]$ ls gremlin gremlin.c [gate@localhost gate]$ cat gremlin.c /* 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);..
LOB Redhat은 bash의 버전이 낮아서, 쉘 상에서 \xff를 입력했을 때, \x00으로 처리해버리는 문제가 발생한다. 따라서 기존에 사용하던 Bash shell을 Bash2로 설정해줘야 한다. ID : root PW : hackerschoolbof 해당 아이디로 접속하여, /etc/passwd를 편집기로 편집한다. 편집내용은 :%s/bash/bash2/ 인데, 이것은 설명하자면 "string bash를 찾아 bash2로 치환하겠다." 라는 의미이다. 해당 설정이후, /sbin/ifconfig를 통해 ip를 확인하고, telnet으로 접속하여 LOB를 이어나가면 된다. 초기 ID와 PW는 gate/gate 이다.