[Bandit] Level 23 → Level 24

우주먼지·2024년 4월 16일
0

[War Game]Bandit

목록 보기
25/34

Bandit Level 23 → Level 24
Level Goal
A program is running automatically at regular intervals from cron, the time-based job scheduler. Look in /etc/cron.d/ for the configuration and see what command is being executed.

NOTE: This level requires you to create your own first shell-script. This is a very big step and you should be proud of yourself when you beat this level!

NOTE 2: Keep in mind that your shell script is removed once executed, so you may want to keep a copy around…

Sol)
이번엔 shell 스크립트를 직접 짜야 한단다. 일단 '/etc/corn.d'를 보자.

다음 단계의 계정의 파일을 보면 for문과 함께 일련의 작업이 구성되어있다.

그러나 나는 bash를 잘 모른다... bandit 진행을 잠시 멈추고 bash를 더 공부하고 진행하자.

드디어 bash를 읽을 정도로 학습했다! (+5 bash skill!)
해당 구문을 분석해보면

#!/bin/bash
#bash로 실행 지정


myname=$(whoami)
#현재 접속한 계정을 myname 변수에 저장


cd /var/spool/$myname/foo
#경로 이동


echo "Executing and deleting all scripts in /var/spool/$myname/foo:" 
#단순 출력

for i in * .*;
#현재 경로에서 전체 순회(*(모든 이름) .*(모든 확장자)) -> 와일드카드 조회

do
#for문 돌면서 do문 실행

    if [ "$i" != "." -a "$i" != ".." ];
    # "$i" != "."
    	# 변수 i(여기서는 파일 및 디렉토리명)가 "."(현재 디렉토리)가 아닐때
    # -a 
    	# ('and'나 '&&'와 같은 연산자)이면서
    # "$i" != ".."
    	# 변수 i가 ".."(이전 디렉토리)가 아닐때
    
    then
    # if문 True 일 경우 실행
        
        echo "Handling $i"
        # 단순 출력
        
        owner="$(stat --format "%U" ./$i)"
        # owner 변수에 "stat --format %U ./$i"명령의 결과를 저장
        # stat --format 명령은 해당 파일($i)에 대한 소유자(%U) 출력 명령
        
        if [ "${owner}" = "bandit23" ]; then
        # owner 변수가 "bandit23"이면 아래 명령 실행
            timeout -s 9 60 ./$i
            # 60초 동안 i파일(./$i)을 실행하고 강제 종료(-s 9)
        fi
        #if문 종료
        
        rm -f ./$i
        #i파일을 삭제함
        
    fi
    #if문 종료
    
done
#do문 종료

결론적으로 해당 작업은 'bandit24' 계정으로 '/var/spool/bandit24/foo'내의 파일을 전부 실행하는데 소유자가 'bandit23'인 경우 60초 동안 실행시키고 강제 종료, 파일은 삭제한다.

여기서 bandit24의 비밀번호는 이전 문제들을 패턴과 마찬가지로 '/etc/bandit_pass/bandit24'의 텍스트파일에 있을껀데

해당 텍스트파일의 내용을 읽으려면 'bandit24' 계정의 권한이 필요하니 이 작업 스크립트가 해당 파일을 읽는 스크립트를 실행시키게끔 해주면 된다.

'/var/spool/bandit24/foo' 디렉토리를 보면 권한이 열려있다.

그럼 해당 디렉토리에 내 스크립트를 끼워 넣어도 될 듯하다.
'/tmp'에 디렉토리(bck)를 만들고 스크립트를 작성한다.

스크립트는 간단하게 비밀번호가 있는 텍스트파일의 내용을 '/tmp/next_level_pass'에 텍스트파일로 생성하도록 작성했다.

그리고 만든 스크립트를 cron 작업 대상인 디렉토리('/var/spool/bandit24/foo')안에 복사본을 만들어준다(그냥 옮겨줘도 되지만 cron작업이 실행되면 사라지므로)

그리고 해당 cron 작업을 다시보면

매 분마다 실행되게끔 되어 있다. 1분만 기다리면 내가 짠 스크립트가 실행될 것이다.

대략 1분을 기다리고 확인을 해보면

비밀번호가 나온다!

profile
오늘보다 내일 더 문제가 많았으면 좋겠다.

0개의 댓글