1. 풀이

- /bin/level7을 실행하면 비밀번호를 입력해야하며, 아무 값이나 입력해보니 /bin/wrong.txt 파일이 없다는 에러가 출력

- 하지만, 해당 파일은 확인되지 않음

- 이는 개인이 FTZ 서버를 열어서 하는 경우 생기는 에러로, 직접 root 계정으로 접속해 wrong.txt를 생성해 주어야 함.

- su 명령으로 root 계정에 로그인 후 해당 파일을 생성하고, 재접속 시 정상 실행됨.

- hint 파일에서 얻은 내용으로 다음을 유추해 볼 수 있음

① 상상력을 총동원하라 > 비밀번호 입력후 나타나는 문자열이 모스부호임을 추측

② 2진수를 10진수를 바꿀 수 있는가? > - 와 _를 각각 1 또는 0으로하여 2진수를 만든 후 10진수로 변환

① - : 1, _ : 0 인 경우
1101101 1100001 1110100 1100101 > 109 97 116 101

② - :0, _ : 1 인 경우
0010010 0011110 0001011 0011010 > 18 30 11 26

- 10진수로 변환한 결과를 통해 아스키코드 값임을 유추해 볼 수 있음

- ①의 경우 mate, ②의 경우 DC2(제어문자) RS(제어문자) VT(공백문자) SUB(제어문자)로 ①이 비밀번호로 추측해볼 수 있음

2. GDB를 통한 의사 코드 복원

- malloc>printf>fgets

- malloc()으로 0x64만큼의 메모리를 할당받고, Insert ~ 구문을 출력한 후 fgets()로 사용자 입력을 받음

- strncmp>test>printf>exit>system

- 사용자가 입력한 비밀번호와 실제 비밀번호와 일치하는지 검증 후 검증 결과에 따라 다음 실행을 결정함

#include <stdio.h>

int main()
{
// 변수 선언
char pass="????";
char input;

input=(*char)malloc(0x64); // 0x64 메모리 할당

printf("Insert The Password : "); // 구문 출력

fgets(input,0x64,STDIN); // 사용자 입력

// 입력값과 비밀번호 비교
// strncmp(str1, str2, 비교 크기)
// str1 < str2 : 음수 반환
// str1 > str2 : 양수 반환
// str1 = str2 : 0 반환
if(strncmp(input,pass,0x4)==0) // 올바른 비밀번호 입력 시
{
// 구문 출력 후 종료
printf("\nCongratulation! next password is \"reak the world\".\n\n");
exit(0);
}
else // 잘못된 비밀번호 입력 시
{
system("cat /bin/wrong.txt");
}

free(input); // 할당받은 메모리 해제

return 0;
}

'문제풀이 > FTZ' 카테고리의 다른 글

FTZ Level9 풀이  (1) 2022.10.30
FTZ Level8 풀이  (0) 2022.10.30
FTZ Level6 풀이  (1) 2022.10.28
FTZ Level5 풀이  (0) 2022.10.27
FTZ Level4 풀이  (0) 2022.10.27

+ Recent posts