HackCTF HackCTF BOF_PIE Write-Up PIE(Position Independent Executable)이란 Memory Mitigation 기법 중 하나로 용어를 직역하자면 "위치에 의존하지 않고 실행 가능한 것" 으로 표현할 수 있습니다. 여기서 '위치에 의존하지 않음' 이란 쉽게 설명하자면 gdb를 통해 동적 debugging을 진행할 때 info functions 명령을 통해 사용되는 함수들의 시작 주소를 확인할 수 있습니... HackCTFHackCTF HackCTF RTL_WORLD Write-Up 위에서 서술한 이유로 해당 문제는 nc를 통해 직접 접속하여 문제의 분석을 시도하였습니다. 문제에 접속하면 RPG 게임과 같이 여러 메뉴가 출력되었고, 해당 메뉴를 통해 어떠한 동작을 수행할 수 있었습니다. NPC가 설명해준 내용을 해석하면 3, 4번 메뉴를 통해 'System Ammor'와 'Shell Sword'를 획득하여 5번 메뉴를 통해 'Binary Boss'를 처치해야 하는 것으로... HackCTFHackCTF HackCTF poet Write-Up 문제를 실행하면 특정 조건을 만족할 때까지 두 번의 입력을 반복해서 받습니다. 첫 번째의 경우 '시의 내용' 항목으로 입력받으며 두 번째의 경우 '시의 작가' 항목입니다. 두 개의 항목을 입력받은 후 점수가 만족되지 않았다는 출력과 함께 다시 입력 상태로 들어가는 것을 확인할 수 있었습니다. 시의 내용과 저자를 번갈아가며 입력값을 바꿔본 결과 두 번째 입력에서 긴 문자열을 입력할 경우 점수에... HackCTFHackCTF HackCTF random key Write-Up 프로그램을 실행하면 "Input Key" 항목을 입력받고 값을 임의의 값을 입력하였을 때 "Nah..." 라는 내용이 출력된 후 실행이 종료되었습니다. 보통 해당 문구가 입력값과 대상값이 일치하지 않을 때 출력되는 것을 감안하면 random 값을 맞춰야 하는 것으로 예상되었습니다. Overflow가 발생하는지에 대해서도 확인해보았지만 특별한 동작은 확인할 수 없었습니다. Ghidra를 이용한... HackCTFHackCTF HackCTF RTL_CORE Write-Up 프로그램을 실행하면 Passcode의 입력을 대기하며 임의의 값을 입력할 경우 실패라고 뜨는 것을 확인할 수 있었습니다. 우선은 요구되는 passcode를 알 필요가 있다고 생각하여 ghidra를 이용한 정적 분석을 같이 진행하였습니다. 먼저 ghidra를 사용하여 main문 분석을 진행하였습니다. gets() 함수를 사용하여 local_24에 입력을 받은 후 check_passcode 함수... HackCTFHackCTF HackCTF Beginner Heap Write-Up 일반적으로 gdb, ghidra를 사용하여 분석할 때 프로그램 내에 존재하는 함수들을 확인할 수 있는데 이를 구분하기 어렵게 만들어 놓은 것이 차이점입니다. 이는 file 명령을 사용하여 확인할 수 있습니다. 보통 이 경우 GDB를 사용하여 진행하는데 매우 큰 어려움이 있는데 ghidra의 경우 각각의 함수들은 구분할 수 있었습니다. 총 6개 정도의 Unknown 함수가 존재하였고 함수의 동... HackCTFHackCTF HackCTF Look at me Write-Up 다운로드 받은 문제 파일을 실행하였을 때 특정 문자열을 출력 후 입력 대기상태로 진입하였습니다. 이후 문자열의 길이를 임의로 조절해가며 테스트하였을 경우 Segmentation fault가 발생하는 것을 확인할 수 있었습니다. 우선 overflow가 발생하는 것을 확인하였으므로 gdb와 ghidra를 사용하여 분석을 시도하였으나 매우 많은 함수들이 반겨주었습니다. 풀이 과정 중 나중에 알게 ... HackCTFHackCTF HackCTF gift Write-Up 프로그램을 실행할 경우 두 개의 주소를 출력해주며 총 두 번의 입력을 받습니다. 이 중 첫 번째 입력의 경우 다시금 출력해주고 두 번째 입력은 별도의 출력 없이 실행이 종료됩니다. ghidra를 사용하여 decompile 결과를 확인한 결과 출력되는 주소는 각각 binsh, system() 주소였습니다. 또한 첫 번째 입력의 경우 입력 크기에 제한이 존재하여 ret 주소의 변조가 불가능하지만... HackCTFHackCTF
HackCTF BOF_PIE Write-Up PIE(Position Independent Executable)이란 Memory Mitigation 기법 중 하나로 용어를 직역하자면 "위치에 의존하지 않고 실행 가능한 것" 으로 표현할 수 있습니다. 여기서 '위치에 의존하지 않음' 이란 쉽게 설명하자면 gdb를 통해 동적 debugging을 진행할 때 info functions 명령을 통해 사용되는 함수들의 시작 주소를 확인할 수 있습니... HackCTFHackCTF HackCTF RTL_WORLD Write-Up 위에서 서술한 이유로 해당 문제는 nc를 통해 직접 접속하여 문제의 분석을 시도하였습니다. 문제에 접속하면 RPG 게임과 같이 여러 메뉴가 출력되었고, 해당 메뉴를 통해 어떠한 동작을 수행할 수 있었습니다. NPC가 설명해준 내용을 해석하면 3, 4번 메뉴를 통해 'System Ammor'와 'Shell Sword'를 획득하여 5번 메뉴를 통해 'Binary Boss'를 처치해야 하는 것으로... HackCTFHackCTF HackCTF poet Write-Up 문제를 실행하면 특정 조건을 만족할 때까지 두 번의 입력을 반복해서 받습니다. 첫 번째의 경우 '시의 내용' 항목으로 입력받으며 두 번째의 경우 '시의 작가' 항목입니다. 두 개의 항목을 입력받은 후 점수가 만족되지 않았다는 출력과 함께 다시 입력 상태로 들어가는 것을 확인할 수 있었습니다. 시의 내용과 저자를 번갈아가며 입력값을 바꿔본 결과 두 번째 입력에서 긴 문자열을 입력할 경우 점수에... HackCTFHackCTF HackCTF random key Write-Up 프로그램을 실행하면 "Input Key" 항목을 입력받고 값을 임의의 값을 입력하였을 때 "Nah..." 라는 내용이 출력된 후 실행이 종료되었습니다. 보통 해당 문구가 입력값과 대상값이 일치하지 않을 때 출력되는 것을 감안하면 random 값을 맞춰야 하는 것으로 예상되었습니다. Overflow가 발생하는지에 대해서도 확인해보았지만 특별한 동작은 확인할 수 없었습니다. Ghidra를 이용한... HackCTFHackCTF HackCTF RTL_CORE Write-Up 프로그램을 실행하면 Passcode의 입력을 대기하며 임의의 값을 입력할 경우 실패라고 뜨는 것을 확인할 수 있었습니다. 우선은 요구되는 passcode를 알 필요가 있다고 생각하여 ghidra를 이용한 정적 분석을 같이 진행하였습니다. 먼저 ghidra를 사용하여 main문 분석을 진행하였습니다. gets() 함수를 사용하여 local_24에 입력을 받은 후 check_passcode 함수... HackCTFHackCTF HackCTF Beginner Heap Write-Up 일반적으로 gdb, ghidra를 사용하여 분석할 때 프로그램 내에 존재하는 함수들을 확인할 수 있는데 이를 구분하기 어렵게 만들어 놓은 것이 차이점입니다. 이는 file 명령을 사용하여 확인할 수 있습니다. 보통 이 경우 GDB를 사용하여 진행하는데 매우 큰 어려움이 있는데 ghidra의 경우 각각의 함수들은 구분할 수 있었습니다. 총 6개 정도의 Unknown 함수가 존재하였고 함수의 동... HackCTFHackCTF HackCTF Look at me Write-Up 다운로드 받은 문제 파일을 실행하였을 때 특정 문자열을 출력 후 입력 대기상태로 진입하였습니다. 이후 문자열의 길이를 임의로 조절해가며 테스트하였을 경우 Segmentation fault가 발생하는 것을 확인할 수 있었습니다. 우선 overflow가 발생하는 것을 확인하였으므로 gdb와 ghidra를 사용하여 분석을 시도하였으나 매우 많은 함수들이 반겨주었습니다. 풀이 과정 중 나중에 알게 ... HackCTFHackCTF HackCTF gift Write-Up 프로그램을 실행할 경우 두 개의 주소를 출력해주며 총 두 번의 입력을 받습니다. 이 중 첫 번째 입력의 경우 다시금 출력해주고 두 번째 입력은 별도의 출력 없이 실행이 종료됩니다. ghidra를 사용하여 decompile 결과를 확인한 결과 출력되는 주소는 각각 binsh, system() 주소였습니다. 또한 첫 번째 입력의 경우 입력 크기에 제한이 존재하여 ret 주소의 변조가 불가능하지만... HackCTFHackCTF