WAR GAME/Nebula

[Exploit-Exercises: Nebula] level03 풀이

jir4vvit 2020. 5. 21. 22:40

환경설정 : iso 파일을 이용하여 서버를 연 후, cygwin을 이용하여 ssh로 서버에 접속함.

* level03

ID: level03

PW: level03

 

level03 문제

flag03의 홈 디렉토리를 확인해라. 여기엔 2분마다 도는 crontab이 있다.
이 레벨을 통과하려면 level03 계정으로 로그인해라. 이 레벨의 파일은 /home/flag03에서 찾을 수 있다.

 

문제를 푸는 방법 : 다음 레벨의 패스워드를 얻는 것이 아니라 flag03의 권한을 획득하여 getflag를 실행시키는 것

 

리눅스에서는 프로그램이 일정한 주기로 cron 데몬으로부터 실행된다.

crontab : cron 설정파일인 cron table


이번에는 문제에 코드가 없다. 바로 문제를 풀어보도록 하겠다.

 

일단 문제에 제시되어있는 /home/flag03으로 접속해보았다.

 

저기 writable.d와 writable.sh가 보인다

writable.sh 파일을 열어봐야겠다.

 

 

문제에 코드가 제시되어 있지 않았는데 여기에 코드가 있었다.

 

/home/flag03/writable.d 아래 있는 쉘 스크립트 파일들이 하나씩 실행이 되고(bash) 강제로 삭제(rm -f)가 된다고 한다.

 

ulimit  -t는 불필요하거나 무의미한 악성행위들을 반복을 한다고 한다.

단위는 초 단위이고 문제에는 5라고 적혀있으므로 아마 뒤에 내용들을 5초마다 반복을 하는 것 같다..

검색을 해봐도 헷갈리는데 이 부분은 나중에 다시 점검을 해봐야겠다.

 

참고로 bash명령의 x 옵션은 두가지 전제를 뜻한다고 한다.

  1. 저 /home/flag03/writable.d 에 쉘 스크립트 파일이 존재해있어야 함
  2. 쉘 스크립트를 실행하는 계정 기준으로 실행 권한이 있어야 함

여기까지 코드를 해석하다보면 살짝 기대감이 생긴다.

 

문제에서 crontab이 주기적으로 돌고 있다고 했는데 웬지 저 writable.sh 파일을 실행시키고 있을 것 같다.

 

그러면 writable.d 디렉터리 안에 flag03의 권한으로 getflag을 실행시켜 지금 현재 level03인 우리가 볼 수 있도록 getflag를 실행시킨 결과를 메모해놔야겠다.

 

flag03의 권한으로 실행이 되는건 어떻게 생각할 수 있냐면

 

저기 보면 user 실행권한이 flag03이기 때문에 crontab도 flag03 권한으로 도는 것으로 기대할 수 있다.

 


아무튼 기대를 가지고 쉘 스크립트를 작성해 보겠다.

 

저 폴더말고 /home/level03 홈 디렉터리로 가서 쉘 스크립트를 작성 후 /home/flag03/writable.d로 copy를 해주겠다.

 

이렇게 getflag를 실행시켜 모두가 접근할 수 있는 /tmp/rst22.txt에 저장시켰다.

그리고 저 rst22.txt 파일은 flag03의 권한으로 실행이 될 것이기 때문에 level03인 내가 못 열어볼까봐 권한을 777로 두었다.

 

만들어주고 확인해보니 실행권한이 없길래 러프하게 권한을 777로 주었다.

 

이렇게 실행할 수 있는 파일임을 확인했고 (실행할 수 있으면 파일 명이 녹색이 되더라....)

혹시몰라서 file 명령어로 쉘 스크립트인지 확인도 했다.

 

이렇게 /home/flag03/writable.d로 복사를 해주었고 잘 복사되었는지 확인도 했다.

그런데 실행권한 보니까 이유는 모르겠는데 사라져 있었다.

그래서 다시 777로 권한을 부여해줬다.

 

이제 시간이 조금 지나면 저 test 스크립트 파일은 사라지고 /tmp/rst22.txt가 생길 것이다..

 

후후 사라졌다. 이 말은 즉슨 /tmp/rst22.txt가 생겼을 것

 

getflag가 실행된 것을 확인하였다. 

이게 어떻게 flag03 권한으로 실행된 것을 확신할 수 있냐면

지금 writable.d 에 쉘 스크립트 파일음 담고 실행되고 강제로 파일이 삭제되는 과정이 writable.sh 파일이 주기적으로 실행되고 있다는 뜻이다.

 

아까 확인했듯이 writable.sh 파일은 user 실행 권한이 flag03이기 때문에 저 rat22.txt 안의 getflag 실행내용도 flag03임을 확신할 수 있다.