본문 바로가기

Bandit

Bandit Level 23 -> Level 24

해당 게시글은 bandit wargame에 대한 스포일러(방향성/힌트/정답)를 제공할 수 있습니다. 

 

 

 

bandit level 23의 목표는

cron에 의해 자동으로, 정기적인 간격에 따라 실행되는 프로그램이 있으므로

/etc/cron.d 디렉토리에서 설정을 확인하고 실행되는 명령어를 확인하여 비밀번호를 획득하는 것입니다. 

 

NOTE는

해당 레벨을 클리어하기 위해 쉘 스크립트 작성이 필요하며, 

쉘 스크립트는 실행된 후 사라지므로 다른 곳에 저장하라는 내용입니다. 

 

 

#!/bin/bash  #shebang

myname=$(whoami)
# runtime 시점의 실행 주체인 bandit24로 할당된다

cd /var/spool/$myname/foo
echo "Executing and deleting all scripts in /var/spool/$myname/foo:"
# echo에 의해 /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
# .(현재 디렉토리) ..(부모 디렉토리)를 제외하고
# stat 명령어를 통해 추출한 owner가 bandit23라면
# 60초의 시간제한을 두고 실행하고 60초가 지나면 실행중지한다.
# /var/spool/$myname/foo의 모든 파일을 삭제한다.

 

#!/bin/bash

cat /etc/bandit_pass/bandit24 > /tmp/tmp.A4ednlf6YF/banditpw24

cp 명령어를 통한 파일복제는 원본 파일의 권한비트를 보존하기 때문에

내부 데이터만을 유출하는 방법은 명시적으로 권한을 개방하는 출력 리다이렉션 방식이 더 유효합니다. 

 

cron에 의해 shell script를 실행하고 비밀번호 파일을 쓰는 사용자는 bandit24입니다.

chmod 777도 유효하지만 최소 권한 원칙을 따르기 위해

실행될 쉘 스크립트는 읽기 및 실행 권한만을 부여하고, 

읽어올 파일이 생성될 임시 디렉토리에도 쓰기 및 실행 권한만을 부여합니다. 

 

cp 명령어로 대상 디렉토리에 실행 권한이 부여된 스크립트를 투입하면

cron으로 실행되는 쉘 스크립트가 bandit24 권한으로 보호된 파일을 읽어 임시 디렉토리에 쓰도록 유도합니다. 

'Bandit' 카테고리의 다른 글

Bandit Level 25 -> Level 26  (0) 2026.01.13
Bandit Level 24 -> Level 25  (0) 2026.01.13
Bandit Level 22 -> Level 23  (0) 2026.01.13
Bandit Level 21 -> Level 22  (0) 2026.01.13
Bandit Level 20 -> Level 21 (ptrace?)  (0) 2026.01.13