#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..
워게임
#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; } ssh접속해 소스코드를 보면 random한 값을 생성해 우리가 입력한 값과 xor연산을 해 0xdeadbeef값이 나오면 flag를 출력해주는 거같다. 근데 내가 알기론 저렇게 랜덤값을 생성하면 값이 바뀌지않는 걸로 안다. 소스..
#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 flag"); } else{ printf("Login Failed!..
문제 설명을 보면 리버싱쪽에 가까운 문제인거같다. wget으로 바이너리를 받고 혹시나해서 strings로 문자열들을 보았는데 upx패킹이 되어 있었다. kimg00n@kimg00n:~/Desktop/upx-3.96-amd64_linux$ ./upx -d ~/pwnable.kr/flag/flag Ultimate Packer for eXecutables Copyright (C) 1996 - 2020 UPX 3.96 Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020 File size Ratio Format Name -------------------- ------ ----------- ----------- 883745 quit gdb로 보다보면 레지스터..
이번 문제는 ssh가 아닌 nc로 연결해 푸는 문제다. 실행파일과 소스코드는 wget으로 다운받으면 된다. #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; } 소스코드를 보면 기본적인 bof다. gets로 입력을 받아 BOF가 터진다. func함수의 인자인 key값을 바꿔서 0xcafebabe로 ..
col@pwnable:~$ cat col.c #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> 0x21DD09EC /5 113626824.8 >>> 0x21DD09E9 /5 113626824.2 >>> 0x21DD09E8 /5 113626824.0 >>> hex(113626824) '0x6c5cec8' >>> 5로 딱 나누어 떨어지지 않아서 0x6c5cec8을 4번, 1번은 0x6c5cecc를 입력하면 될거같다. col@pwnable:~$ ./col `python -c 'print "\xc8..