Sh4n3e
우선 코드부터 살펴보자. 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..