Wargame

이번에 풀이할 문제는 HackCTF의 "내 버퍼가 흘러넘친다!!!"다. 역시 간단히 풀이해 보겠다. 문제를 실행해보면 Name, input을 입력받는 것을 볼 수 있다. 별다른 점은 보이지 않아서 ida를 통해 문제를 열어봤다. Name은 read 함수를 통해 입력 값을 50byte만큼 name 저장, input은 취약한 gets 함수를 통해 입력 값을 20byte 크기([sp+0h][bp-14h]이므로 0x14, 즉 20이다.)의 char형 배열 변수 s에 저장한다. 일단 보기만 해도 gets 함수를 통해 buffer overflow가 일어나는 것을 볼 수 있다. name 변수의 경우 main 함수에 선언돼 있지 않길래 클릭해서 name 변수가 선언된 위치로 가봤다. bss 영역에 선언돼 있는 것을 볼..
이번에 풀이할 문제는 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]는 사용자의 입력을 출력해주는 것 같다. 자세한 동작을 알아..
· Wargame/FTZ
FTZ 로컬 환경을 구축하고 putty를 사용해서 접속을 시도했지만 잘 되지 않았다. 여러가지를 시도해보다가 vm network 설정을 nat에서 bridge로 바꾸니 잘 접속이 됐다. 참고로 한글이 깨지는 경우는 putty -> category -> Translation -> remote character set을 UTF-8로 바꿔주면 된다. Write Up은 하나하나 따라가며 적기보다는 해당 level의 목적, 배우는 것에 초점을 둬서 정리하겠다. -trainer1- 위는 리눅스를 사용하거나 telnet으로 리눅스 서버로 접속을하면 볼 수 있는 프롬프트다. 프롬프트의 맨 앞 trainer1 부분은 접속 ID, 두 번째 부인 ftz는 서버, 마지막 trainer1은 현재 위치를 뜻한다. 이 프롬프트라는..
dyp4r
'Wargame' 카테고리의 글 목록 (7 Page)