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 |