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를 읽을 정도로 학습했다! (+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분을 기다리고 확인을 해보면
비밀번호가 나온다!