wargame/IO smash the stack 썸네일형 리스트형 level5 summary:simple RTL level5@io:/levels$ cat level05.c#include #include int main(int argc, char **argv) { char buf[128]; if(argc < 2) return 1; strcpy(buf, argv[1]); printf("%s\n", buf); return 0;} level5@io:/tmp/sanguine2$ cat whereisshell.c#include main(){ long shell = 0xb7eaaf10; while(memcmp((void*)shell,"/bin/sh",8)) shell++; printf("%x\n",shell);} level5@io:/tmp/sanguine2$ ./whereisshellb7faa.. 더보기 level4 summary: env PATH attack 소스를 보면 level4@io:/levels$ cat level04.c//writen by bla#include #include int main() { char username[1024]; FILE* f = popen("whoami","r"); fgets(username, sizeof(username), f); printf("Welcome %s", username); return 0;} whoami란 프로그램을 popen이란 함수를 통해서 whoami를 실행시키는데, 이것을 이용해 가짜 whoami파일을 만들어서 공략하면 된다. level4@io:/tmp/sanguine$ cat whoami.c#include int main(){ char *args[]={"/.. 더보기 level3 summary: simple bof level3@io:/levels$ cat level03.c//bla, based on work by beach #include #include void good(){ puts("Win."); execl("/bin/sh", "sh", NULL);}void bad(){ printf("I'm so sorry, you're at %p and you want to be at %p\n", bad, good);} int main(int argc, char **argv, char **envp){ void (*functionpointer)(void) = bad; char buffer[50]; if(argc != 2 || strlen(argv[1]) < 4) return 0; memcp.. 더보기 level2_alt summary: strtod도 NaN(Not a Number)을 지원하는 함수이다. NaN은 숫자가 아니기 때문에 어떠한 숫자와도 비교하면 거짓이된다. 처음에는 Float은 4바이트고 double은 8바이트라 부동소수점 계산을 통해 값을 비슷하게 맞추는 문제인줄 알앗다.그러나 코딩해서 돌려본 결과 정확하게 일치하게 마출수는 없엇다. 그래서 고민하던중 strtod의 man페이지 에서 다음과 같은것을 발견한다. A NAN is "NAN" (disregarding case) optionally followed by '(', a sequence of characters, followed by ')'. The character string speci†fies in an implementation-depende.. 더보기 level2 level2@io:/levels$ cat level02.c//a little fun brought to you by bla #include #include #include #include void catcher(int a){ setresuid(geteuid(),geteuid(),geteuid()); printf("WIN!\n"); system("/bin/sh"); exit(0);} int main(int argc, char **argv){ puts("source code is available in level02.c\n"); if (argc != 3 || !atoi(argv[2])) //인자를 2개 줘야하고 2번쨰인자가 0이면 안된다. return 1; signal(SIGFPE, catcher); //S.. 더보기 level1을 풀다가 생긴 의문점에 대한 분석 1. 메인함수에서 함수를 불러올때 인자를 주지않았는데 어떻게 함수가 정상실행 되는가? 2.YouWin함수는 어떻게 쉘을 실행시키는가 3.fscanf 역추적으로 풀기fscanf가 어떤것인지는 알고 있었지만 레페런스를 찾아보지않고 처음에 풀려는 고집떄메, 역추적으로 문제를 풀었다. 0804809f : 804809f: 81 ec 00 10 00 00 sub $0x1000,%esp 80480a5: b8 03 00 00 00 mov $0x3,%eax //read 시스템콜 80480aa: bb 00 00 00 00 mov $0x0,%ebx // 0번 fd (stdin) 80480af: 89 e1 mov %esp,%ecx 80480b1: ba 00 10 00 00 mov $0x1000,%edx 80480b6: cd .. 더보기 level1 putty로 접속 ssh level1@io.smashthestack.orgpassword: level1 level1@io:~$ cd /levelslevel1@io:/levels$ gdb -q level01Reading symbols from /levels/level01...(no debugging symbols found)...done.(gdb) disas mainDump of assembler code for function main: 0x08048080 : push $0x8049128 0x08048085 : call 0x804810f 0x0804808a : call 0x804809f 0x0804808f : cmp $0x10f,%eax 0x08048094 : je 0x80480dc 0x0804809a .. 더보기 이전 1 다음