풀이

    [pwnable.kr][Toddler] shellshock 문제풀이

    [pwnable.kr][Toddler] shellshock 문제풀이

    shellshock shellshock@ubuntu:~$ ls -l total 960 -r-xr-xr-x 1 root shellshock 959120 Oct 12 2014 bash -r--r----- 1 root shellshock_pwn 47 Oct 12 2014 flag -r-xr-sr-x 1 root shellshock_pwn 8547 Oct 12 2014 shellshock -r--r--r-- 1 root root 188 Oct 12 2014 shellshock.c ls로 해서 보면 shellshock과 bash가 존재한다.shellshock.c를 살펴보자. #include int main(){ setresuid(getegid(), getegid(), getegid()); setresgid(get..

    [pwnable.kr][Toddler] leg 문제풀이

    [pwnable.kr][Toddler] leg 문제풀이

    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 = ..

    [pwnable.kr][Toddler] input 문제풀이

    [pwnable.kr][Toddler] input 문제풀이

    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("S..

    [pwnable.kr][Toddler] random 문제풀이

    [pwnable.kr][Toddler] random 문제풀이

    Random #include int main(){ unsigned int random; random = rand();// random value! unsigned int key=0; scanf("%d", &key); if( (key ^ random) == 0xdeadbeef ){ printf("Good!\n"); system("/bin/cat flag"); return 0; } printf("Wrong, maybe you should try 2^32 cases.\n"); return 0; } rand 함수로 랜덤값을 가져오고 있다. 하지만 컴퓨터에서 랜덤값은 항상 똑같은 패턴으로 생성된다. 그래서 보통 랜덤값을 사용할 때에는 rand 함수로 나온 값에 현재 시간이나 다른 요소들을 포함하여 생성한다. 이 ..

    [pwnable.kr][Toddler] passcode 문제풀이

    [pwnable.kr][Toddler] passcode 문제풀이

    PASSCODE keyword : GOT Write, fflush #include #include void login(){ int passcode1; int passcode2; printf("enter passcode1 : "); scanf("%d", passcode1); fflush(stdin); // ha! mommy told me that 32bit is vulnerable to bruteforcing :) printf("enter passcode2 : "); scanf("%d", passcode2); printf("checking...\n"); if(passcode1==338150 && passcode2==13371337){ printf("Login OK!\n"); system("/bin/cat ..

    [pwnable.kr][Toddler] flag 문제풀이

    [pwnable.kr][Toddler] flag 문제풀이

    Flag 해당 바이너리를 다운받아 실행해보면 root@kali:~/BoB7/pwnable/flag# ./flag I will malloc() and strcpy the flag there. take it. 위와 같이 뜬다. root@kali:~/BoB7/pwnable/flag# checksec flag [*] '/root/BoB7/pwnable/flag/flag' Arch: amd64-64-little RELRO: No RELRO Stack: No canary found NX: NX disabled PIE: No PIE (0x400000) RWX: Has RWX segments Packer: Packed with UPX checksec로 확인해보면 UPX로 실행압축 되었음을 알 수 있다. root@kal..

    [pwnable.kr][Toddler] bof 문제풀이

    [pwnable.kr][Toddler] bof 문제풀이

    bof keyword : Stack Canary #include #include #include void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme);// smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; } main에서 key값으로 0 xdeadbeef값을 인자로 전달한다.32byte크기의 overflow(me배열이 선언되었데, gets함수로 인해 입력 크기를 제한하지 않고 입력 받게 된다.key값을 ..

    [pwnable.kr][Toddler] col 문제풀이

    [pwnable.kr][Toddler] col 문제풀이

    col #include #include unsigned long hashcode = 0x21DD09EC; unsigned long check_password(const char* p){ int* ip = (int*)p; int i; int res=0; for(i=0; i