pwnable.kr

이번에 풀이할 문제는 pwnable.kr의 random 문제다. 문제 문구는 "아빠가 프로그래밍에서 랜덤 값을 어떻게 사용하는지 가르쳐 주셨다"다. 접속하니 flag, random, random.c가 주어져 있어서 먼저 cat random.c 명령어로 소스 코드를 확인해봤다. #include int main(){ unsigned int random; random = rand(); // 랜덤 값(?) 생성 unsigned int key=0; scanf("%d", &key); // key 입력 if( (key ^ random) == 0xdeadbeef ){ // key xor random한 값이 0xdeadbeef와 같다면 flag 획득 printf("Good!\n"); system("/bin/cat fla..
마지막 12주차 과제의 마지막 문제는 pwnable.kr의 leg를 선정했다. 이유는 최근 도제 교육을 받게된 회사에서 arm 아키텍처 리버싱을 주로 배우기 때문에, arm 관련 문제인 leg를 포스팅하고 싶었다. 일단 문제 파일(c코드 하나, 어셈블리 코드 하나)이 주어진다. 이 문제 파일을 분석 후 아래 주소로 접속해 flag를 따내는 것이다. #include #include int key1(){ asm("mov r3, pc\n"); // pc 레지스터의 값을 반환 } int key2(){ asm( "push{r6}\n" "addr6, pc, $1\n" "bxr6\n" ".code 16\n" "movr3, pc\n" // r3에 pc 레지스터의 값을 넣음 "addr3, $0x4\n" // r3에 0x..
이번 문제는 bof 문제와 다르게 바이너리 내에서 flag을 찾는 방식이다. pwnable.kr은 문제 하나하나가 새로운 방식이라 재밌는 것 같다. 일단 문제의 문구는 "아빠가 압축된(포장된) 선물을 줬어, 열어 봤어!"다. 리버싱 문제들을 어느정도 풀어봐서 그런지 packed라는 단어를 봤을 때 패킹(실행 압축) 돼 있지 않을까 생각이 들었다. 일단 ida를 통해 확인해봤지만 예상대로 패킹이 돼 있어 제대로 분석이 불가능한 상황 같다. 문자열 탭을 확인해보면 upx 관련 문자열이 보이는 것을 알 수 있다. 따라서 이 프로그램은 upx로 패킹됐다 가정하고 깔려 있던 upx 프로그램으로 언패킹 해봤다. 성공적으로 언패킹된 것을 볼 수 있다. 다시 ida로 까본다면 제대로 코드가 보이는 것을 볼 수 있다. ..
이번에 풀이할 문제는 pwnable.kr의 bof 문제다. 이번 문제는 앞선 문제들과 다르게 nc 접속이다. 일단 주어진 링크에서 bof 파일과 bof.c 파일을 다운받고 bof 파일을 실행해봤다. 이름처럼 입력을 통해 bof 시켜서 문제를 푸는 것이 목적인 것 같다. #include #include #include void func(int key){ char overflowme[32]; // 32 크기의 char형 배열 선언 printf("overflow me : "); gets(overflowme);// bof가 일어나는 함수 gets로 입력을 받음 if(key == 0xcafebabe){ // 매개변수의 값이 0xcafebabe라면 쉘 획득 system("/bin/sh"); } else{ print..
이번에 풀이할 문제는 pwnable.kr의 collision 문제다. 이 문제 역시 fd와 마찬가지로 putty에서 풀이했다. 서버에 접속한 후 ls 명령어를 사용해보니 col, col.c, flag가 존재하는 것을 알 수 있다. 이 문제 역시 col 프로그램을 풀면 flag를 읽어 출력해줄 것 같다. 일단 주어진 프로그램인 col을 실행해봤다. 여러 번 실행해봤을 때 이 프로그램은 인자가 필요하고, 이 인자는 20byte 크기의 passcode로 이 passcode가 일치해야지 flag을 읽어준다는 것을 추측할 수 있다. #include #include unsigned long hashcode = 0x21DD09EC; unsigned long check_password(const char* p){ in..
이번에 풀이할 문제는 pwnable.kr의 fd 문제다. 다른 사이트의 문제들과 달리 문제 파일 없이 ssh 서버 주소만 주어져 있다. 주어진 주소로 putty를 통해 접속했다. 접속하고 ls 명령어를 쳐보니 fd(문제 파일), fd.c(c언어 소스 코드), flag가 주어져 있다. 일단 문제 파일을 실행해 봤다. 인자 없이 실행하니 인자를 달라는 문구가 나와서 더미 값으로 1234를 주고 실행해 봤다. 1234를 주고 실행하니 learn about Linux file IO(리눅스 파일 io에 대해 공부해라)라는 문구가 나온다. 일단 혹시 모르니 flag를 cat 명령어로 한 번 확인해봤다. 당연하게도 flag를 볼 수 없었기 때문에 문제를 풀기 위해 fd.c를 cat 명령어로 확인해봤다. #includ..
dyp4r
'pwnable.kr' 태그의 글 목록