본문으로 바로가기

해커스쿨 FTZ level7

category Wargame/FTZ 2017. 8. 19. 09:35

level7 --- come together

 

우선 level7 디렉토리의 hint 파일을 보자.

 

 

힌트 파일을 자세히 생각해보자. 1번에 대한 정보는 잘 모르겠다. 패스워드가 가까운곳에??? 2, 3, 4번을 합쳐서 생각하면 혹시 암호학에 관한것이 아닐까? 엄청 어려운 암호학이 아닌 진수만 바꾼 암호가 주어질 가능성이 크다는 것이다. 그렇다면 16진수의 ASCII 코드 까지 생각할 수 있다.

 

암호화 관련 용어만 간단히 정리해보자.

 

암호문 : 알아볼 수 없는 형태로 만들어진 이상한 글자.

평문 : 우리가 알아볼 수 있는 글자.

함호화 알고리즘 : 평문 -> 암호문, 암호문 -> 평문으로 바꾸어주는 함수나 라이브러리를 말한다.

 

위와 같은 형태로 암호화와 복호화가 이루어 진다.

 

암호화에 대해 간단히 알아보았으니 문제 파악을 제대로 해보자.

 

처음 힌트 파일을 보면 공격할 대상 파일을 알려주었지만 공부하는 단계이기 때문에 파일명과 권한으로 공격할 대상 파일을 찾아보자.

 

 

공격할 대상을 찾았다면 파일을 실행해보자. 파일을 실행하면 아래와 같이 password를 묻는데 아무 패스워드나 넣어보자.

 

 

패스워드는 가까운 곳에... 이라고 나오고 그 아래 줄에 이상하게 무엇인가가 나와있다. 눈치가 빠른 사람은 감이 오겠지만 감이 오지 않을 수 있어서 패스워드를 다르게 해서 넣어보자.

 

 

이렇게 하면 패스워드는 가까운 곳에... "--_--_- --____- ---_-__ --__-_-" 라는 문자열을 바뀌지 않는것을 확인할 수 없다.

즉 "--_--_- --____- ---_-__ --__-_-"이 패스워드가 아닐까? 라고 생각해 볼수 있고 힌트 1번에서도 패스워드는 가까운곳에... 라고 했다.

'-', '_' 두개의 문자로 이루어져 있기 때문에 2진수를 생각해 볼 수 있고 '-'문자는 1에 대응하고 '_'문자는 0에 대응한다는 것을 느낄 수 있다.

 

위 문자열을 2진수, 10진수, 16진수로 바꾸어보자.

 

위와 같이 표현할 수 있고 아스키코드에 해당하는 문자열을 출력하면 "mate"라는 문자열이 나온다. 그러면 다시 공격할 대상 파일을 실행해 "mate"라는 password를 입력하보자.

 

 

따라서 우리가 암호 분석을 잘 했다고 할 수 있다. 하지만 여기서 끝내지 말고 gdb 분석을 하여 소스 코드를 복원해 보자.

 

 

0x64(100)을 스택에 올린 후 malloc 함수를 호출한다. 따라서 malloc(0x64)라는 함수가 실행되어 힙 영역에 100바이트의 메모리가 할당된다.

 

 

"Insert The Password : "라는 문자열을 스택에 올리고 printf 함수를 호출한다. 따라서 printf("Insert The Password : ")라는 함수가 실행되어 "Insert The Password : "라는 문자열이 출력된다.

 

 

STDIN을 의미하는 0과 0x64(100), 변수 주소를 스택에 올린 후에 fgets 함수를 호출한다. 따라서 fgets(input, 0x64, STDIN) 코드가 실행된다.

 

 

0x04를 스택에 올리고 "mate"라는 문자열도 스택에 올린후 strncmp 함수를 호출한다. strncmp(input, "mate", 0x04)라는 코드가 실행되어 입력받은 값의 4자리가 "mate"인지 비교한다.

 

 

문자열이 다를경우 <main+102>로 이동하라는 것이다.

 

 

문자열이 일치할 경우 "\nCongratulation! next password is \"break the world\".\n\n"라는 문자열을 스택에 올리고 printf함수를 호출한다. 따라서 printf("\nCongratulation! next password is \"break the world\".\n\n")함수가 호출되어 "\nCongratulation! next password is \"break the world\".\n\n"라는 문자열이 출력된다.

 

 

0x0을 스택에 올리고 exit 함수를 호출한다. 따라서 exit(0) 함수가 호출되어 프로그램을 종료한다.

 

 

입력한 내용이 "mate" 문자열과 일치하지 않을 때 "cat /bin/wrong.txt"라는 문자열을 스택에 올린 후 system 함수를 호출한다. 따라서 system("cat /bin/wrong.txt") 함수가 호출 되어 /bin/wrong.txt 파일의 내용을 화면에 보여준다.

 

 

즉, 위와 같은 내용이 출력된다.

'Wargame > FTZ' 카테고리의 다른 글

해커스쿨 FTZ level9  (0) 2017.08.21
해커스쿨 FTZ level8  (0) 2017.08.20
해커스쿨 FTZ level6  (0) 2017.08.17
해커스쿨 FTZ level5  (0) 2017.08.11
해커스쿨 FTZ level4  (0) 2017.08.01