본문 바로가기

5. 방학 활동/Write UP

[2021/02/20] bandit wargame Level19 ~ Level23

Level19 Level20

다음 레벨에 액세스하려면 홈 디렉토리에있는 setuid 바이너리를 사용해야합니다.

사용 방법을 찾으려면 인수없이 실행하십시오.

이 레벨의 비밀번호는 setuid 바이너리를 사용한 후 일반적인 위치 (/ etc / bandit_pass)에서 찾을 수 있습니다.

 

$ ls

$ ls -al ./bandit20-do

$ ./bandit20-do id

uid = 11019(bandit19) gid = 11019(bandit19) euid=11020(bandit20) groups=11019(bandit19)

bandit20의 권한으로 실행이 되는 프로그램이다. 

 

$ ls /etc/bandit_pass/bandit*

$ ls  /etc/bandit_pass/bandit20

$cat /etc/bandit_pass.bandit20

$ ./bandit20-do cat  /etc/bandit_pass/bandit20

bandit19의 cat으로는 접근할 수 없지만 bandit20으로 권한상승하여 접근할 수 있다.

이를 통하여 다음과 같은 비밀번호를 얻을 수 있다.

 

GbKksEFF4yrVs6il55v6gwY5aVje5f0j

 

 

Level20 Level21

문제해설)

홈 디렉터리에는 setuid binary가 있다: 이것은 너가 집중하고자 하는 포트의 localhost와 명령어를 사용하는 것과 같이 연결을 해준다. 그러면 그것은 텍스트를 읽고 전단계(bandit20)의 패스워드와 비교해 만약 패스워드가 맞다면

다음단계(bandit21)의 것으로 바꾸어줄 것이다.

NOTE: 너가 생각하는 대로 작동되는 지를 보려면 너의 네트워크로 연결을 시도해보아라.

 

문제풀이)

nc명령어를 이용하는데, 새롭게 포트를 열어주기 때문에 -l 옵션을 사용하며,

포트번호는 임의로 7777로 한다. 이를 백그라운드에서 실행하고자 할 때에는 뒤에 &를 붙인다.

그 다음, suconnect로 포트 7777에 접속한다.

패스워드가 일치한다는 멘트와 함께 다음 단계의 패스워드가 주어진다.

 

 

 

Level21 Level22

문제 해설)

프로그램은 cron에서 정기적으로 실행되고, 이것은 시간 기반 작업 스케쥴러이다. /etc/cron.d/를 보고 무슨 명령이 실행되는 지를 보면 cronjob으로 사작하는 파일들이 아주 많다.  이 파일들의 형식을 보니 ASCII텍스트 파일이다.

이중 bandit22파일이 패스워드를 알려주는 파일인것 같다. cronjob_bandit22 파일을 읽어보니 두개의 문장이 나온다.

*로 이루어진 부분은 앞에서부터 분, 시, 일, 월, 요일을 나타내는데

모두 다 *로 표시되어 있으므로 매달, 매일, 매시간을 나타낸다.(항상) 그리고 유저의 이름이 나타나 있다.

마지막으로 명령어가 적혀있다. /usr/bin/cronjob_bandit222.sh 쉘 스크립트 파일을 백그라운드에서 실행하고 결과값은 화면에 출력하지 않고 리눅스의 휴지통으로 출력하라는 명령어 이다.

cronjob_bandit22.sh 파일을 읽어보면 /tmp/t706……. 이라는 파일의 권한을 644로 설정하고

이 파일안에 패스워드가 있는 파일을 복사해준다는 내용의 파일이다. 

그러니 이 /tmp/t706……..파일에 패스워드가 있다는 것이고 이 파일을 읽어주면 패스워드를 획득할 수 있다.

 

 

 

Level22 Level23

프로그램은 시간 기반 작업 스케줄러인 cron에서 정기적으로 실행된다.

/etc/cron.d/에서 구성을 찾고 실행중인 명령을 확인하라고 한다.

이번 문제는 쉘 스크립트를 읽어야 한다.

 

mytarget을 찾아야 하는 것을 볼 수 있다.

myname 은 bandit23 이므로

ehco I am user bandit23 | md5sum | cut -d ‘ ‘ -f 1 명령을 적어준다.

 

mytarget은 8ca319486bfbbc3663ea0fbe81326349 이다.

이걸 tmp 디렉터리에서 읽어주면 된다.

패스워드를 찾았다.

 

 

 

Level23 Level24

bandit 23에 접속을 한뒤, /etc/cron.d/ 를 읽어보면 

60초 주기로 모든 파일이 삭제 될때까지 동작하는 것을 볼 수 있다.

/var/spool/bandit24 안에 있는 모든 스크립트를 실행시킨 뒤 60초 후에 지우기 때문에 지워지기 전에 /etc/bandit_pass/bandit24 안에 있는 내용을 복사하자. 

 

우선 tmp 에 본인의 폴더를 생성한 뒤 dump.sh라는 파일을 통해 bandit24 비밀번호를 본인의 폴더에 복사시킨다.

그런 뒤에는 디렉토리와 파일에 권한을 부여하고

마지막으로 dump.sh를 /var/spool/bandit24로 복사해준 다음 password를 확인한다.