hackctf

이번에 풀이할 문제는 HackCTF의 BOF_PIE 문제다. 문제 명만 봤을 때는 pie 보호 기법이 걸린 상태로 bof 공격을 해야 할 것 같다. 마찬가지로 bof_pie라는 이름의 elf 파일이 주어져 있으니, 동작 확인 -> 보호 기법 확인 -> 코드 확인 순서로 풀이를 진행하겠다. 문제 파일을 실행하면 "Hello, Do you know j0n9hyun?"과 "j0n9hyun is 0x56555909"라는 알 수 없는 16진수 값이 출력된 후 입력을 받는다. 입력 값으로 1을 주니 "Nah ..."가 출력됐다. 보호 기법을 확인해보니 NX bit와 문제 이름처럼 PIE 보호 기법이 걸려 있는 것을 볼 수 있다. main 함수는 welcome 함수를 호출한 뒤 "Nah..."를 출력해준 뒤 종료된다..
이번에 풀이할 문제는 HackCTF의 Offset 문제다. 개인적으로 이번 문제는 푸는 방법이 좀 참신하게 느껴졌다. 파일은 offset이라는 elf 파일이 주어져 있다. 실행을 해 동작을 먼저 확인한 후, 보호 기법, 코드를 확인하겠다. 문제 파일을 실행하면 "Which function would you like to call?"이라는 문구가 출력된 후 입력을 받는데, 1을 입력하니 프로그램이 그대로 종료됐다. 보호 기법은 canary 빼고는 모두 걸려 있는 것을 볼 수 있다. ghidra로 main 코드를 확인해보면 위와 같다. gets 함수가 눈에 띄는데, 이 gets 함수를 통해 오버플로우를 일으킬 수도 있을 것 같다. gets 다음에 호출되는 select_func 함수도 확인해봤다. 입력 값이 ..
이번에 풀이할 문제는 HackCTF의 Simple_Overflow_ver_2 문제다. 문제 이름을 봤을 때 bof 관련 문제로 추정된다. 파일은 Simple_overflow_ver_2라는 이름의 elf 파일이 주어져 있다. 일단 어떤 동작을 하는지 실행해서 확인해보겠다. 실행을 하면 "Data : " 문구가 출력되면서 입력을 받는데, 입력을 하면 입력 값이 저장된 주소로 추정되는 16진수 값과 입력 값을 같이 출력해준다. 그 후 Again (y/n) 문구가 출력되며 입력을 받는데, y를 입력하면 이 과정을 다시 수행할 수 있고, n을 입력하면 프로그램을 종료한다. 동작은 확인했으니 보호 기법 및 코드를 확인해보겠다. RELRO 빼고는 보호 기법이 걸려지 않은 것을 볼 수 있다. ghidra를 통해 메인 ..
이번에 풀이할 문제는 미루고 미뤘던 Format String Bug 취약점 관련 문제다. 예전부터 계속 fsb 취약점을 공부하려 시도했지만 뇌정지가 오거나 이해가 안되는 부분이 많아, 여러 번 실패했었다. 맘 잡고 몇 시간 정도를 fsb 취약점만 공부한 끝에 결국 fsb 취약점을 이해해버렸다. (취약점 관련 포스팅도 조만간 할 계획이다.) format string bug 취약점 공부에 참고한 사이트 d4m0n.tistory.com/28 dreamhack.io/learn/3#t194 (dreamhack은 전설이다..) 따라서 이번에는 fsb 취약점을 몰라 풀지 못한 HackCTF의 Basic_FSB 문제를 풀이해보겠다. 문제 파일은 elf 파일 basic_fsb가 주어져 있다. 먼저 보호기법을 확인해보겠다..
이번에 풀이할 문제는 HackCTF의 x64 Simple_size_BOF다. 문제 이름으로도 알 수 있듯이 x64 환경에서의 Buffet oveflow 공격을 수행해야한다. 이번에는 ida가 아닌 ghidra로 분석을 해봤다. 디컴파일 창을 보면 알 수 있듯이 27952 크기의 char형 배열을 생성하고 이 배열의 주소를 출력한 후 bof 공격에 취약한 gets 함수를 통해 입력을 받는다. 현재 생각할 수 있는 공격은 두 가지다. 1. gets 함수로 bof를 일으켜 쉘을 따게 해주는 함수의 주소로 RET 변조. 2. gets 함수를 통해 쉘 코드 삽입 + bof를 일으켜 쉘 코드의 주소로 RET 변조 일단 공격 코드를 짜기전 프로그램을 실행해보고 gdb, checksec을 통해 좀더 정밀하게 분석을 해..
이번에 풀이할 문제는 HackCTF의 x64 Buffer Overflow다. 지금까지는 32bit 문제에서 exploit을 진행했지만, 문제 명으로도 알 수 있듯이 이번 문제는 64bit 문제에서 exploit을 진행한다. file 명령어로 문제 파일의 정보를 확인해보면 64bit라는 것을 알 수 있다. 실행해보면 첫 줄에 입력을 받는데, 이 입력한 값을 바탕으로 두 번째 줄에서 Hello 으로 문구를 출력해준다. 일단 ida로 문제 파일을 열어봤다. char형 변수(배열로 추정) s, int형 변수 v5를 선언하고 scanf 변수를 통해 문자열을 입력 받은 후, v5는 s의 문자열 길이를 담고, printf 함수를 사용해 Hello 형식으로 출력해준다. bof를 일으킬 수 있는 취약한 함수인 scanf..
이번에 풀이할 문제는 Basic_BOF #2다. Basic_BOF #1 풀이에서 말했듯이, 이번 write-up부터는 핵심만 간단히 풀이하겠다. 리눅스 환경에서 실행해보니, 어떤 입력 값을 넣어도 "하아아아아아아아아앙"이 출력되는 것을 볼 수 있다. ida로 main 함수를 c 코드로 보니 엄청난 양의 코드가 존재하는 것을 볼 수 있다.(ida 문제인가..?) 위 코드에서 한 가지를 알 수 있다. fgets 함수로 133byte만큼 char 형 배열 s에 문자열을 넣어준다. basic_bof #1 문제도 배열 변수의 크기보다 큰 문자열을 fgets 함수로 넣어줘서 취약점이 발생했기 때문에 이 문제도 역시 이 부분이 취약점을 발생시킬 수도 있다. 일단 저 코드만으로는 쉘을 얻을 수 있는 로직 등이 보이지 ..
이번에 풀이할 Basic_BOF #1은 많은 시행착오를 겪으며, 마침내 혼자 힘으로 풀어낸 첫 pwnable 문제다. 문제 화면에서 다운로드 버튼을 눌러 파일을 받으니, 위처럼 아무 확장자도 없어서 처음에는 좀 황당했었다. ELF 파일은 원래 그런가 싶어서 ubuntu를 켜서 확인해 봤다. 참고로 64bit 리눅스로 실행할 경우 처음에는 해당 파일을 찾지 못했다는 오류가 뜨는데, 아래 링크를 참고해 라이브러리들을 설치한다면 해결할 수 있다. 문제 파일이 32bit라 64bit 환경에서는 호환되지 않아 뜨는 오류다. 64bit 리눅스에서 32bit 파일 실행하기 파일을 실행시키니 먼저 입력을 받고 [buf]와 [check]를 출력해준다. [buf]는 사용자의 입력을 출력해주는 것 같다. 자세한 동작을 알아..
dyp4r
'hackctf' 태그의 글 목록 (2 Page)