일단은 hint 를 확인해봅시다.
'텍스트 파일 편집 중 쉘의 명령을 실행시킬 수 있다는데...;
리눅스를 사용해 본 적이 있는 사람이라면 VI 편집기의 기본적인 편집 기능에 익숙할텐데 해커라면 다른 부가 기능에 대해 알아야한다.
이 단계에서 요구하는 VI 편집기의 기능은 "명령어 실행" 기능이다.
":!명령어" 형식으로 명령어를 실행하면 셸 화면으로 일시적으로 복귀하면서 입력한 명령어를 실행할 수 있다.
이런 식으로 입력하면 다음과 같이 일시적으로 명령어를 실행할 수 있습니다.
이 후 엔터를 치면 다시 vi 편집기로 돌아오는데 ':q!' 를 치면 나갈 수 있습니다.
명령어 실행 기능은 문서 편집을 하다 시스템으로 돌아가 다른 작업을 해야 할 경우 문서를 닫고 나갔다 다시 돌아오는 번거로움을 피하기 위해서 입니다.
그리고 ls -al 에 r 을 넣어서 'r!ls -al' 을 사용하면 출력으로 나올걸 편집기로 바로 붙여넣기 됩니다.
하지만 개발자가 사용자의 편의를 위해 제공한 기능이지만 사용자에 따라 개발자가 생각하지 못한 기능을 수행하게 될 수도 있죠. 그게 해킹의 묘미니깐요.
find / -perm +6000 -user level3 2> /dev/null
다음 명령어는 level3 계정의 사용자 권한에 SUID가 설정된 파일을 찾는 옵션이고 2> /dev/null은 에러 발생한 결과는 버리겠다는 의미합니다.
해당 파일을 실행하면 vi편집기가 실행됩니다.
VI 편집기같은데 실행파일의 이름이 vi 가 아니라 editor 네요. 그러면 혹시 'vi 실행파일을 editor로 복사했나' 하는 생각을 할 수 있겠죠.
보면 editor 파일 크기가 훨씬 작죠. vim 이나 vi 파일에 링크를 건 것도 아니고.. 하지만 editor 을 사용하면 VI 편집기가 분명하다는 걸 알 수 있죠. 파일 크기가 다른데 어떻게 동일한 기능을 제공한다는 거 희한하네요. 그럼 실행 파일을 분석해 볼까요?
프로그램 실행 과정은 다음과 같습니다.
1. 스택 구성
2. setreuid(3003,3003)을 이용해 실행되는 파일의 User ID 권한으로 level3계정을 설정
3. system() 함수를 이용해 VI 편집기를 실행, 즉 level3 권한으로 VI 편집기 실행하는 실행파일이다.
여기는 procedure prelude 과정 입니다.
setreuid(3003,3003) 이라는 C 코드가 실행된다. /usr/bin/editor 파일은 일시적인 level3의 EUID 권한을 가지게 됩니다.
즉 system("/bin/vi") 라는 C코드를 실행됩니다.
즉 level3의 UserID를 부여하고 system("bin/vi")를 실행하게됩니다. 즉 /usr/bin/editor 파일은 일시적인 level3 계정의 권한으로 VI 편집기를 실행하게 됩니다.
VI 편집기로 id 를 실행시켜봅시다.
보면 UserID 는 level3 이지만 Group ID 가 level2 의 권한을 가지고 있어서 level2 를 실행할 수 있는 환경임을 알 수 있습니다.
그럼 이제 level3 의 패스워드를 확인하는 명령어를 실행해 봅시다.
!my-pass
이렇게 개발자가 의도하지 않은 기능을 수행할 수 있다.
해킹은 항상 일회성으로 끝나는 게 아니라 완전한 셸을 얻을 수 있어야 한다. sh 명령어를 실행하면 다음과 같이 해당 셸이 유지되는 동안 level3 계정이 된다.
헷갈리는 백도어의 개념은 다음과 같이 user id 는 level3 계정의 소유이고 다른 계정으로 그룹 권한이 부여돼 있는 SetUID와 SetGID가 설정돼 있어야 한다는 의미입니다.
이렇게 FTZ 레벨 2를 완료했습니다!
'Wargame > FTZ' 카테고리의 다른 글
FTZ level4 복기 (0) | 2020.11.18 |
---|---|
FTZ level3 풀이 복기 (0) | 2020.11.17 |
해커스쿨 FTZ trainer1~10 정리 (0) | 2020.08.05 |