[wargame] overthewire bandit 19 -> 20
Bandit Level 19 -> Level 20
user_id : bandit19
password : cGWpMaKXVwDUNgPAVJbWYuGHVn9zl3j8
목표
다음 레벨에 액세스하려면 홈 디렉토리에서 setuid 바이너리를 사용해야 합니다. 사용 방법을 알아보려면 인수 없이 실행하십시오. 이 레벨의 암호는 setuid 바이너리를 사용한 후 일반적인 자리(/etc/bandit_pass)에서 찾을 수 있습니다.
1. 홈 디렉토리에서 setuid binary를 이용해라
binary가 뭘까?
2진수 숫자로된 데이터 파일을 의미한다
그럼 여기서 말하는 setuid binary는 setuid가 설정된 데이터 파일을 의미한다
setuid가 뭘까?
SetUID는 유닉스 환경에서 일시적으로 접근 권한이 없는 파일에 접근을 허용하는 특수 권한을 부여할 수 있게 된다
자세한 설명은 SetUID를 이용한 권한상승의 위험성 이곳을 참고하면 좋을 것이다
혹시 모르니 바로 한번 /etc/bandit_pass/bandit20를 읽어보자
역시 권한이 없다
해결법
권한
진작에 한번 공부를 했어야 했는데
리눅스 권한 설정, 리눅스 파일 & 디렉토리 권한을 먼저 보고 오면 좋다
1
-rwsr-x--- 1 bandit20 bandit19 14880 Jul 17 15:57 bandit20-do
위와 같은 권한이 있다고 해보자
-(file type)
- : 파일이다
rws (User)
r : 읽기 권한 있음
w : 쓰기 권한 있음
s : setUID 설정이 되어있어 사용자 권한이 있어야 실행할 수 있음
r-x (Group)
r : 읽기 권한 있음
- : 쓰기 권한 없음
x : 실행 권한 있음
— (Other)
아무 권한 없음
bandit20 (User)
파일을 만든 소유주
bandit19 (Group)
파일을 만든 소유주가 속한 그룹
14880 (File size)
파일 크기 byte로 되어있음
Jul 17 15:57 (마지막 변경 날짜)
bandit20-do (파일 이름)
파일을 확인해 보면 권한이 rws로 s가 바로 setuid 설정이 되어있는 것이다
보통은 rwx로 권한이 설정되어있어서 실행 권한을 나타낸다고 한다
일단 한번 실행해보자
다른 user권한으로 실행하라고 한다
예시에 ./bandit20-do id라고 하니 그대로 실행시켜보자
오 우리가 권한에 관해 이야기 할 때 봤듯 setUID가 설정되어있어 bandit20의 권한으로 실행이 된다
더 쉽게 알 수 있는 방법은 실행시켰을 때 uid는 bandit19로 뜨지만 옆에 euid가 bandit20으로 뜨고 있는 것을 볼 수 있다
이 euid는 파일을 실행했을 때 실제 사용하는 uid를 의미한다
비밀번호를 가져오자
문제에서 /etc/bandit_pass/bandit20에 비밀번호가 있다고 하니 읽어보도록 하자
비밀번호 : 0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO
와 솔직히 계속 bandit을 통해 리눅스 지식을 접하거나 bash스크립트를 짤 때 자꾸 사람들이 chmod니 권한 상승이니 하는 말들이 많았고 사실 그 때는 그냥 필요하면 따라하기만 했었는데 이렇게 중요한 것이라고는 생각을 못했었다
나중에 따로 아예 리눅스에 관한 책 혹은 글을 읽어봐야겠다