본문 바로가기

CTF

(51)
Pwnable.tw pwnable_dubblesort Write up 나름 재밌는 문제였는데 조금 이상한 문제이기도 했다. 진짜 처음에 BOF터지는건 찾았는데 스택이 자꾸 이상하게 밖혀서 고생좀 했다. 일단 Leak 은 __printf_chk() 이 함수 이용한거임. 실행시키면 이렇게 앞에 이상한 문자열이 나오는데 저게 __printf_chk() 이거때문에 그러는거같았음. 스택 봐보면 A를 이어서 넣었는데 41앞에 붙어있는게 보일턴데 저거까지 같이 출력되는거임. 즉 libc가 있는대까지 A를 붙여서 Memory Leak을 시켜버리는거임. 근데 개 골떄리는게 내꺼엔 아됬음 ㅋㅋㅋㅋ nc로 바꾸면 Leak 이 정상적으로 되는데 로컬로만 하면 안됨 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 이거때문에 멘탈 한번 나가버림 충격 그 자체... 뭐 일단 Leak 은 됬으니까... leak 은 다른데서 ..
Pwnable.tw pwnable_3x17 Write up 보호되어 있는 글입니다.
Pwnable.kr pwnable_random Write up d #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 값 받아놓고 그거 키랑 xor한 값이 0xdeadbeef 여야 되나보다. 일단 random 에서는 seed값을 주고있지 않다. seed값을 주지 않으면 항상 r..
Pwnable.kr pwnable_passcode Write up 이번에는 바이너리와 C 코드가 주어진다. 일단 C 코드가 주어지니, 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"); sys..
Pwnable.kr pwnable_flag Write up 일단 이번에는 바이너리만 주어지는 문제이다. 일단 처음에 무슨 문제인지 몰라서 가만히 있었다가 strings라는 명령어를 이용해서 돌려봤더니, UPX라는 문자열을 볼수있다. 그래서 다시한번 확인겸 DIE로 한번 돌려봤더니 언패킹이 되어있다. UPX 언패킹은 쉬우므로 따로 설명하진 않겠다. 그래서 언패킹을 하게되면, IDA 에 main을 볼수있는데, 저기서 flag라는거에 들어가면 data영역에 flag가 있는것을 확인할수 있다.
Pwnable.kr pwnable_bof Write up 아마 pwnable.kr에서 제일쉬운 문제가 아닐까 생각한다. 먼저 소스코드~ #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; } 일단 소스코드를 보게되면 딱봐도 오버플로우 냄새가 난다. 일단 key를 덮어주면 될거같다. 딱봐도 overflowme다음에 ret 다음key가 존재한다. 그냥 깔끔하게..
Pwnable.kr pwnable_collision Write up 일단 이것도 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 pwnable_fd Write up Pwnable.kr 랭킹 이름올리기 프로젝트에 첫단계이다. 일단 먼저 소스코드 부터~ #include #include #include char buf[32]; int main(int argc, char* argv[], char* envp[]){ if(argc