본문 바로가기

WARGAME/smch ctf

(7)
SMCH CTF - BOF_ret 이번 문제는 BOF_ret라는 문제당 바이너리를 다운로드하여 실행시켜 보면, 다음과 같이 "By the way, what is your name?"이라는 문자열과 함께 입력을 주게 된다 입력을 한 줄 주면, 요럿게 "No flag... So sad (T.T)"라는 문자열이 뜨면서 프로그램이 종료된다. IDA로 메인 함수를 분석해보자. 메인 함수의 구조는 무척이나 간단했당 우리가 처음 입력 전에 보았던 문자열 3개를 출력한 뒤 greeting이라는 함수를 호출한다. greeting 함수의 구조를 봐 보면, read함수로 buf에다가 입력받은 문자열을 출력해주고 no_flag라는 함수를 호출한다. 이름에서부터 flag를 안 주게 생긴 함수지만 한번 분석을 해보면, 역시낰,, ㅋㅋㅋ 당연히 flag를 주지 않..
SMCH CTF - Calc 문제는 다음과 같다. 이번에도 바이너리 대신 소스 코드를 다운 받도록 되어 있당 코드를 다운 받아 보면, calc.c라는 이름의 C언어 소스 코드 파일을 받을 수 있다. calc.c 소스코드의 내용은 다음과 같당 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 #include #include #include #in..
SMCH CTF - Rock Paper scissors(EZ) 이번 문제는 바이너리가 아닌 무슨 소스코드를 다운받는거 같다. 한번 코드를 다운 받아 보면, 요런 C언어 소스코드가 다운 받아짐을 확인 할 수 있다. C 소스코드는 다음과 같이 생겼당 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 #include #include #include #include #include #include void get_flag(){ system("cat flag"..
SMCH CTF - BOF4 이번에는 BOF4번 문제당 바로 실행시켜 보자 문자열을 입력받는닷 이번에도 아무거나 입력해보장 입력을 주었더니 내가 입력 넣은 문자열과 "No flag... So sad (T.T)"라는 문자열이 출력된다. 바로 IDA로 분석 ㄱㄱ 해보자 main함수의 구조는 다음과 같다 buf를 0x4C만큼 할당하고 memset함수로 버퍼를 초기화 한 다음 v4 함수 포인터 변수에다가 no_flag 의 함수 주소를 넣고, 처음 실행했을 때 봤던 문자열들을 출력한 다음 read함수로 입력을 받는다. 그 다음 if 문을 거친 다음 내가 입력한 문자열을 출력 후 함수 포인터 v4를 통해 no_flag 함수를 호출하고 있다. 솔직히 v5에다가 argc의 주소 값 넣는 거랑 if 문에서 buf [ len-1 ] == 10 조건이..
SHCH CTF - BOF3 BOF3번 문제당 바이너리를 다운 받아 실행 시켜보자 이번 문제도 문자열을 입력 받는당 그냥 아무 문자나 넣어보자 이번에도 지난번과 비슷하게 "Your IQ is .... " 머시기 하며 출력이 된당 그럼 이번에도 IDA로 분석을 해보자! 이번에도 거의 비슷하게 v4변수만 덮어주면 된당 이전과 마찬가지로 buf가 ebp-0x50( 80 ) 만큼 할당이 되어있고 v4변수는 ebp-0x10( 16 )위치에 할당되어 있다. 즉 0x50 - 0x10 64개 만큼 buf를 채우고 저 if 문에 참이 되게 값을 넣어주면 된당 그러나 이전 문제와 마찬가지로 int형 4 byte씩 넣어주어야 하기 때문에 16진수로 변환해 리틀 엔디안 방식으로 넣어주면 된다. 저 11332302 를 16진수로 변환해 주면 "0xACEA..
SMCH CTF - BOF2 (EZ) BOF 2번 문제당 바이너리를 함 받아서 실행시켜 보장 1번과 비슷하게 입력을 받는당 입력으로 A를 여러개 넣어보자 흠 입력을 받아 보니 "Hi aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! Your IQ is 0x00000000!" 라는 문자열이 출력되는 것을 보아 내가 입력 받은 값을 그대로 출력해 주는 같다. 그럼 이쯤에서 IDA로 분석을 해보자. 이전 문제랑 상당히 비슷한 거 같다. 버퍼를 ebp에서 0x54(84) 만큼 esp를 빼 할당하고 그중에서 문자열을 입력받는 부분은 총 64바이트임을 알 수 있다. 그리고 if에서 v4와 4277061을 비교 해서 같으면 flag를 얻을 수 있음을 확인 할 수 있는데, 우리가 입력을 줄..
SMCH CTF - BOF1 (EZ) 우선 문제를 보면 왠지 제목이랑 설명부터 BOF 문제인거 같다 바이너리를 받고 file 명령어로 바이너리의 정보를 봐 보장 이 바이너리는 32bit ELF 형식의 바이너리임을 알 수 있다. 자, 그럼 이제 리눅스 환경에서 실행되는 바이너리임을 확인했으니깐 직접 실행을 시켜 보자 흠 입력을 받아보니 이상한 문자랑 함께 "Your IQ is 0x00000000!"이라는 문자열이 출력되는 것을 볼 수 있다 그럼 이제 본격적으로 IDA로 분석을 해보자 IDA hex ray로 main 함수를 까 보았다. 코드를 분석해보자면 printf와 puts함수로 문자열 3개를 출력하는 것을 확인할 수 있다 그다음 read 함수로 buf에 최대 0x44개(68개) 만큼 입력을 받을 수 있는 것을 확인할 있고, 다음으로 v4변..