WARGAME/hack ctf (14) 썸네일형 리스트형 Simple_Overflow_ver_2 문제는 다음과 같당 바이너리를 함 다운 받아 실행 시켜 보면 "Data : " 이후로 입력을 받을 수 있고 만약 'AAAA"로 입력을 주면 "0xfffd2240: A A A A" 이렇게 출력이 된다. 그리고 다시 입력을 받을꺼면 'y' 프로그램을 종료 할꺼면 'n'을 누르라고 나온다. 만약 'y'를 누르면 다시 한 번 입력을 받을 수 있고 'n'을 누르면 프로그램이 종료된다. 바이너리를 ida로 보면, 프로그램을 실행했을때 봤듯이 입력을 받고 버퍼 주소와 입력 받은 문자열이 16자당 한줄씩 출력되고, 'y' 혹은 'Y'를 입력하면 프로그램이 계속 돌아가는 것을 확인 할 수 있다. 또한 checksec로 보면 32bit 바이너리에 따른 메모리 보호 기법이 안걸려 있음을 알 수 있다. 즉 처음 입력을 아무거.. x64 Simple_size_BOF 이번 문제도 왠지 지난번 문제랑 비슷한 거 같다. 다운로드하고 실행시켜 보면, "삐빅 - 자살방지 문제입니다."와 버퍼 주소를 출력하고 입력을 한 줄 받은 다음 그냥 종료되는 거 같다. ida로 까 보면, 그냥 간단하당 puts로 "삐빅 - 자살방지 문제입니다." 출력해주고 buf 주소 출력해준다. 그리고 입력을 한 줄 받는 구조이다. 해당 바이너리에서 main 함수 이외에 따른 함수는 없으므로 저 버퍼 주소에 대가 쉘 코드 넣어주고 ret 주소를 쉘 코드를 넣은 버퍼 주소로 변조해 주면 될 거 같다. 아 참고로, NX 기법 안 걸려 있어서 쉘 코드 넣어도 되고, 64bit 바이너리 이므로 RET, SFP 8 bit로 해 주어야 한다. 익스 코드는 다음과 같다. 1 2 3 4 5 6 7 8 9 10 11.. x64 Buffer Overflow 이번 문제 당 바이너리를 다운 받아 실행해 보면 한 줄 입력을 받는 것을 확인 할 수 있고 입력을 받은 뒤 "Hello ( 입력받은 문자열 )" 이 출력됨을 확인할 수 있다. 근데 왠지 제목부터 64bit 바이너리 인 게 느껴지는데 checksec로 확인해 보면 64bit 바이너리임을 알 수 있다. ida 로 main 함수를 보면 scanf로 입력을 받고 v5 변수에다가 해당 문자열의 길이를 넣은 다음 printf로 처음 실행했을시의 문자열을 출력하는 것을 볼 수 있다. 해당 바이러리에는 main 함수 말고 다른 함수가 하나 더 있는데 바로 callMeMaybe 라는 함수가 있음을 확인할 수 있다. 해당 함수를 보면 쉘을 얻을 수 있는 함수임을 알 수 있다. 익스는 그냥 64bit인 것을 감안하면서 쉽게.. 내 버퍼가 흘러넘친다!!! 우선 바이너리를 다운로드하고 gdb로 까 보면, printf로 한번 출력해주고 read로 한번 입력 받은 다음 printf 로 또다시 한번 출력해주고 마지막으로 gets 함수로 입력을 받는 것을 확인할 수 있다. 해당 바이너리를 ida hex-ray로 까 보면 다음과 같다. 그냥 쉘 코드를 활용해서 문제를 풀면 될 거 같다. 처음 read 함수가 입력받는 name 변수가 어디 있는지 보니깐 전역 변수 영역에 있음을 확인할 수 있다. 그다음 read 함수로 입력을 받으니깐 처음 name 전역 변수에 쉘 코드를 넣어 두고 gets로 입력을 받을 때 ret 영역을 name 변수 주소로 덮으면 될 거 같다. 익스는 다음과 같이 짰다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1.. Basic_BOF #2 이번에는 Basic_BOF #2라는 문제이다. 바이너리를 다운로드하여 실행시켜 보면, 입력을 한 줄 받을 수 있고, 입력 받은 뒤 " 하아아아아아아아아앙 " 이라는 문자열이 출력됨을 확인 할 수 있다. ida로 바로 main 함수 부터 분석을 해보면, v5 함수 포인터 변수가 sup 라는 함수를 가리키고 있고 fgets로 입력을 받은 다음 v5를 호출 함을 알 수 있다. 해당 바이너리 에서의 함수 목록들을 보면, sup 이랑 shell 이라는 함수가 있음을 확인 할 수 있다. sup 함수는 간단하게 puts 함수를 통해 문자열을 출력 함을 확인 할 수 있다. 아마 바이너리를 실행 시키고 입력 한 후에 나오는 문자열도 프로그램 흐름상 v5 (sup) 함수를 통해서 출력이 되는거 같다. 다음은 shell 함.. Basic_BOF #1 HACK CTF 문제들도 슬슬 라업을 적어 볼까 한다. 우선 Basis_BOF #1라는 문제이다. 요기서 bof_basic이라는 바이너리를 다운로드한 후 실행시켜 보면, 다음과 같이 입력을 한 줄 받음을 확인할 수 있고 "adsfasdf"라는 문자를 입력해보면 자기가 입력한 문자랑 [check] : 16 진수 값 으로 출력됨을 확인 할 수 있다. ida로 분석을 해보면, 0x34 만큼 버퍼가 할당돼 있음을 알 수 있고, 만약 v5라는 변수가 0xDEADBEEF 값이면 system 함수의 "/bin/bash" 가 실행됨을 알 수 있다. 그러나 현재 저 v5는 0xDEADBEEF 가 아니므로 fgets 함수에서의 입력을 통해 v5를 덮으면 될 것이다. 전체 버퍼의 크기가 0x34이고 v5 변수의 위치는 eb.. 이전 1 2 다음