본문 바로가기

Pwnable.kr [cmd1] #include #include int filter(char* cmd){ int r=0; r += strstr(cmd, "flag")!=0; r += strstr(cmd, "sh")!=0; r += strstr(cmd, "tmp")!=0; return r; } int main(int argc, char* argv[], char** envp){ putenv("PATH=/thankyouverymuch"); if(filter(argv[1])) return 0; system( argv[1] ); return 0; } system 함수로 argv[1]을 실행시키지만, filter에서 flag, sh, tmp를 걸러낸다. 내가 파일을 쓸 수 있는 곳은 /tmp 안이므로 이것저것 걸러지더라. Symbolic link..
Pwnable.kr [lotto] #include #include #include #include unsigned char submit[6]; void play(){ int i; printf("Submit your 6 lotto bytes : "); fflush(stdout); int r; r = read(0, submit, 6); printf("Lotto Start!\n"); //sleep(1); // generate lotto numbers int fd = open("/dev/urandom", O_RDONLY); if(fd==-1){ printf("error. tell admin\n"); exit(-1); } unsigned char lotto[6]; if(read(fd, lotto, 6) != 6){ printf("error2. t..
Pwnable.kr [blackjack] 음 먼저 코드 분석을 하지는 않았고, 그 전에 우선 입력값 검사가 제대로 되어 있는지 확인했다. 하다보면, 이기면 베팅한 만큼 돈을 얻고, 지면 돈을 잃는데, 베팅 금액은 현재 금액을 넘길 수 없다. 하지만 베팅을 -로 하고 게임을 진다면? 이라고 생각했고 바로 됐다. 결과가 그렇게 나왔으니, 역으로 소스코드를 확인해보면 베팅이라는 함수에서 bet > cash만 검사하는 것을 볼 수 있다. int betting() //Asks user amount to bet { printf("\n\nEnter Bet: $"); scanf("%d", &bet); if (bet > cash) //If player tries to bet more money than player has { printf("\nYou canno..
Pwnable.kr [coin1] --------------------------------------------------- - Shall we play a game? - --------------------------------------------------- You have given some gold coins in your hand however, there is one counterfeit coin among them counterfeit coin looks exactly same as real coin however, its weight is different from real one real coin weighs 10, counterfeit coin weighes 9 help me to find the counterfei..
Pwnable.kr [shellshock] #include int main(){ setresuid(getegid(), getegid(), getegid()); setresgid(getegid(), getegid(), getegid()); system("/home/shellshock/bash -c 'echo shock_me'"); return 0; } 쉘쇼크라고 검색하면 자료가 많이 나온다. env x='() { :;}; echo vulnerable' bash -c "echo this is a test" 나무위키에 나오는 취약성 확인 코드인데, vulnerable이 출력되면 안 된다. 환경변수로 함수를 선언하고, 이후에 bash까지 실행돼버리는 취약점이란다. 추가로 더 확인해보면, 환경변수로 함수 선언시 이후에 코드에 대해서 버려야 되는데, 확인하..
Pwnable.kr [mistake] #include #include #define PW_LEN 10 #define XORKEY 1 void xor(char* s, int len){ int i; for(i=0; i 0)){ printf("read error\n"); close(fd); return 0; } char pw_buf2[PW_LEN+1]; printf("input password : "); scanf("%10s", pw_buf2); // xor your input xor(pw_buf2, 10); if(!strncmp(pw_buf, pw_buf2, PW_LEN)){ printf("Password OK\n"); system("/bin/cat flag\n"); } else{ printf("Wrong Password\n"); } close..
Pwnable.kr [leg] #include #include int key1(){ asm("mov r3, pc\n"); } int key2(){ asm( "push{r6}\n" "addr6, pc, $1\n" "bxr6\n" ".code 16\n" "movr3, pc\n" "addr3, $0x4\n" "push{r3}\n" "pop{pc}\n" ".code32\n" "pop{r6}\n" ); } int key3(){ asm("mov r3, lr\n"); } int main(){ int key=0; printf("Daddy has very strong arm! : "); scanf("%d", &key); if( (key1()+key2()+key3()) == key ){ printf("Congratz!\n"); int fd = open..
Pwnable.kr [input] #include #include #include #include #include int main(int argc, char* argv[], char* envp[]){ printf("Welcome to pwnable.kr\n"); printf("Let's see if you know how to give input to program\n"); printf("Just give me correct inputs then you will get the flag :)\n"); // argv if(argc != 100) return 0; if(strcmp(argv['A'],"\x00")) return 0; if(strcmp(argv['B'],"\x20\x0a\x0d")) return 0; printf("Stage 1..