FTZ FTZ Level 8 hint를 확인해 보았다. shadow 파일은 리눅스 사용자들의 암호화된 패스워드를 담고 있는 파일이다. shadow 알고리즘은 해시 함수이기 때문에 일반적인 방법으로는 복호화할 수 없고, 브루트포스(무차별 대입)을 사용해서 복호화해야 한다. 주어진 힌트는 용량이 2700이라는 것이니, find 명령어에 용량 옵션을 붙여서 검색하면 될 것 같다. ls에서 표기되는 파일 및 디렉토리의 용량은 ... FTZsecurityFTZ FTZ Level 16 hint는 다음과 같다. 이번에는 함수가 3개다. main 함수를 보면 call이라는 void형 포인터에 printit 함수의 주소를 넣고, fgets 함수가 실행된 이후에 호출하는 것을 볼 수 있다. 20바이트의 buf에 48바이트만큼의 입력을 허용하고 있기 때문에 버퍼 오버플로우가 발생할 수 있다. shell 함수는 Level 17의 쉘을 부여하는 함수이지만, 어디에서도 호출되고 있지 않... FTZsecurityFTZ FTZ Level 12 hint는 다음과 같다. 문자열을 프로그램 실행 인자에서 가져오던 것이 gets 함수로 바뀐 것을 빼면 Level 11과 별다른 점이 없다. 소스 코드를 다시 컴파일하고 gdb로 뜯어 보았다. <main+0>, <main+1>에서 스택의 기본 프레임을 만들고 <main+3>에서 0x108(264바이트)만큼의 공간을 할당하는 것을 볼 수 있다. Level 11과 배열 길이가 같기 때문에 스택 ... FTZsecurityFTZ FTZ Level 10 hint는 다음과 같다. 공유 메모리란, 다수의 프로세스에서 동시에 접근 가능한 메모리이다. C언어에는 이 공유 메모리를 생성하는 함수로 shmget이 있다. key_t는 공유 메모리를 구별하는 식별 번호이기 때문에 shmget을 이용할 수 있다. 먼저 ipcs 명령어를 통해 시스템에서 사용 중인 공유 메모리 세그먼트를 확인한다. 0x00001d6a라는 key가 있고, 이는 10진수로 변환하... FTZsecurityFTZ FTZ Level 19 그러므로 setreuid 함수까지 포함한 쉘코드를 사용해야 한다. <main+3>에서 스택에 0x28(40바이트)만큼의 공간을 할당하고 있다. <main+19>에서 [ebp-40]이 eax에 들어가고 있으므로 buf가 위치한 지점은 [ebp-40]이다. buf가 20바이트를 차지하므로 dummy는 20바이트라는 것을 알 수 있다. 인터넷에서 검색을 통해 알아낸 정보로는, setreuid 함수... FTZsecurityFTZ FTZ Level 18 해석이 어렵지만, 초반의 변수 선언 부분을 보면 이전까지와는 다르게 check가 string보다 나중에 선언되고 있기 때문에 check를 일반적인 방법으로 변조할 수 없다. 그러나 switch문의 default에서 count를 음수로 만든다면 string보다 앞에 있는 메모리에 접근할 수 있고, 결과적으로 check를 변조할 수 있게 된다. main 함수가 길기 때문에 첫 페이지 먼저 살펴 ... FTZsecurityFTZ FTZ level7 ssh를 통해 level7로 접속한다. hint 파일에서 알려준대로 일단 /bin/level7 을 실행 시켜보자. 아마도 위와 같은 에러 메시지가 나타날 것이다. level7의 경우 문제를 풀기 위해서는 /bin/wrong.txt 파일이 필요한데, 현재 인터넷에 풀려있는 대부분의 FTZ VMware 이미지 파일에는 해당 파일이 존재하지 않는다. 따라서 먼저 /bin/wrong.txt 파일을 ... hackingFTZpwnableFTZ FTZ Level 15 hint는 다음과 같다. 이번에는 check 변수가 포인터로 선언되었다. 포인터가 가지는 값은 특정한 주소가 가리키는 값이기 때문에 0xdeadbeef를 직접 넣으면 0xdeadbeef가 가리키는 값을 찾아가게 된다. 이 문제에서는 포인터에 들어간 주소가 가리키는 값이 0xdeadbeef가 되게 만들어야 하기 때문에 0xdeadbeef가 있는 주소를 넣는 방식으로 공격해야 한다. 포인터처럼 ... FTZsecurityFTZ [FTZ] level4 이번에는 ftz 레벨4 문제를 풀어봅시다. 힌트를 보았더니 '누군가 /etc/xinetd.d/에 백도어를 심어놓았다.!'라고 되어있네요. 참고로 백도어란 말그대로 뒷문같은 의미로 어떤 시스템에서 정상적인 인증절차를 우회하는 것입니다. 한마디로 보안적으로 안 좋다는 뜻입니다. 아무튼 해당 경로를 가봤더니 backdoor란 파일이 있습니다. 그 파일을 확인해봅시다. 이렇게 써져있습니다. fing... pwnableFTZFTZ
FTZ Level 8 hint를 확인해 보았다. shadow 파일은 리눅스 사용자들의 암호화된 패스워드를 담고 있는 파일이다. shadow 알고리즘은 해시 함수이기 때문에 일반적인 방법으로는 복호화할 수 없고, 브루트포스(무차별 대입)을 사용해서 복호화해야 한다. 주어진 힌트는 용량이 2700이라는 것이니, find 명령어에 용량 옵션을 붙여서 검색하면 될 것 같다. ls에서 표기되는 파일 및 디렉토리의 용량은 ... FTZsecurityFTZ FTZ Level 16 hint는 다음과 같다. 이번에는 함수가 3개다. main 함수를 보면 call이라는 void형 포인터에 printit 함수의 주소를 넣고, fgets 함수가 실행된 이후에 호출하는 것을 볼 수 있다. 20바이트의 buf에 48바이트만큼의 입력을 허용하고 있기 때문에 버퍼 오버플로우가 발생할 수 있다. shell 함수는 Level 17의 쉘을 부여하는 함수이지만, 어디에서도 호출되고 있지 않... FTZsecurityFTZ FTZ Level 12 hint는 다음과 같다. 문자열을 프로그램 실행 인자에서 가져오던 것이 gets 함수로 바뀐 것을 빼면 Level 11과 별다른 점이 없다. 소스 코드를 다시 컴파일하고 gdb로 뜯어 보았다. <main+0>, <main+1>에서 스택의 기본 프레임을 만들고 <main+3>에서 0x108(264바이트)만큼의 공간을 할당하는 것을 볼 수 있다. Level 11과 배열 길이가 같기 때문에 스택 ... FTZsecurityFTZ FTZ Level 10 hint는 다음과 같다. 공유 메모리란, 다수의 프로세스에서 동시에 접근 가능한 메모리이다. C언어에는 이 공유 메모리를 생성하는 함수로 shmget이 있다. key_t는 공유 메모리를 구별하는 식별 번호이기 때문에 shmget을 이용할 수 있다. 먼저 ipcs 명령어를 통해 시스템에서 사용 중인 공유 메모리 세그먼트를 확인한다. 0x00001d6a라는 key가 있고, 이는 10진수로 변환하... FTZsecurityFTZ FTZ Level 19 그러므로 setreuid 함수까지 포함한 쉘코드를 사용해야 한다. <main+3>에서 스택에 0x28(40바이트)만큼의 공간을 할당하고 있다. <main+19>에서 [ebp-40]이 eax에 들어가고 있으므로 buf가 위치한 지점은 [ebp-40]이다. buf가 20바이트를 차지하므로 dummy는 20바이트라는 것을 알 수 있다. 인터넷에서 검색을 통해 알아낸 정보로는, setreuid 함수... FTZsecurityFTZ FTZ Level 18 해석이 어렵지만, 초반의 변수 선언 부분을 보면 이전까지와는 다르게 check가 string보다 나중에 선언되고 있기 때문에 check를 일반적인 방법으로 변조할 수 없다. 그러나 switch문의 default에서 count를 음수로 만든다면 string보다 앞에 있는 메모리에 접근할 수 있고, 결과적으로 check를 변조할 수 있게 된다. main 함수가 길기 때문에 첫 페이지 먼저 살펴 ... FTZsecurityFTZ FTZ level7 ssh를 통해 level7로 접속한다. hint 파일에서 알려준대로 일단 /bin/level7 을 실행 시켜보자. 아마도 위와 같은 에러 메시지가 나타날 것이다. level7의 경우 문제를 풀기 위해서는 /bin/wrong.txt 파일이 필요한데, 현재 인터넷에 풀려있는 대부분의 FTZ VMware 이미지 파일에는 해당 파일이 존재하지 않는다. 따라서 먼저 /bin/wrong.txt 파일을 ... hackingFTZpwnableFTZ FTZ Level 15 hint는 다음과 같다. 이번에는 check 변수가 포인터로 선언되었다. 포인터가 가지는 값은 특정한 주소가 가리키는 값이기 때문에 0xdeadbeef를 직접 넣으면 0xdeadbeef가 가리키는 값을 찾아가게 된다. 이 문제에서는 포인터에 들어간 주소가 가리키는 값이 0xdeadbeef가 되게 만들어야 하기 때문에 0xdeadbeef가 있는 주소를 넣는 방식으로 공격해야 한다. 포인터처럼 ... FTZsecurityFTZ [FTZ] level4 이번에는 ftz 레벨4 문제를 풀어봅시다. 힌트를 보았더니 '누군가 /etc/xinetd.d/에 백도어를 심어놓았다.!'라고 되어있네요. 참고로 백도어란 말그대로 뒷문같은 의미로 어떤 시스템에서 정상적인 인증절차를 우회하는 것입니다. 한마디로 보안적으로 안 좋다는 뜻입니다. 아무튼 해당 경로를 가봤더니 backdoor란 파일이 있습니다. 그 파일을 확인해봅시다. 이렇게 써져있습니다. fing... pwnableFTZFTZ