1. 풀이

- level6은 이전의 level들과 달리 hint가 먼저 출력되며, 이 외의 내용은 확인되지 않음.

- 아무키를 입력하면 텔넷 접속 서비스가 나오며, bbs 선택 시 텔넷 연결 시도 메시지만 출력되며 다른 반응은 관찰되지 않음

- 연결 중지를 위해 ctrl + c (프로세스를 종료하는 인터럽트)를 입력하면, 종료됨.

- 텔넷 접속 서비스 화면에서 ctrl + c를 입력하면, "Can't use ctrl+c"라는 문구가 출력

- 초기 접속 화면에서 ctrl + c를 입력하면 level6의 홈 디렉터리에 접근

인포샵 bbs 텔넷
- 인포샵 bbs는 옛날 전화와 PC과 함께 통신하던 시절 이용되던 사설 BBS 서비스
- 사용자에게 주소를 입력 받아 ping 테스트 후 주소가 활성화 되어 있다면 연결해주는 서비스 제공
- 인포샵 bbs은 초기 접속 화면에서 Ctrl + C signal (프로그램 종료) 을 보내게 되면 바로 shell로 떨어지는 취약점을 가지고있음

- 홈디렉터리의 내용을 확인해보면 password 파일이 존재하며, 해당 파일에 접근하면 비밀번호를 확인할 수 있음.

- tn은 실행파일로, 실행 시 텔넷 접속 서비스를 제공하는 파일

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

- fn 실행파일에 대한 분석

- system>getchar>system>printf 순으로 호출되며, signal 함수는 취약점을 이용하기 위한 함수로 판단됨.

- printf로 출력하는 구문을 봤을때, 텔넷 접속 서비스 화면이 출력되는 부분인 것을 알 수 있음.

- <main+190> ~ <main+197>은 signal 함수를 결정하는 부분

① 문법 : signal(시그널 번호, 시그널을 처리할 핸들)

② 해당 부분을 확인해 signal 함수를 완성하면 signal(2, sig_func)

③ 2번 신호는 SIGINT로, SIGINT가 입력되면 sig_func를 실행함 (SIGINT = ctrl+c)

- scanf()를 통해 사용자로부터 값을 입력 받아 비교한 후 결과에 따라 system 함수를 수행하고, 잘못된 값을 입력할 경우 프로그램 종료

#include <stdio.h>

int main()
{
// 변수 선언
char input;
int i,num;

system("cat hint"); // hint 내용 출력
input=getchar(); // 아무 입력 값 1개 받기
system("clear"); // 화면 초기화

// 구문 출력
printf("###########################\n");
printf("##                                       ##\n");
printf("##          텔넷 접속 서비스        ##\n");
printf("##                                       ##\n");
printf("##                                       ##\n");
printf("##      1. 하이텔    2. 나우누리    ##\n");
printf("##      3. 천리안                      ##\n");
printf("##                                       ##\n");
printf("###########################\n");

// signal()
if(i==SIGIN)
{
signal(i, sig_func);
}

printf("\n 접속하고 싶은 bbs를 선택하세요 : "); // 구문 출력

scanf(%d",&num); // 하이텔, 나우누리, 천리안 중 선택

switch(num) // 입력한 num에 따라 텔넷 연결 시도
{
case 1 :
system("telnet 203.245.15.76");

case 2 :
system("telnet 203.238.129.97");

case 3 :
system("telnet 201.120.128.180);

default :
if(num != 1 && num != 2 && num != 3)
{
printf(" 잘못 입력하셨습니다. 접속을 종료합니다. \n");
}
}
}

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

FTZ Level8 풀이  (0) 2022.10.30
FTZ Level7 풀이  (0) 2022.10.28
FTZ Level5 풀이  (0) 2022.10.27
FTZ Level4 풀이  (0) 2022.10.27
FTZ Level3 풀이  (0) 2022.10.25

+ Recent posts