Wargame/pwnable.kr

    uaf

    1. intro 걍 잘까 하다가 잠시 짬내서 한다는게 1시간이 훅 날아갔다 ㅋ 2. code 및 분석 2.1. code #include #include #include #include #include using namespace std; class Human{ private: virtual void give_shell(){ system("/bin/sh"); } protected: int age; string name; public: virtual void introduce(){ cout

    cmd2

    1. intro 2. code 및 분석 2.1. code #include #include int filter(char* cmd){ int r=0; r += strstr(cmd, "=")!=0; r += strstr(cmd, "PATH")!=0; r += strstr(cmd, "export")!=0; r += strstr(cmd, "/")!=0; r += strstr(cmd, "`")!=0; r += strstr(cmd, "flag")!=0; return r; } extern char** environ; void delete_env(){ char** p; for(p=environ; *p; p++) memset(*p, 0, strlen(*p)); } int main(int argc, char* argv[],..

    cmd1

    1. intro 2. code 및 분석 2.1. code #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; } 2.2. 분석 putenv를 통해 PATH 환경변수를 임의 폴더로 변경한다. 이는 곧 일반적으로 실행했던 ls, cat 등의 명령어가 그대로..

    lotto

    1. intro 2. code 및 분석 2.1. code #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, lo..

    blackjack

    1. intro 2. code 및 분석 2.1. code 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 cannot bet more money than you have."); printf("\nEnter Bet: "); scanf("%d", &bet); return bet; } else return bet; } // End Function 2.2. 분석 코드가 길기에 주요 함수만 따왔다. 입력받은 값의 크기가 cash보다 크지만 않으면 되기에 음..

    flag

    1. intro 2. code 및 분석 2.1. code - unpacking 후 code이다. int __cdecl main(int argc, const char **argv, const char **envp) { char *dest; // [rsp+8h] [rbp-8h] puts("I will malloc() and strcpy the flag there. take it.", argv, envp); dest = (char *)malloc(100LL); strcpy(dest, flag[0]); return 0; } 2.2. 분석 파일을 분석하려 열었더니 뭔가 좀 이상하다. packing 여부를 확인하였더니 UPX로 packing되어있었다. unpack info에 나와있는 것처럼 파일을 다운받아 unpa..

    coin1

    1. intro 2. code 및 분석 2.1. code 별도 코드 없음. 2.2. 분석 --------------------------------------------------- - 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, counter..

    shellshock

    1. intro 2. code 및 분석 2.1. code #include int main(){ setresuid(getegid(), getegid(), getegid()); setresgid(getegid(), getegid(), getegid()); system("/home/shellshock/bash -c 'echo shock_me'"); return 0; } 2.2. 분석 흠... 초반이라 그런가... 문제가 영 재미가 없네 ;;; 파일 권한으로 set하고 shock_me 라는 메시지를 출력한다. 3. 취약점 확인 및 공격 준비 3.1. 취약점 CVE-2014-6271 3.2. 공격 준비 뭐...없다 그냥 CVE 취약점이라.... 요약하자면 실행하려하는 bash 명령어를 환경변수에 등록하여 이를 함..

    mistake

    1. intro 2. code 및 분석 2.1. code #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{ pri..

    input

    1. intro 2. code 및 분석 2.1. code #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\..