전체 글
[Pwnable.kr] random 풀이 (1pt)
풀이 다음은 random.c의 코드이다. #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; } 언뜻 보면, random 값은 맨날 바뀌어 정말로 $2^{32}$번의 연산을 해야 하는 듯 보이지만, 과연 그럴까? 결론부터 말하자면, random 값은 바뀌지 않는다. random 값..
[Pwnable.kr] passcode 풀이 (10pt)
풀이 다음은 passcode.c 코드이다. #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"); } els..
[Pwnable.kr] flag 풀이 (7pt)
풀이 읭? IDA로 안 열리네? 문제(Papa brought me a packed present! let's open it.)를 자세히 읽어보니 패킹되어 있는 듯하다. 역시나 UPX로 패킹되어있다. 패킹을 풀어보자. IDA로 아무 생각없이 열어봤다. 음?? 클릭해보자.
[Pwnable.kr] bof 풀이 (5pt)
풀이 cafebabe를 babecafe로 봐서 삽질.. 이번 문제는 간단한 32bit bof 문제다. 다음은 bof.c의 코드이다. 1 #include 2 #include 3 #include 4 void func(int key){ 5 char overflowme[32]; 6 printf("overflow me : "); 7 gets(overflowme); // smash me! 8 if(key == 0xcafebabe){ 9 system("/bin/sh"); 10 } 11 else{ 12 printf("Nah..\n"); 13 } 14 } 15 int main(int argc, char* argv[]){ 16 func(0xdeadbeef); 17 return 0; 18 } func 함수의 인자로 0xde..
[Pwnable.kr] collision 풀이 (3pt)
풀이 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
[Pwnable.kr] fd 풀이 (1pt)
풀이 fd.c 파일의 내용은 다음과 같다. #include #include #include char buf[32]; int main(int argc, char* argv[], char* envp[]){ if(argc
[HackCTF] Pwnable 후기
^--^ 역시 포너블은 어렵다. 다른 사이트에서 기초적인 문제를 풀고 기본 개념들을 완벽히 숙지한 담에, 건드려보는게 좋을 거 같다고 판단했다. Write-up을 보는건 아무런 의미가 없으니까 ^^..
[HackCTF] BOF_PIE 풀이 (150p)
문제 종류 - Pwnable 사용한 툴 - IDA nc ctf.j0n9hyun.xyz 3008 풀이 일단 IDA로 파일을 열어보자. 수상해 보이는 2개의 함수가 있다. 일단 main부터 봐보도록 하자. main에서는 welcome 함수를 호출하고 프로그램을 종료한다. 이번 문제는 main이 주가 아닌가 보다. welcome 함수에서는 j0n9hyun의 주소 값을 출력하고 scanf로 값을 하나 받는다. 일단 scanf에서 bof가 일어나는 듯하다. j0n9hyun 함수는 flag를 출력해주는 함수다. 그런데 문제를 보면, PIE라고 적혀있다. PIE는 메모리 보호 기법 중 하나로, binary가 랜덤한 주소를 갖게 된다. 그래서 프로그램에서 출력해주는, 주소로 공격을 시도하면 당연히 페이로드가 동작하지 ..