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 |