1. 풀이

- level3 홈 디렉터리의 내용 확인 및 hint 파일 내용 확인

- autodig의 소스와 more hints가 출력됨.

- autodig 소스와 more hints를 종합해 보면 다음과 같음

① argc 값, 즉 전달받은 인자의 갯수가 2개가 아니어야함

② 동시에 여러 명령을 사용하기 위해 리눅스에서는 ;(세미콜론)을 사용함

③ 문자열 형태로 명령을 전달하기 위해 "명령어" 형식을 사용

dig
- 윈도우의 nslookup과 유사한 프로그램
- 도메인을 입력할 경우 해당 도메인의 IP주소를 알 수 있음
- 양식 : dig [@DNS server IP] [Domain] [Query Type]

- level4의 쉘 명령을 수행하기 위해 level4 권한이면서, setUID가 설정된 파일을 찾아봄.

- 해당 파일을 /bin/autodig "명령어1;명령어2"로 실행시키면 autodig 소스에 의해 수행 순서는 다음과 같음

① argc=2, argv[0]=/bin/autodig, argv[1]="명령어1;명령어2"

② argc=2 이므로 if문이 수행되지 않음

③ strcpy(), strcat()에 의해 완성되는 cmd 배열은 "dig @명령어1;명령어2 version~"

④ system()으로 cmd 값 실행

- 즉, dig @명령어1이 수행된 이후 명령어2가 수행되어 결과를 반환하는 것을 알 수 있음.

- level4의 비밀번호를 확인할 수 있음.

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

- if(argc != 2) 조건문을 만족하는 경우 출력되는 printf 구문

- strcpy()를 통해 dig @ 복사하고, 사용자 입력값을 strcat()를 통해 문자열을 붙임

- setreuid(3004,3004)로 level4의 권한 부여 후 system() 함수로 명령을 실행

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

FTZ Level5 풀이  (0) 2022.10.27
FTZ Level4 풀이  (0) 2022.10.27
FTZ Level2 풀이  (0) 2022.10.25
FTZ Level1 풀이  (0) 2022.10.24
FTZ 환경 구축  (0) 2022.10.23

+ Recent posts